fork download
  1. E=enumerate
  2. def f(b):
  3. d={}
  4. for x,r in E(b):
  5. for y,v in E(r):d[v]=d.get(v,[])+[(x,y)]
  6. S=lambda:[(T:=[*{*d}-{'-'}][0],*(l:=d.pop(T))[0],*({*l}-{l[0]}),{**d},eval(str(b)))];q=S()
  7. while q:
  8. C,x,y,e,d,b=q.pop(0)
  9. for T in(x,y+1),(x,y-1),(x+1,y),(x-1,y):
  10. if T in d['-']:B=eval(str(b));B[T[0]][T[1]]=C;q+=(C,*T,e,{**d,'-':{*d['-']}-{T}},B),
  11. elif T==e:
  12. if(z:=len(d))==1and not d['-']:return b
  13. if z>1:q+=S()
  14.  
  15. s1 = """
  16. -ABCD
  17. -A---
  18. ---C-
  19. ---BD
  20. --E-E
  21. """
  22. s2 = """
  23. E--E-
  24. BB-C-
  25. AD---
  26. ---C-
  27. AD---
  28. """
  29.  
  30. s3 ="""
  31. A----
  32. ---B-
  33. -C-C-
  34. -D-D-
  35. BE-EA
  36. """
  37.  
  38. def to_board(s):
  39. return [[*i] for i in filter(None, s.split('\n'))]
  40.  
  41. def F(s):
  42. return '\n'.join(map(''.join, f(to_board(s))))
  43.  
  44. print(F(s1))
  45. print('-'*20)
  46. print(F(s2))
  47. print('-'*20)
  48. print(F(s3))
Success #stdin #stdout 0.23s 14132KB
stdin
Standard input is empty
stdout
AABCD
AABCD
BBBCD
BBBBD
BBEEE
--------------------
EEEEE
BBECE
ADECE
ADECE
ADEEE
--------------------
AAAAA
BBBBA
BCCCA
BDDDA
BEEEA