fork download
  1. f=\
  2. lambda s:any(all({*s}-{*k}for k in j)^1and K(s,j)and j[0]==j[1][::-1]==j[2]for i in range(L(s))for j in C(s,i+1))
  3. L=len
  4. K=lambda s,l:not(l or s)or l and s[:(T:=L(l[0]))]==l[0]and(K(s[T:],z:=l[1:])or K(s[T-1:],z))
  5. C=lambda s,n,l=[]:L(l)==3and[l]or[j for x in range(L(s)-n+1)for j in C(s,n,l+[s[x:x+n]])]
  6.  
  7. import re
  8. s1="""a (a / a / a)
  9. bb (b / b / b) - note that there are two possible choices for Y
  10. ccc (c / c / c)
  11. coco (co / oc / co)
  12. mamma (ma / am / ma)
  13. uhhuh (uh / hu / uh)
  14. xyyxxy (xy / yx / xy)
  15. banaban (ban / nab / ban)
  16. dottodot (dot / tod / dot)
  17. dadadadada (dada / adad / dada)"""
  18. for i in filter(None, s1.split('\n')):
  19. print(f(re.findall('^\w+', i)[0]))
  20. s2="""xy
  21. coc
  22. faff
  23. xyzzy
  24. mummy
  25. random
  26. hotshot
  27. tralindrome
  28. dadadadadada
  29. aabaabaaaabaa"""
  30. print('-'*20)
  31. for i in filter(None, s2.split('\n')):
  32. print(f(i))
Success #stdin #stdout 0.32s 15456KB
stdin
Standard input is empty
stdout
True
True
True
True
True
True
True
True
True
True
--------------------
False
False
False
False
False
False
False
False
False
False