fork download
  1. T=lambda j,r:j==r[:len(j)]and all(i==j[-1]for i in r[len(j):])
  2. def f(s):
  3. q,s=[s],[]
  4. for i in q:
  5. if len(i)<2:return 0
  6. a,b,*c=i;r=((c if'['!=str(c[0])[0]else c[0]+c[1:])if c else[])if'N'==a else[[b],b][str(b)[0]=='[']+[b]*['S','D','T'].index(a)+c
  7. if r in s:return 1
  8. if any(T(j,r)+T(j[::-1],r[::-1])for j in s):return 2
  9. q+=r,;s+=r,
  10.  
  11. import re
  12. def to_list(s):
  13. return eval('['+re.sub('\w|\]', lambda x:f'"{x.group()}",'if x.group().isalpha() else '],', s.replace('(','[').replace(')',']'))+']')
  14.  
  15.  
  16. for i in filter(None, """N
  17. NT
  18. SS
  19. S(TNT)
  20. D(D(NN)N)
  21. TN
  22. TS
  23. TNT
  24. T(NTDS)T
  25. T(T(T(NTDS)))""".split('\n')):
  26. assert f(to_list(i)) == 0, i
  27.  
  28. for i in filter(None, """DD
  29. D(SD)
  30. TDD
  31. D(NSDD)
  32. DD(TT)
  33. S(TSD(TSD))""".split('\n')):
  34. assert f(to_list(i)) == 1, i
  35.  
  36. for i in filter(None, """TT
  37. ST(ST)
  38. NTTT
  39. NT(DT)
  40. ST(ST)
  41. TTD""".split('\n')):
  42. assert f(to_list(i)) == 2, i
  43.  
  44. print('tests passed')
  45.  
Success #stdin #stdout 0.2s 15440KB
stdin
Standard input is empty
stdout
tests passed