fork download
  1. '''[]
  2. txt = open('bftest.txt', 'r')
  3. code = [''.join([i.strip() for i in open('bftest.txt', 'r').readlines()])]
  4. txt.close()
  5. '''
  6. def bracketLen(code):
  7. for length in range(2, len(code) + 1):
  8. if code[:length].count('[') is code[:length].count(']'):
  9. return length
  10. else:
  11. return None
  12.  
  13. def calcLetter(stdin, code, memory, pointer, readpoint, stdout):
  14. letter = code[readpoint]
  15. if pointer not in memory:
  16. memory.update({pointer:0})
  17. if letter is '>':
  18. pointer = str(int(pointer) + 1)
  19. readpoint += 1
  20. elif letter is '<':
  21. pointer = str(int(pointer) - 1)
  22. readpoint += 1
  23. elif letter is '+':
  24. memory[pointer] = (memory[pointer] + 1) % 0xff
  25. memory[pointer] %= 256
  26. readpoint += 1
  27. elif letter is '-':
  28. memory[pointer] = (memory[pointer] - 1) % 0xff
  29. readpoint += 1
  30. elif letter is '.':
  31. stdout += chr(memory[pointer])
  32. readpoint += 1
  33. elif letter is ',':
  34. memory[pointer] = stdin.pop(0)
  35. readpoint += 1
  36. elif letter is '[':
  37. if memory[pointer]:
  38. readpoint += 1
  39. else:
  40. readpoint += bracketLen(code[readpoint:])
  41. elif letter is ']':
  42. if memory[pointer]:
  43. readpoint += - bracketLen(code[:readpoint + 1][::-1]) + 1
  44. else:
  45. readpoint += 1
  46. else:
  47. readpoint += 1
  48. return [stdin, code, memory, pointer, readpoint, stdout]
  49.  
  50. stdin, code, memory, pointer, readpoint, stdout= [
  51. [int(i) % 0xff for i in input().split()],
  52. input(),
  53. {'0' : 0},
  54. '0',
  55. 0,
  56. '',
  57. ]
  58. while readpoint < len(code):
  59. stdin, code, memory, pointer, readpoint, stdout = calcLetter(stdin, code, memory, pointer, readpoint, stdout)
  60. print(stdout)
Success #stdin #stdout 0.01s 9992KB
stdin
+++++++++[->++++++++>+++++++++++>+++++<<<]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.
stdout
Hello, world!