You are on page 1of 2

# k q b r h p

board=[]
with open("sc_puzzle.txt","r") as f:
while line:=f.readline()[:-1]:
if line=="_":break
board.append(list(line))

def solve(b):
dm={
"p":[(-1,-1),(-1,1)],
"k":[(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)],
"h":[(-2,-1),(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2)],
"r":[("-",0),(0,"+"),("+",0),(0,"-")],
"b":[("-","+"),("+","+"),("+","-"),("-","-")],
}
dm["q"]=dm["r"]+dm["b"]

n,m=len(b),len(b[0])
tnp=[0];inib=[["."]*m for _ in range(n)]
for i in range(n):
for j in range(m):
inib[i][j]=b[i][j]
if b[i][j]!='.':tnp[0]+=1
nos=[0]
import os
class tcolor:
eaterp='\033[94m'
preyp='\033[92m'
endc='\033[0m'
def display_boardc(mb,mv):
for i in range(n):
for j in range(m):
if i==mv[0] and j==mv[1]:
print(tcolor.eaterp+mb[i][j]+tcolor.endc,end="")
elif i==mv[2] and j==mv[3]:
print(tcolor.preyp+mb[i][j]+tcolor.endc,end="")
else: print(mb[i][j],end="")
print()
def display_animated_solution(mvs):
nos[0]+=1
db=[["."]*m for _ in range(n)]
for i in range(n):
for j in range(m):
db[i][j]=inib[i][j]
print(nos[0])
display_boardc(db,mvs[0])
_=input();os.system("cls")
ln=len(mvs)
for i in range(0,ln):
mv=mvs[i]
p=db[mv[0]][mv[1]];db[mv[0]][mv[1]]='.';db[mv[2]][mv[3]]=p
print(nos[0])
mv=mvs[i+1] if i+1<ln else (-1,-1,-1,-1)
display_boardc(db,mv)
_=input();os.system("cls")

def worker(b,movesd=[]):
for i in range(n):
for j in range(m):
if b[i][j]!='.':
for mv in dm[b[i][j]]:
mqi=mv[0] if type(mv[0]) is int else -1 if
mv[0]=='-' else 1
mqj=mv[1] if type(mv[1]) is int else -1 if
mv[1]=='-' else 1
i2,j2,pf=i+mqi,j+mqj,0
while 0<=i2<n and 0<=j2<m:
if b[i2][j2]!='.':pf=1;break
if not pf:
ct=0
if type(mv[0]) is str: i2+=mqi;ct=1
if type(mv[1]) is str: j2+=mqj;ct=1
if not ct:break
if pf:
movesd.append((i,j,i2,j2))
tnp[0]-=1;cb=b[i][j];cb2=b[i2][j2]
b[i][j]='.';b[i2][j2]=cb
if tnp[0]==1:
display_animated_solution(movesd)
else:
worker(b,movesd)
b[i][j]=cb;b[i2][j2]=cb2;tnp[0]+=1
del movesd[-1]
worker(board)

You might also like