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