E=enumerate def L(x,y,d): q=[(x,y,[(x,y)])] for x,y,p in q: if(x,y)in d and'T'==d[(x,y)]:del d[(x,y)];return p q+=[(*t,p+[t])for t in[(x+1,y),(x-1,y),(x,y-1),(x,y+1)]if(V:=d.get(t))and(V!='M')>(t in p)] def f(b): d,r={(x,y):v for x,r in E(b)for y,v in E(r)},[];x,y=[j for j in d if'P'==d[j]][0] while~-all(j in r for j in d if'T'==d[j])and(V:=L(x,y,d)):r+=V;x,y=V[-1] return r def to_board(s): return [a.split('|')[1:-1] for i,a in enumerate(filter(None, s.split('\n')))if i%2] s1 = """ +-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |T| | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |M|M|M|T| | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | |T| | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ """ s2 = """ +-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| | | | |M| | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | |M| | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |T| | |M| | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ |M|M|M|M|M|M| | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ """ s3 = """ +-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| | |M|M|M| | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | |M|M|M|M|M|M|M| | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |M| | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |M|M|M|M| | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ """ s4 = """ +-+-+-+-+-+-+-+-+-+-+-+-+-+ |M|M|M|M|M|M|M|M|M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |M|M|M|M|M|M|M|M|M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |M|M|M|M|M|M|M|M|M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |M|M|M|M|M|M|M|M|M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |M|M|M|M|M|M|M|M|M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |M|M|M|M|M|M|M|M|M|M|M|M|P| +-+-+-+-+-+-+-+-+-+-+-+-+-+ """ s5 = """ +-+-+-+-+-+-+-+-+-+-+-+-+-+ |T|T|T|T|T|T|T|T|T|T|T|T|T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |T|T|T|T|T|T|T|T|T|T|T|T|T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |T|T|T|T|T|T|P|T|T|T|T|T|T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |T|T|T|T|T|T|T|T|T|T|T|T|T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |T|T|T|T|T|T|T|T|T|T|T|T|T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ |T|T|T|T|T|T|T|T|T|T|T|T|T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ """ s6 = """ +-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| | | | | | | | | | | |T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | |M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | |M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | | | | | |T| +-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | | | | | |M|M|M|M|M| +-+-+-+-+-+-+-+-+-+-+-+-+-+ """ print(f(to_board(s1))) print(f(to_board(s2))) print(f(to_board(s3))) print(f(to_board(s4))) print(f(to_board(s5))) print(f(to_board(s6)))
Standard input is empty
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (2, 2), (2, 3), (2, 4), (2, 5), (3, 5), (3, 5), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9)] [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2)] [] [] [(2, 6), (3, 6), (3, 6), (4, 6), (4, 6), (5, 6), (5, 6), (5, 5), (5, 5), (4, 5), (4, 5), (3, 5), (3, 5), (2, 5), (2, 5), (1, 5), (1, 5), (0, 5), (0, 5), (0, 4), (0, 4), (1, 4), (1, 4), (2, 4), (2, 4), (3, 4), (3, 4), (4, 4), (4, 4), (5, 4), (5, 4), (5, 3), (5, 3), (4, 3), (4, 3), (3, 3), (3, 3), (2, 3), (2, 3), (1, 3), (1, 3), (0, 3), (0, 3), (0, 2), (0, 2), (1, 2), (1, 2), (2, 2), (2, 2), (3, 2), (3, 2), (4, 2), (4, 2), (5, 2), (5, 2), (5, 1), (5, 1), (4, 1), (4, 1), (3, 1), (3, 1), (2, 1), (2, 1), (1, 1), (1, 1), (0, 1), (0, 1), (0, 0), (0, 0), (1, 0), (1, 0), (2, 0), (2, 0), (3, 0), (3, 0), (4, 0), (4, 0), (5, 0)] [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (0, 10), (0, 11), (0, 12), (0, 12), (0, 11), (0, 10), (0, 9), (0, 8), (0, 7), (1, 7), (2, 7), (3, 7), (4, 7), (4, 8), (4, 9), (4, 10), (4, 11), (4, 12)]