Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # http://puzzling.stackexchange.com/q/38324/40
- def knight():
- m = ["111111111110110100001000010000000001000100",
- "000000000000010101000001000000000100010001",
- "011111111111100001000100011001010010100010",
- "000000000000000010000000000101010000000010",
- "011010101001100010011001000100000010101000",
- "000000000000100001100100000100011000000000",
- "111011011101100000000001100101001001000111",
- "000000000000000100000000111001001001000100",
- "111111111110100000101100000000000100010110",
- "000000000000000010100001000000000100010010",
- "110110111111100010100100010101000000000000",
- "100000000000111100010100010101010110011100",
- "110111111110100100010001000000110001110101"]
- a = []
- w = len(m[0])
- h = len(m)
- MAX = w*h+1
- for i in range(h):
- a.append([])
- for j in range(w):
- a[i].append([-1,MAX][int(m[i][j])])
- a[0][0] = 0
- q = [(0,0)]
- while len(q) > 0:
- (x,y),q = q[0],q[1:]
- for dx in [-2,-1,1,2]:
- for dy in [-2,-1,1,2]:
- if abs(dx*dy) != 2:
- continue
- xx, yy = x+dx, y+dy
- if (xx>=0 and xx<w and yy>=0 and yy<h and
- a[yy][xx] != -1 and a[yy][xx]>a[y][x]+1):
- a[yy][xx] = a[y][x]+1
- q.append((xx,yy))
- for i in range(h):
- o = ""
- for j in range(w):
- c = a[i][j]
- if c == -1:
- o = o + "." # blue cell (off-limits)
- elif c == MAX:
- o = o + "-" # yellow, but still unreachable
- else:
- if c > 25:
- c += 6
- o = o + chr(c+65)
- print o
- knight()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement