Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- SHOW_INTERMEDIARY_STATE = True
- def remove_whitespace(s):
- return re.sub(r"\s", "", s)
- def parse_source(source):
- ops = []
- for line in source.split("\n"):
- line = remove_whitespace(line)
- if not line:
- continue
- assert line.count("=") == 1
- l,_,r = line.partition("=")
- ops.append((l, r))
- return ops
- def exec(program_or_source, s):
- if isinstance(program_or_source, list):
- program = program_or_source
- else:
- program = parse_source(program_or_source)
- pc = 0
- if SHOW_INTERMEDIARY_STATE:
- print(pc, s)
- while pc < len(program):
- l,r = program[pc]
- if l in s:
- s = s.replace(l, r, 1)
- if SHOW_INTERMEDIARY_STATE:
- print(pc, s)
- pc = 0
- else:
- pc += 1
- return s
- #given a string containing only X, a, b, and c, move all "X"es to the end of the string.
- source="""
- 0<INCREMENT> = 1
- 1<INCREMENT> = 2
- 2<INCREMENT> = 3
- 3<INCREMENT> = 4
- 4<INCREMENT> = 5
- 5<INCREMENT> = 6
- 6<INCREMENT> = 7
- 7<INCREMENT> = 8
- 8<INCREMENT> = 9
- 9<INCREMENT> = <INCREMENT>0
- <INCREMENT> = 1
- 0<DECREMENT> = <DECREMENT>9
- 1<DECREMENT> = 0
- 2<DECREMENT> = 1
- 3<DECREMENT> = 2
- 4<DECREMENT> = 3
- 5<DECREMENT> = 4
- 6<DECREMENT> = 5
- 7<DECREMENT> = 6
- 8<DECREMENT> = 7
- 9<DECREMENT> = 8
- <TRAVEL_RIGHT_THEN_DECREMENT>0 = 0<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>1 = 1<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>2 = 2<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>3 = 3<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>4 = 4<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>5 = 5<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>6 = 6<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>7 = 7<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>8 = 8<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT>9 = 9<TRAVEL_RIGHT_THEN_DECREMENT>
- <TRAVEL_RIGHT_THEN_DECREMENT> = <DECREMENT>
- <TRIM_LEADING_ZEROES>00 = <TRIM_LEADING_ZEROES>0
- <TRIM_LEADING_ZEROES>01= 1
- <TRIM_LEADING_ZEROES>02= 2
- <TRIM_LEADING_ZEROES>03= 3
- <TRIM_LEADING_ZEROES>04= 4
- <TRIM_LEADING_ZEROES>05= 5
- <TRIM_LEADING_ZEROES>06= 6
- <TRIM_LEADING_ZEROES>07= 7
- <TRIM_LEADING_ZEROES>08= 8
- <TRIM_LEADING_ZEROES>09= 9
- <TRIM_LEADING_ZEROES>=
- +=<INFIX_ADD>
- <INFIX_ADD>0=
- <INFIX_ADD>=<INCREMENT><INFIX_ADD><TRIM_LEADING_ZEROES><TRAVEL_RIGHT_THEN_DECREMENT>
- """
- import random
- s = "123+119+8"
- print(exec(source, s)) # 250
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement