Advertisement
Guest User

Untitled

a guest
Jul 1st, 2022
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. import re
  2.  
  3. SHOW_INTERMEDIARY_STATE = True
  4.  
  5. def remove_whitespace(s):
  6. return re.sub(r"\s", "", s)
  7.  
  8. def parse_source(source):
  9. ops = []
  10. for line in source.split("\n"):
  11. line = remove_whitespace(line)
  12. if not line:
  13. continue
  14. assert line.count("=") == 1
  15. l,_,r = line.partition("=")
  16. ops.append((l, r))
  17. return ops
  18.  
  19. def exec(program_or_source, s):
  20. if isinstance(program_or_source, list):
  21. program = program_or_source
  22. else:
  23. program = parse_source(program_or_source)
  24.  
  25. pc = 0
  26.  
  27. if SHOW_INTERMEDIARY_STATE:
  28. print(pc, s)
  29. while pc < len(program):
  30. l,r = program[pc]
  31. if l in s:
  32. s = s.replace(l, r, 1)
  33. if SHOW_INTERMEDIARY_STATE:
  34. print(pc, s)
  35. pc = 0
  36. else:
  37. pc += 1
  38. return s
  39.  
  40. #given a string containing only X, a, b, and c, move all "X"es to the end of the string.
  41. source="""
  42. 0<INCREMENT> = 1
  43. 1<INCREMENT> = 2
  44. 2<INCREMENT> = 3
  45. 3<INCREMENT> = 4
  46. 4<INCREMENT> = 5
  47. 5<INCREMENT> = 6
  48. 6<INCREMENT> = 7
  49. 7<INCREMENT> = 8
  50. 8<INCREMENT> = 9
  51. 9<INCREMENT> = <INCREMENT>0
  52. <INCREMENT> = 1
  53.  
  54. 0<DECREMENT> = <DECREMENT>9
  55. 1<DECREMENT> = 0
  56. 2<DECREMENT> = 1
  57. 3<DECREMENT> = 2
  58. 4<DECREMENT> = 3
  59. 5<DECREMENT> = 4
  60. 6<DECREMENT> = 5
  61. 7<DECREMENT> = 6
  62. 8<DECREMENT> = 7
  63. 9<DECREMENT> = 8
  64.  
  65.  
  66. <TRAVEL_RIGHT_THEN_DECREMENT>0 = 0<TRAVEL_RIGHT_THEN_DECREMENT>
  67. <TRAVEL_RIGHT_THEN_DECREMENT>1 = 1<TRAVEL_RIGHT_THEN_DECREMENT>
  68. <TRAVEL_RIGHT_THEN_DECREMENT>2 = 2<TRAVEL_RIGHT_THEN_DECREMENT>
  69. <TRAVEL_RIGHT_THEN_DECREMENT>3 = 3<TRAVEL_RIGHT_THEN_DECREMENT>
  70. <TRAVEL_RIGHT_THEN_DECREMENT>4 = 4<TRAVEL_RIGHT_THEN_DECREMENT>
  71. <TRAVEL_RIGHT_THEN_DECREMENT>5 = 5<TRAVEL_RIGHT_THEN_DECREMENT>
  72. <TRAVEL_RIGHT_THEN_DECREMENT>6 = 6<TRAVEL_RIGHT_THEN_DECREMENT>
  73. <TRAVEL_RIGHT_THEN_DECREMENT>7 = 7<TRAVEL_RIGHT_THEN_DECREMENT>
  74. <TRAVEL_RIGHT_THEN_DECREMENT>8 = 8<TRAVEL_RIGHT_THEN_DECREMENT>
  75. <TRAVEL_RIGHT_THEN_DECREMENT>9 = 9<TRAVEL_RIGHT_THEN_DECREMENT>
  76. <TRAVEL_RIGHT_THEN_DECREMENT> = <DECREMENT>
  77.  
  78. <TRIM_LEADING_ZEROES>00 = <TRIM_LEADING_ZEROES>0
  79. <TRIM_LEADING_ZEROES>01= 1
  80. <TRIM_LEADING_ZEROES>02= 2
  81. <TRIM_LEADING_ZEROES>03= 3
  82. <TRIM_LEADING_ZEROES>04= 4
  83. <TRIM_LEADING_ZEROES>05= 5
  84. <TRIM_LEADING_ZEROES>06= 6
  85. <TRIM_LEADING_ZEROES>07= 7
  86. <TRIM_LEADING_ZEROES>08= 8
  87. <TRIM_LEADING_ZEROES>09= 9
  88. <TRIM_LEADING_ZEROES>=
  89.  
  90. +=<INFIX_ADD>
  91. <INFIX_ADD>0=
  92. <INFIX_ADD>=<INCREMENT><INFIX_ADD><TRIM_LEADING_ZEROES><TRAVEL_RIGHT_THEN_DECREMENT>
  93. """
  94.  
  95. import random
  96. s = "123+119+8"
  97. print(exec(source, s)) # 250
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement