Created
January 13, 2020 23:28
-
-
Save LevitatingBusinessMan/43e0e46b009e0112a8295117aa02a233 to your computer and use it in GitHub Desktop.
Google CTF 2019 Emoji challenge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # calculate reversible primes | |
| primes = [] | |
| num = 1 | |
| def calcPrimes(start): | |
| global num | |
| while len(primes) - start < len(stack): | |
| if all(num % i != 0 for i in range(2,num)): | |
| if "".join(reversed(str(num))) == str(num): | |
| primes.append(num) | |
| num += 1 | |
| def decipher(start): | |
| for i in range(0, len(stack)): | |
| print(chr(int(stack[i]) ^ primes[i + start]), end="") | |
| # First group | |
| stack = [ | |
| '17488', '16758', '16599', '16285', | |
| '16094', '15505', '15417', '14832', '14450', | |
| '13893', '13926', '13437', '12833', '12741', | |
| '12533', '11504', '11342', '10503', '10550', | |
| '10319', '975', '1007', '892', '893', | |
| '660', '743', '267', '344', '264', | |
| '339', '208', '216', '242', '172', | |
| '74', '49', '119', '113', '119', | |
| '106' | |
| ] | |
| stack.reverse() | |
| calcPrimes(1) | |
| decipher(1) | |
| # Second group | |
| stack = [ | |
| '98426', '97850', | |
| '97604', '97280', | |
| '96815', '96443', | |
| '96354', '95934', | |
| '94865', '94952', | |
| '94669', '94440', | |
| '93969', '93766' | |
| ] | |
| stack.reverse() | |
| calcPrimes(99) | |
| decipher(99) | |
| # Third group | |
| stack = [ | |
| '101141058', '101060206', '101030055', | |
| '100998966', '100887990', '100767085', | |
| '100707036', '100656111', '100404094', | |
| '100160922', '100131019', '100111100', | |
| '100059926', '100049982', '100030045', | |
| '9989997', '9981858', '9980815', | |
| '9978842', '9965794', '9957564', | |
| '9938304', '9935427', '9932289', | |
| '9931494', '9927388', '9926376', | |
| '9923213', '9921394', '9919154', | |
| '9918082', '9916239' | |
| ] | |
| stack.reverse() | |
| calcPrimes(765) | |
| decipher(765) | |
| print() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| some algorithm goes over elements in the stack | |
| the output of this is used with a set XOR key and the output is a unicode character in decimal. | |
| The stack is split into 3 where the acc2 variable is different during the deciphering | |
| 2 ^ 106 = h | |
| 3 ^ 119 = t | |
| 5 ^ 113 = t | |
| 7 ^ 119 = p | |
| 11 ^ 49 = : | |
| 101 ^ 74 = / | |
| 131 ^ 172 = / | |
| 151 ^ 242 = e | |
| 181 ^ 216 = m | |
| 191 ^ 208 = o | |
| 313 ^ 339 = j | |
| 353 ^ 264 = i | |
| first number is every prime number which is the same when reversed | |
| for some reason the second batch never runs, though the only different factors seem to be the stack itself, the acc1 and the acc2 | |
| when any of these are changed code the url does not display | |
| after having to google (sorry) for solutions I found that the acc2 value is the prime to start from... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| π π₯ 0οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 7οΈβ£ 4οΈβ£ 8οΈβ£ 8οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 6οΈβ£ 7οΈβ£ 5οΈβ£ 8οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 6οΈβ£ 5οΈβ£ 9οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 6οΈβ£ 2οΈβ£ 8οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 6οΈβ£ 0οΈβ£ 9οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 5οΈβ£ 5οΈβ£ 0οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 5οΈβ£ 4οΈβ£ 1οΈβ£ 7οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 4οΈβ£ 8οΈβ£ 3οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 4οΈβ£ 4οΈβ£ 5οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 3οΈβ£ 8οΈβ£ 9οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 3οΈβ£ 9οΈβ£ 2οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 3οΈβ£ 4οΈβ£ 3οΈβ£ 7οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 2οΈβ£ 8οΈβ£ 3οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 2οΈβ£ 7οΈβ£ 4οΈβ£ 1οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 2οΈβ£ 5οΈβ£ 3οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 1οΈβ£ 5οΈβ£ 0οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 1οΈβ£ 3οΈβ£ 4οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 5οΈβ£ 0οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 5οΈβ£ 5οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 3οΈβ£ 1οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 7οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 7οΈβ£ β π₯ π₯ | |
| π π₯ 8οΈβ£ 9οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 8οΈβ£ 9οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 6οΈβ£ 6οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 7οΈβ£ 4οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 2οΈβ£ 6οΈβ£ 7οΈβ£ β π₯ π₯ | |
| π π₯ 3οΈβ£ 4οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 2οΈβ£ 6οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 3οΈβ£ 3οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 2οΈβ£ 0οΈβ£ 8οΈβ£ β π₯ π₯ | |
| π π₯ 2οΈβ£ 1οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 2οΈβ£ 4οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 7οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 7οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 4οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 1οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 1οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 1οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ β | |
| ππ πΆππ©π πΏ π₯ π₯ π₯ π₯ π₯ π π₯ 3οΈβ£ 8οΈβ£ 9οΈβ£ β | |
| π₯ π₯ π₯ π₯ | |
| π π°ππ©ππ πΆ | |
| π π€ | |
| π π₯ 1οΈβ£ β π₯ π₯ π‘ πΏ π₯ | |
| π π π°π πΆππ©π π | |
| π π₯ 9οΈβ£ 8οΈβ£ 4οΈβ£ 2οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 7οΈβ£ 8οΈβ£ 5οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 7οΈβ£ 6οΈβ£ 0οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 7οΈβ£ 2οΈβ£ 8οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 6οΈβ£ 8οΈβ£ 1οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 6οΈβ£ 4οΈβ£ 4οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 6οΈβ£ 3οΈβ£ 5οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 5οΈβ£ 9οΈβ£ 3οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 4οΈβ£ 8οΈβ£ 6οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 4οΈβ£ 9οΈβ£ 5οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 4οΈβ£ 6οΈβ£ 6οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 4οΈβ£ 4οΈβ£ 4οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 3οΈβ£ 9οΈβ£ 6οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 3οΈβ£ 7οΈβ£ 6οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ β | |
| ππ πππΆπ© πΏ π₯ π₯ π₯ π₯ π₯ π π₯ 5οΈβ£ 6οΈβ£ 8οΈβ£ β | |
| π₯ π₯ π₯ π₯ | |
| π π°ππ©ππ πΆ | |
| π π€ | |
| π π₯ 1οΈβ£ β π₯ π₯ π‘ πΏ π₯ | |
| π π π°π πππΆπ© π | |
| π π₯ 1οΈβ£ 0οΈβ£ 1οΈβ£ 1οΈβ£ 4οΈβ£ 1οΈβ£ 0οΈβ£ 5οΈβ£ 8οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 1οΈβ£ 0οΈβ£ 6οΈβ£ 0οΈβ£ 2οΈβ£ 0οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 1οΈβ£ 0οΈβ£ 3οΈβ£ 0οΈβ£ 0οΈβ£ 5οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 9οΈβ£ 9οΈβ£ 8οΈβ£ 9οΈβ£ 6οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 8οΈβ£ 8οΈβ£ 7οΈβ£ 9οΈβ£ 9οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 7οΈβ£ 6οΈβ£ 7οΈβ£ 0οΈβ£ 8οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 7οΈβ£ 0οΈβ£ 7οΈβ£ 0οΈβ£ 3οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 6οΈβ£ 5οΈβ£ 6οΈβ£ 1οΈβ£ 1οΈβ£ 1οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 4οΈβ£ 0οΈβ£ 4οΈβ£ 0οΈβ£ 9οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 1οΈβ£ 6οΈβ£ 0οΈβ£ 9οΈβ£ 2οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 1οΈβ£ 3οΈβ£ 1οΈβ£ 0οΈβ£ 1οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 1οΈβ£ 1οΈβ£ 1οΈβ£ 1οΈβ£ 0οΈβ£ 0οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 0οΈβ£ 5οΈβ£ 9οΈβ£ 9οΈβ£ 2οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 0οΈβ£ 4οΈβ£ 9οΈβ£ 9οΈβ£ 8οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 1οΈβ£ 0οΈβ£ 0οΈβ£ 0οΈβ£ 3οΈβ£ 0οΈβ£ 0οΈβ£ 4οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 8οΈβ£ 9οΈβ£ 9οΈβ£ 9οΈβ£ 7οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 8οΈβ£ 1οΈβ£ 8οΈβ£ 5οΈβ£ 8οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 8οΈβ£ 0οΈβ£ 8οΈβ£ 1οΈβ£ 5οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 7οΈβ£ 8οΈβ£ 8οΈβ£ 4οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 6οΈβ£ 5οΈβ£ 7οΈβ£ 9οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 5οΈβ£ 7οΈβ£ 5οΈβ£ 6οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 3οΈβ£ 8οΈβ£ 3οΈβ£ 0οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 3οΈβ£ 5οΈβ£ 4οΈβ£ 2οΈβ£ 7οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 3οΈβ£ 2οΈβ£ 2οΈβ£ 8οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 3οΈβ£ 1οΈβ£ 4οΈβ£ 9οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 2οΈβ£ 7οΈβ£ 3οΈβ£ 8οΈβ£ 8οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 2οΈβ£ 6οΈβ£ 3οΈβ£ 7οΈβ£ 6οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 2οΈβ£ 3οΈβ£ 2οΈβ£ 1οΈβ£ 3οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 2οΈβ£ 1οΈβ£ 3οΈβ£ 9οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 1οΈβ£ 9οΈβ£ 1οΈβ£ 5οΈβ£ 4οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 1οΈβ£ 8οΈβ£ 0οΈβ£ 8οΈβ£ 2οΈβ£ β π₯ π₯ | |
| π π₯ 9οΈβ£ 9οΈβ£ 1οΈβ£ 6οΈβ£ 2οΈβ£ 3οΈβ£ 9οΈβ£ β π₯ π₯ | |
| π π₯ 7οΈβ£ 6οΈβ£ 5οΈβ£ β | |
| ππ©π ππΆπ πΏ π₯ π₯ π₯ π₯ π₯ π π₯ 1οΈβ£ 0οΈβ£ 2οΈβ£ 3οΈβ£ β | |
| π₯ π₯ π₯ π₯ | |
| π π°ππ©ππ πΆ | |
| π π€ | |
| π π₯ 1οΈβ£ β π₯ π₯ π‘ πΏ π₯ | |
| π π π°π©π ππΆπ π | |
| β | |
| πππ©ππ πΆ | |
| π π₯ 2οΈβ£ β π₯ π₯ ππ πππ©πΆ | |
| π π°π©πΆπππ | |
| ππΆππ©π π π² π€ π π°πΆπ©π ππ β π | |
| π€ π π°πππ πΆπ© | |
| ππππ©πΆπ π² π€ π π°πΆπ©π ππ π | |
| π€ πΏ π₯ π π₯ 1οΈβ£ β π₯ π₯ πͺ | |
| π² π€ πΏ π₯ π₯ π₯ π₯ π₯ β° π π₯ π₯ | |
| ππΆπ©π ππ π π₯ 1οΈβ£ β π₯ π₯ π‘ π π°π πππ©πΆ | |
| ππ©πΆπππ | |
| π€‘ π π₯ 2οΈβ£ β π₯ π₯ | |
| πππ©π πΆπ πͺ π² π€ π π₯ 1οΈβ£ β π₯ π₯ | |
| π π°πΆππ©π π π | |
| π€ π€‘ π₯ π₯ | |
| π¬ π² π π°πΆππ©π π π | |
| π€ π€‘ π₯ π₯ π π₯ 1οΈβ£ β | |
| π₯ π₯ π‘ π€‘ πΏ π₯ π π°ππ©π πΆπ | |
| ππππ πΆπ© | |
| π€‘ π€‘ π π₯ 0οΈβ£ β π₯ π₯ | |
| πππ πΆπ©π π π₯ 1οΈβ£ 0οΈβ£ β π₯ π₯ | |
| β πΏ π₯ π₯ π₯ π¬ | |
| π₯ π₯ π‘ πΏ π₯ πΏ π₯ π€‘ π₯ π₯ πͺ | |
| π² π€ π π₯ 1οΈβ£ β π₯ π₯ π π°πππ©πΆπ π | |
| π€ π₯ π₯ π π₯ 1οΈβ£ 0οΈβ£ β π₯ π₯ π | |
| π² π π°πππ©πΆπ π | |
| π€‘ π₯ π₯ π π°ππ πΆπ©π |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| load acc1 0οΈ endl push acc1 | |
| load acc1 1οΈ 7οΈ 4οΈ 8οΈ 8οΈ endl push acc1 | |
| load acc1 1οΈ 6οΈ 7οΈ 5οΈ 8οΈ endl push acc1 | |
| load acc1 1οΈ 6οΈ 5οΈ 9οΈ 9οΈ endl push acc1 | |
| load acc1 1οΈ 6οΈ 2οΈ 8οΈ 5οΈ endl push acc1 | |
| load acc1 1οΈ 6οΈ 0οΈ 9οΈ 4οΈ endl push acc1 | |
| load acc1 1οΈ 5οΈ 5οΈ 0οΈ 5οΈ endl push acc1 | |
| load acc1 1οΈ 5οΈ 4οΈ 1οΈ 7οΈ endl push acc1 | |
| load acc1 1οΈ 4οΈ 8οΈ 3οΈ 2οΈ endl push acc1 | |
| load acc1 1οΈ 4οΈ 4οΈ 5οΈ 0οΈ endl push acc1 | |
| load acc1 1οΈ 3οΈ 8οΈ 9οΈ 3οΈ endl push acc1 | |
| load acc1 1οΈ 3οΈ 9οΈ 2οΈ 6οΈ endl push acc1 | |
| load acc1 1οΈ 3οΈ 4οΈ 3οΈ 7οΈ endl push acc1 | |
| load acc1 1οΈ 2οΈ 8οΈ 3οΈ 3οΈ endl push acc1 | |
| load acc1 1οΈ 2οΈ 7οΈ 4οΈ 1οΈ endl push acc1 | |
| load acc1 1οΈ 2οΈ 5οΈ 3οΈ 3οΈ endl push acc1 | |
| load acc1 1οΈ 1οΈ 5οΈ 0οΈ 4οΈ endl push acc1 | |
| load acc1 1οΈ 1οΈ 3οΈ 4οΈ 2οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 5οΈ 0οΈ 3οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 5οΈ 5οΈ 0οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 3οΈ 1οΈ 9οΈ endl push acc1 | |
| load acc1 9οΈ 7οΈ 5οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 7οΈ endl push acc1 | |
| load acc1 8οΈ 9οΈ 2οΈ endl push acc1 | |
| load acc1 8οΈ 9οΈ 3οΈ endl push acc1 | |
| load acc1 6οΈ 6οΈ 0οΈ endl push acc1 | |
| load acc1 7οΈ 4οΈ 3οΈ endl push acc1 | |
| load acc1 2οΈ 6οΈ 7οΈ endl push acc1 | |
| load acc1 3οΈ 4οΈ 4οΈ endl push acc1 | |
| load acc1 2οΈ 6οΈ 4οΈ endl push acc1 | |
| load acc1 3οΈ 3οΈ 9οΈ endl push acc1 | |
| load acc1 2οΈ 0οΈ 8οΈ endl push acc1 | |
| load acc1 2οΈ 1οΈ 6οΈ endl push acc1 | |
| load acc1 2οΈ 4οΈ 2οΈ endl push acc1 | |
| load acc1 1οΈ 7οΈ 2οΈ endl push acc1 | |
| load acc1 7οΈ 4οΈ endl push acc1 | |
| load acc1 4οΈ 9οΈ endl push acc1 | |
| load acc1 1οΈ 1οΈ 9οΈ endl push acc1 | |
| load acc1 1οΈ 1οΈ 3οΈ endl push acc1 | |
| load acc1 1οΈ 1οΈ 9οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 6οΈ endl push acc1 | |
| load acc2 1οΈ endl | |
| >π πΆππ©π pop acc1 push acc2 push acc1 load acc1 3οΈ 8οΈ 9οΈ endl | |
| push acc1 push acc2 | |
| jump_to >ππ©ππ πΆ | |
| xor print_top | |
| load acc1 1οΈ endl push acc1 add pop acc2 | |
| if_not_zero jump_to >π πΆππ©π fi | |
| load acc1 9οΈ 8οΈ 4οΈ 2οΈ 6οΈ endl push acc1 | |
| load acc1 9οΈ 7οΈ 8οΈ 5οΈ 0οΈ endl push acc1 | |
| load acc1 9οΈ 7οΈ 6οΈ 0οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 7οΈ 2οΈ 8οΈ 0οΈ endl push acc1 | |
| load acc1 9οΈ 6οΈ 8οΈ 1οΈ 5οΈ endl push acc1 | |
| load acc1 9οΈ 6οΈ 4οΈ 4οΈ 3οΈ endl push acc1 | |
| load acc1 9οΈ 6οΈ 3οΈ 5οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 5οΈ 9οΈ 3οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 4οΈ 8οΈ 6οΈ 5οΈ endl push acc1 | |
| load acc1 9οΈ 4οΈ 9οΈ 5οΈ 2οΈ endl push acc1 | |
| load acc1 9οΈ 4οΈ 6οΈ 6οΈ 9οΈ endl push acc1 | |
| load acc1 9οΈ 4οΈ 4οΈ 4οΈ 0οΈ endl push acc1 | |
| load acc1 9οΈ 3οΈ 9οΈ 6οΈ 9οΈ endl push acc1 | |
| load acc1 9οΈ 3οΈ 7οΈ 6οΈ 6οΈ endl push acc1 | |
| load acc2 9οΈ 9οΈ endl | |
| >π πππΆπ© pop acc1 push acc2 push acc1 load acc1 5οΈ 6οΈ 8οΈ endl | |
| push acc1 push acc2 | |
| jump_to >ππ©ππ πΆ | |
| xor print_top | |
| load acc1 1οΈ endl push acc1 add pop acc2 | |
| if_not_zero jump_to >π πππΆπ© fi | |
| load acc1 1οΈ 0οΈ 1οΈ 1οΈ 4οΈ 1οΈ 0οΈ 5οΈ 8οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 1οΈ 0οΈ 6οΈ 0οΈ 2οΈ 0οΈ 6οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 1οΈ 0οΈ 3οΈ 0οΈ 0οΈ 5οΈ 5οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 9οΈ 9οΈ 8οΈ 9οΈ 6οΈ 6οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 8οΈ 8οΈ 7οΈ 9οΈ 9οΈ 0οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 7οΈ 6οΈ 7οΈ 0οΈ 8οΈ 5οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 7οΈ 0οΈ 7οΈ 0οΈ 3οΈ 6οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 6οΈ 5οΈ 6οΈ 1οΈ 1οΈ 1οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 4οΈ 0οΈ 4οΈ 0οΈ 9οΈ 4οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 1οΈ 6οΈ 0οΈ 9οΈ 2οΈ 2οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 1οΈ 3οΈ 1οΈ 0οΈ 1οΈ 9οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 1οΈ 1οΈ 1οΈ 1οΈ 0οΈ 0οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 0οΈ 5οΈ 9οΈ 9οΈ 2οΈ 6οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 0οΈ 4οΈ 9οΈ 9οΈ 8οΈ 2οΈ endl push acc1 | |
| load acc1 1οΈ 0οΈ 0οΈ 0οΈ 3οΈ 0οΈ 0οΈ 4οΈ 5οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 8οΈ 9οΈ 9οΈ 9οΈ 7οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 8οΈ 1οΈ 8οΈ 5οΈ 8οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 8οΈ 0οΈ 8οΈ 1οΈ 5οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 7οΈ 8οΈ 8οΈ 4οΈ 2οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 6οΈ 5οΈ 7οΈ 9οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 5οΈ 7οΈ 5οΈ 6οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 3οΈ 8οΈ 3οΈ 0οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 3οΈ 5οΈ 4οΈ 2οΈ 7οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 3οΈ 2οΈ 2οΈ 8οΈ 9οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 3οΈ 1οΈ 4οΈ 9οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 2οΈ 7οΈ 3οΈ 8οΈ 8οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 2οΈ 6οΈ 3οΈ 7οΈ 6οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 2οΈ 3οΈ 2οΈ 1οΈ 3οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 2οΈ 1οΈ 3οΈ 9οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 1οΈ 9οΈ 1οΈ 5οΈ 4οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 1οΈ 8οΈ 0οΈ 8οΈ 2οΈ endl push acc1 | |
| load acc1 9οΈ 9οΈ 1οΈ 6οΈ 2οΈ 3οΈ 9οΈ endl push acc1 | |
| load acc2 7οΈ 6οΈ 5οΈ endl | |
| >π©π ππΆπ pop acc1 push acc2 push acc1 load acc1 1οΈ 0οΈ 2οΈ 3οΈ endl | |
| push acc1 push acc2 | |
| jump_to >ππ©ππ πΆ | |
| xor print_top | |
| load acc1 1οΈ endl push acc1 add pop acc2 | |
| if_not_zero jump_to >π©π ππΆπ fi | |
| exit | |
| >ππ©ππ πΆ | |
| load acc1 2οΈ endl push acc1 >π πππ©πΆ | |
| jump_to >π©πΆπππ | |
| >πΆππ©π π if_zero pop_out jump_to >πΆπ©π ππ endl fi | |
| pop_out jump_to >πππ πΆπ© | |
| >πππ©πΆπ if_zero pop_out jump_to >πΆπ©π ππ fi | |
| pop_out pop acc1 load acc2 1οΈ endl push acc2 sub | |
| if_zero pop_out pop acc2 push acc1 push acc2 jump_top fi push acc1 | |
| >πΆπ©π ππ load acc2 1οΈ endl push acc2 add jump_to >π πππ©πΆ | |
| >π©πΆπππ | |
| clone load acc1 2οΈ endl push acc1 | |
| >ππ©π πΆπ sub if_zero pop_out load acc1 1οΈ endl push acc1 | |
| jump_to >πΆππ©π π fi | |
| pop_out clone push acc1 | |
| modulo if_zero jump_to >πΆππ©π π fi | |
| pop_out clone push acc1 load acc1 1οΈ endl | |
| push acc1 add clone pop acc1 jump_to >ππ©π πΆπ | |
| >πππ πΆπ© | |
| clone clone load acc2 0οΈ endl push acc2 | |
| >ππ πΆπ©π load acc1 1οΈ 0οΈ endl push acc1 | |
| multiply pop acc2 push acc1 modulo | |
| push acc2 add pop acc2 pop acc1 clone push acc2 sub | |
| if_zero pop_out load acc2 1οΈ endl push acc2 jump_to >πππ©πΆπ fi | |
| pop_out push acc1 load acc1 1οΈ 0οΈ endl push acc1 divide | |
| if_zero jump_to >πππ©πΆπ fi | |
| clone push acc2 jump_to >ππ πΆπ©π |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import re | |
| with open("program", "r") as f: | |
| all_ins = [""] | |
| all_ins.extend(re.split("",f.read())) | |
| translations = { | |
| "π‘": "add", | |
| "π€‘": "clone", | |
| "π": "divide", | |
| "π²": "if_zero", | |
| "π": "if_not_zero", | |
| "π": "jump_to", | |
| "π": "load", | |
| "π¬": "modulo", | |
| "β": "multiply", | |
| "πΏ": "pop", | |
| "π€": "pop_out", | |
| "π€": "print_top", | |
| "π₯": "push", | |
| "πͺ": "sub", | |
| "π": "xor", | |
| "β°": "jump_top", | |
| "β": "exit", | |
| "π": "fi", | |
| "π₯": "acc1", | |
| "π₯": "acc2", | |
| "β": "endl", | |
| "π": ">", | |
| "π°": ">" | |
| } | |
| for i in range(0, len(all_ins)): | |
| ins = all_ins[i] | |
| if ins in translations: | |
| all_ins[i] = translations[ins] | |
| out = open("program.trans","w") | |
| # parse text without box symbols for the numbers | |
| translation = "".join(all_ins).replace(chr(8419), "") | |
| out.write(translation) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import sys | |
| # Implements a simple stack-based VM | |
| class VM: | |
| def __init__(self, rom): | |
| self.rom = rom | |
| self.accumulator1 = 0 | |
| self.accumulator2 = 0 | |
| self.instruction_pointer = 1 | |
| self.stack = [] | |
| def step(self): | |
| cur_ins = self.rom[self.instruction_pointer] | |
| self.instruction_pointer += 1 | |
| fn = VM.OPERATIONS.get(cur_ins, None) | |
| if cur_ins[0] == 'π': | |
| return | |
| if fn is None: | |
| raise RuntimeError("Unknown instruction '{}' at {}".format( | |
| repr(cur_ins), self.instruction_pointer - 1)) | |
| else: | |
| fn(self) | |
| def add(self): | |
| self.stack.append(self.stack.pop() + self.stack.pop()) | |
| def sub(self): | |
| a = self.stack.pop() | |
| b = self.stack.pop() | |
| self.stack.append(b - a) | |
| def if_zero(self): | |
| if self.stack[-1] == 0: | |
| while self.rom[self.instruction_pointer] != 'π': | |
| if self.rom[self.instruction_pointer] in ['π', 'β°']: | |
| break | |
| self.step() | |
| else: | |
| self.find_first_endif() | |
| self.instruction_pointer += 1 | |
| def if_not_zero(self): | |
| if self.stack[-1] != 0: | |
| while self.rom[self.instruction_pointer] != 'π': | |
| if self.rom[self.instruction_pointer] in ['π', 'β°']: | |
| break | |
| self.step() | |
| else: | |
| self.find_first_endif() | |
| self.instruction_pointer += 1 | |
| def find_first_endif(self): | |
| while self.rom[self.instruction_pointer] != 'π': | |
| self.instruction_pointer += 1 | |
| def jump_to(self): | |
| marker = self.rom[self.instruction_pointer] | |
| if marker[0] != 'π°': | |
| print('Incorrect symbol : ' + marker[0]) | |
| raise SystemExit() | |
| marker = 'π' + marker[1:] | |
| self.instruction_pointer = self.rom.index(marker) + 1 | |
| def jump_top(self): | |
| self.instruction_pointer = self.stack.pop() | |
| def exit(self): | |
| print('\nDone.') | |
| raise SystemExit() | |
| def print_top(self): | |
| sys.stdout.write(chr(self.stack.pop())) | |
| sys.stdout.flush() | |
| def push(self): | |
| if self.rom[self.instruction_pointer] == 'π₯': | |
| self.stack.append(self.accumulator1) | |
| elif self.rom[self.instruction_pointer] == 'π₯': | |
| self.stack.append(self.accumulator2) | |
| else: | |
| raise RuntimeError('Unknown instruction {} at position {}'.format( | |
| self.rom[self.instruction_pointer], str(self.instruction_pointer))) | |
| self.instruction_pointer += 1 | |
| def pop(self): | |
| if self.rom[self.instruction_pointer] == 'π₯': | |
| self.accumulator1 = self.stack.pop() | |
| elif self.rom[self.instruction_pointer] == 'π₯': | |
| self.accumulator2 = self.stack.pop() | |
| else: | |
| raise RuntimeError('Unknown instruction {} at position {}'.format( | |
| self.rom[self.instruction_pointer], str(self.instruction_pointer))) | |
| self.instruction_pointer += 1 | |
| def pop_out(self): | |
| self.stack.pop() | |
| def load(self): | |
| num = 0 | |
| if self.rom[self.instruction_pointer] == 'π₯': | |
| acc = 1 | |
| elif self.rom[self.instruction_pointer] == 'π₯': | |
| acc = 2 | |
| else: | |
| raise RuntimeError('Unknown instruction {} at position {}'.format( | |
| self.rom[self.instruction_pointer], str(self.instruction_pointer))) | |
| self.instruction_pointer += 1 | |
| while self.rom[self.instruction_pointer] != 'β': | |
| num = num * 10 + (ord(self.rom[self.instruction_pointer][0]) - ord('0')) | |
| self.instruction_pointer += 1 | |
| if acc == 1: | |
| self.accumulator1 = num | |
| else: | |
| self.accumulator2 = num | |
| self.instruction_pointer += 1 | |
| def clone(self): | |
| self.stack.append(self.stack[-1]) | |
| def multiply(self): | |
| a = self.stack.pop() | |
| b = self.stack.pop() | |
| self.stack.append(b * a) | |
| def divide(self): | |
| a = self.stack.pop() | |
| b = self.stack.pop() | |
| self.stack.append(b // a) | |
| def modulo(self): | |
| a = self.stack.pop() | |
| b = self.stack.pop() | |
| self.stack.append(b % a) | |
| def xor(self): | |
| a = self.stack.pop() | |
| b = self.stack.pop() | |
| self.stack.append(b ^ a) | |
| OPERATIONS = { | |
| 'π‘': add, | |
| 'π€‘': clone, | |
| 'π': divide, | |
| 'π²': if_zero, | |
| 'π': if_not_zero, | |
| 'π': jump_to, | |
| 'π': load, | |
| 'π¬': modulo, | |
| 'β': multiply, | |
| 'πΏ': pop, | |
| 'π€': pop_out, | |
| 'π€': print_top, | |
| 'π₯': push, | |
| 'πͺ': sub, | |
| 'π': xor, | |
| 'β°': jump_top, | |
| 'β': exit | |
| } | |
| if __name__ == '__main__': | |
| if len(sys.argv) != 2: | |
| print('Missing program') | |
| raise SystemExit() | |
| with open(sys.argv[1], 'r') as f: | |
| print('Running ....') | |
| all_ins = [''] | |
| all_ins.extend(f.read().split()) | |
| vm = VM(all_ins) | |
| while 1: | |
| vm.step() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment