diff options
author | Anthony Wang | 2024-03-02 21:02:45 -0500 |
---|---|---|
committer | Anthony Wang | 2024-03-02 21:02:45 -0500 |
commit | 97c68488f022ea79feb42e0146e2801179e1a3bf (patch) | |
tree | df7246dc77b67cb71c750e8f3a9d10a5df5c7aaa | |
parent | 494de8e432e4e13f92800600467057c533b6bdd4 (diff) |
-rw-r--r-- | README.md | 2 | ||||
-rwxr-xr-x | flipper.py | 7 |
2 files changed, 7 insertions, 2 deletions
@@ -34,7 +34,7 @@ We think you'll agree that the first version is way more aesthetically pleasing If you haven't figured it out yet, the Flip program above is [NAND](https://en.wikipedia.org/wiki/NAND_logic#Making_other_gates_by_using_NAND_gates)! Currently, the final line outputs 0, but remove either of the first two lines, and the final output becomes 1. This makes Flip (drumroll please)... Turing complete! -There's only one catch. Since finite Flip programs are guaranteed to terminate, Turing completeness requires Flip programs to possibly be infinitely long. Good luck! +Actually, not quite. Since finite Flip programs are guaranteed to terminate, Turing completeness requires Flip programs to be able to loop forever. One way to do this is to repeat the program until the cell `(0, 0)` is 1 at the end of a repetition of the program. Even better, a Flip interpreter can be trivially implemented in your favorite programming language. See [Flipper](flipper.py) for the official reference implementation written in Python. @@ -12,9 +12,14 @@ def flip(x, y): return mem[x][y] with open(argv[1]) as f: - for line in f.readlines(): + lines = f.readlines() + +while True: + for line in lines: l = list(map(int, line.split())) x = l[0] for i in range(1, len(l)): x = flip(x, l[i]) print(x) + if 0 not in mem[0] or mem[0][0] == 0: + exit() |