fork(2) download
  1. table = '[<>,.-+]'
  2. def numerate(s):
  3. c=d=C=D=0
  4. for e in s:d=d*8+'[<>,.-+]'.find(e);c+=(d and'['==e)-(c and'['<e);C,D=(-c,C+1,d,D)['['<e::2]
  5. return -~D*8**C
  6.  
  7. def denumerate(number):
  8. number -= 1
  9. oct_encoded = oct(number)[2:]
  10. if oct_encoded == "0":
  11. return ""
  12. program = ""
  13. for digit in oct_encoded:
  14. program += table[int(digit)]
  15. temp = program.rstrip(']')
  16. outside_loops = len(program) - len(temp)
  17. program = temp
  18. unmatched_left = 0
  19. unmatched_right = 0
  20. depth = 0
  21. for op in program:
  22. if op == '[':
  23. depth += 1
  24. if op == ']':
  25. if not depth:
  26. unmatched_right += 1
  27. else:
  28. depth -= 1
  29. unmatched_left = depth
  30. return '[' * (unmatched_right + outside_loops) + program + ']' * (unmatched_left + outside_loops)
  31.  
  32. for x in range(1,1000):
  33. temp = denumerate(x)
  34. try:
  35. assert x == numerate(temp)
  36. except AssertionError:
  37. print(x, ":", temp)
Success #stdin #stdout 0.02s 9944KB
stdin
Standard input is empty
stdout
Standard output is empty