fork download
  1. L=len
  2. m='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
  3. f=m.lower()
  4. def g(t,c,l,d,s=[],r=[],o=-1):
  5. k=1
  6. for q,(x,y)in[(0,[0,-1]),(1,[1,0]),(1,[-1,0])]:
  7. if~-((w:=(a:=c[0]+x,b:=c[1]+y))in r)and L(t[0])>a>-1<b<L(t)and q-o:
  8. z=r+[w]
  9. if(h:=t[b][a])in'│─':k=0;yield from g(t,w,l,d,s,z)
  10. elif'┴'==h:k=0;yield from g(t,w,h,d,s,z,1)
  11. elif'┬'==h:
  12. if q:d.append(s[-1])
  13. else:k=0;yield from g(t,w,h,d,s,z)
  14. elif h in m+f and l in'┬┴':k=0;yield from g(t,w,h,d,s+[h],z)
  15. if k:yield s
  16. def a(t):
  17. b,p,z=[*filter(None,t.split('\n'))],{},[]
  18. for x,y in[(x,y)for x in range(L(b[0]))for y in range(L(b))if b[y][x]in m+f]:
  19. for s in g(b,q:=(x,y),r:=b[y][x],z,[r],[q]):p[s[0]]=p.get(s[0],[])+[s]
  20. return any(~-(a in z)*~-(b in z)and L(set([a in m,b in m]))==2and~-all((q:=set(c)&set(d))and any(c.index(i)<3for i in q)for c in p[a]for d in p[b])for a in p for b in p)
  21.  
  22. s1="""
  23. ы┬К
  24. ю
  25. """
  26. s2="""
  27. А┬д
  28. О┴п┬Щ
  29. Ф
  30. """
  31. s3 ="""
  32. ю┬────────Й
  33. м┬Е
  34. │ ш
  35. Щ
  36. """
  37. s4="""
  38. з┬Й
  39. Л┬м┴п─┬Ф
  40. Ы┴я┬А ш┬Я
  41. З Е
  42. """
  43. s5="""
  44. з┬Й
  45. Л┬м┴п─┬Ф
  46. ё┴А┬я ш┬Я
  47. З Е
  48. """
  49. s6="""
  50. д┬Ф
  51. ю┬────────Й┴─ё┬З
  52. │ │
  53. │ ш <this person smells bad
  54. Щ <this person betrayed the Party!
  55. """
  56. s7 = """
  57. Щ 1234567890 quick brown foxes jumped over the lazy dog ш
  58. """
  59. s8 = """
  60. з┬Й
  61. Л┬м┴п─┬Ф
  62. й┬Ы┴я┬А ш┬Я
  63. Э З ю
  64. """
  65. s9="""
  66. А┬д ф┬Ж
  67. м┴п┬Щ ю┬Я
  68. Ф ц
  69. """
  70. print(a(s1))
  71. print(a(s2))
  72. print(a(s3))
  73. print(a(s4))
  74. print(a(s5))
  75. print(a(s6))
  76. print(a(s7))
  77. print(a(s8))
  78. print(a(s9))
Success #stdin #stdout 0.09s 14056KB
stdin
Standard input is empty
stdout
False
False
True
False
True
True
True
True
True