def f(t,b): q=[(*t,0,b[t[0]][t[1]],*i)for i in[(0,1),(0,-1),(1,0),(-1,0)]] while q: x,y,d,c,X,Y=q.pop(0);j=x+X;k=y+Y if-d>-2<len(b)>j>-1<k<len(b[0]): if(('.'==(S:=b[j][k]))>d)+(z:='.'!=S and S.isupper()-c.isupper()and d):yield(j,k) d=[d,2][z];q+=(j,k,d**(d>1or'.'==S),c,X,Y), def format_board(B): return [[*i] for i in filter(None, B.split('\n'))] b1 = """ ....h.... ......... ......... ....h.... ......... ....C..ac ....E.... ....h.... ....g.... ....R....""" print([*f((5, 4),format_board(b1))]) b2=""" ......... ......... ......... ......... ......... ....C.... ......... ......... ......... ......... """ print([*f((5, 4),format_board(b2))]) b3 = """ ......... .....G... ......... ......... .....e... ......... ......... h..R.c..S .....a... .........""" print([*f((7, 5),format_board(b3))]) b4=""" ..s...... ..A...e.. ......... EACCcsh.H ..r...... .....S... ......s.. ....C.... ..g......""" print([*f((3,2),format_board(b4))]) b5=""" rheagaehr ......... .c.....c. s.s.s.s.s ......... ......... S.S.S.S.S .C.....C. ......... RHEAGAEHR""" print([*f((7,7),format_board(b5))])
Standard input is empty
[(5, 5), (5, 3), (4, 4), (5, 6), (5, 2), (7, 4), (5, 1), (5, 8), (5, 0), (0, 4)] [(5, 5), (5, 3), (6, 4), (4, 4), (5, 6), (5, 2), (7, 4), (3, 4), (5, 7), (5, 1), (8, 4), (2, 4), (5, 8), (5, 0), (9, 4), (1, 4), (0, 4)] [(7, 6), (7, 4), (6, 5), (7, 7), (5, 5), (1, 5)] [(2, 2), (3, 4), (0, 2), (8, 2)] [(7, 8), (7, 6), (8, 7), (6, 7), (7, 5), (5, 7), (7, 4), (4, 7), (7, 3), (3, 7), (7, 2), (0, 7)]