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) if len(b)>(j:=x+X)>-1<(k:=y+Y)<len(b[0])and d<2: if('.'==(S:=b[j][k]))>d:yield(j,k) if'.'!=S and S.isupper()!=c.isupper()and d:yield(j,k);d=2 q+=(j,k,[d,1][d<2and'.'!=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)]