fork download
  1. def f(n):
  2. return 1 if n<1 else 6*f(n-1) + sum(f(i)*f(n-2-i) for i in xrange(n-1))
  3.  
  4. def h(x):
  5. if x=='': return 1
  6.  
  7. if len(x)==1: return ' +-<>,.'.find(x)
  8.  
  9. if x[0]!='[':
  10. return (h(x[0])-1) * f(len(x)-1) + h(x[1:])
  11.  
  12. d=i=1
  13. while d:
  14. if x[i]==']': d-=1
  15. elif x[i]=='[': d+=1
  16. i+=1
  17.  
  18. a=i-2
  19. b=len(x)-i
  20.  
  21. return 6*f(a+b+1) + sum(f(i)*f(a+b-i) for i in range(a)) + (h(x[1:i-1])-1) * f(b) + h(x[i:])
  22.  
  23. def g(x):
  24. return sum(f(i) for i in xrange(len(x))) + h(x)
  25.  
  26. def enumerate(n):
  27. if n==0: return ['']
  28.  
  29. a=[]
  30.  
  31. for c in '+-<>,.':
  32. for x in enumerate(n-1):
  33. a+=[c+x]
  34.  
  35. for i in range(n-1):
  36. for x in enumerate(i):
  37. for y in enumerate(n-2-i):
  38. a+=['['+x+']'+y]
  39.  
  40. return a
  41.  
  42. def verify():
  43. i=1
  44.  
  45. for n in range(7):
  46. for x in enumerate(n):
  47. if g(x)!=i:
  48. print i,g(x),x
  49. 1/0
  50. i+=1
  51. print 'n=%d done'%n
  52.  
  53. print 'ok'
  54.  
  55. def test():
  56. i=1
  57. for n in range(7):
  58. a=enumerate(n)
  59.  
  60. for x in a:
  61. print i,x
  62. i+=1
  63.  
  64. print 'for n=%d, there are %d valid programs'%(n,len(a))
  65.  
  66. verify()
Time limit exceeded #stdin #stdout 5s 11408KB
stdin
Standard input is empty
stdout
Standard output is empty