Last active
October 28, 2017 20:14
-
-
Save iamevn/2d6380d8eb4bc47e270ea5678116d1bb to your computer and use it in GitHub Desktop.
unoptimized wimpmode Game of Life in Wordy https://esolangs.org/wiki/Wordy
This file contains 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
# Any live cell with fewer than two live neighbours dies, as if caused by underpopulation. | |
# Any live cell with two or three live neighbours lives on to the next generation. | |
# Any live cell with more than three live neighbours dies, as if by overpopulation. | |
# Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction. | |
# width and height define the world, it wraps around like a torus | |
# clear screen by outputting \033c (27 99) | |
# (0, 0) (top left) is in cell 0. (0, 1) is in cell 1. (1, 0) is in cell {width} | |
# for a cell n in grid of width w and height h, its neighbors are: | |
# {(n - w - 1), (n - w), (n - w + 1) | |
# (n - 1), (n + 1) | |
# (n + w - 1), (n + w), (n + w + 1)} % (h * w) | |
# variables: | |
# -1: liveness flag | |
# -2: width | |
ASSIGN LITERAL -2 LITERAL 96 | |
# -3: height | |
ASSIGN LITERAL -3 LITERAL 48 | |
# -4: width * height | |
ASSIGN LITERAL -4 MULTIPLY VALUE LITERAL -2 VALUE LITERAL -3 | |
# -5: cell pointer | |
ASSIGN LITERAL -5 LITERAL 0 | |
# -6: 35 '#' the display character for live cell | |
ASSIGN LITERAL -6 LITERAL 35 | |
# -7: 46 '.' the display character for dead cell | |
ASSIGN LITERAL -7 LITERAL 46 | |
# -8: 10 '\n' newline | |
ASSIGN LITERAL -8 LITERAL 10 | |
# -9: 27 'ESC' combines with -10 to clear screen | |
ASSIGN LITERAL -9 LITERAL 27 | |
# -10: 99 'c' combines with -9 to clear screen | |
ASSIGN LITERAL -10 LITERAL 99 | |
# random initial state | |
LABEL LITERAL -1 | |
ASSIGN VALUE LITERAL -5 RAND 1 | |
ASSIGN LITERAL -5 ADD VALUE LITERAL -5 LITERAL 1 | |
# loop unless at end of array | |
AND NOT EQUAL? VALUE LITERAL -4 VALUE LITERAL -5 | |
GOTO LITERAL -1 | |
ASSIGN LITERAL -5 LITERAL 0 | |
# sum neighbors of current cell pointer into neighbor array that starts at width * height | |
LABEL LITERAL 0 | |
ASSIGN ADD VALUE LITERAL -4 VALUE LITERAL -5 | |
ADD ADD ADD ADD ADD ADD ADD | |
VALUE MODULO SUBTRACT SUBTRACT VALUE LITERAL -5 VALUE LITERAL -2 LITERAL 1 VALUE LITERAL -4 | |
VALUE MODULO SUBTRACT VALUE LITERAL -5 VALUE LITERAL -2 VALUE LITERAL -4 | |
VALUE MODULO ADD SUBTRACT VALUE LITERAL -5 VALUE LITERAL -2 LITERAL 1 VALUE LITERAL -4 | |
VALUE MODULO SUBTRACT VALUE LITERAL -5 LITERAL 1 VALUE LITERAL -4 | |
VALUE MODULO ADD VALUE LITERAL -5 LITERAL 1 VALUE LITERAL -4 | |
VALUE MODULO SUBTRACT ADD VALUE LITERAL -5 VALUE LITERAL -2 LITERAL 1 VALUE LITERAL -4 | |
VALUE MODULO ADD VALUE LITERAL -5 VALUE LITERAL -2 VALUE LITERAL -4 | |
VALUE MODULO ADD ADD VALUE LITERAL -5 VALUE LITERAL -2 LITERAL 1 VALUE LITERAL -4 | |
ASSIGN LITERAL -5 ADD VALUE LITERAL -5 LITERAL 1 | |
# loop unless at end of array | |
AND NOT EQUAL? VALUE LITERAL -4 VALUE LITERAL -5 | |
GOTO LITERAL 0 | |
# update dead/alive status based on neighbors | |
ASSIGN LITERAL -5 LITERAL 0 | |
LABEL LITERAL 1 | |
ASSIGN LITERAL -1 VALUE VALUE LITERAL -5 | |
AND VALUE LITERAL -1 | |
ASSIGN VALUE LITERAL -5 | |
OR EQUAL? VALUE ADD VALUE LITERAL -4 VALUE LITERAL -5 | |
LITERAL 2 | |
EQUAL? VALUE ADD VALUE LITERAL -4 VALUE LITERAL -5 | |
LITERAL 3 | |
AND NOT VALUE LITERAL -1 | |
ASSIGN VALUE LITERAL -5 | |
EQUAL? VALUE ADD VALUE LITERAL -4 VALUE LITERAL -5 | |
LITERAL 3 | |
ASSIGN LITERAL -5 ADD VALUE LITERAL -5 LITERAL 1 | |
# loop unless at end of array | |
AND NOT EQUAL? VALUE LITERAL -4 VALUE LITERAL -5 | |
GOTO LITERAL 1 | |
# output | |
OUTCHAR VALUE LITERAL -9 | |
OUTCHAR VALUE LITERAL -10 | |
ASSIGN LITERAL -5 LITERAL 0 | |
LABEL LITERAL 1 | |
ASSIGN LITERAL -1 VALUE VALUE LITERAL -5 | |
AND VALUE LITERAL -1 OUTCHAR VALUE LITERAL -6 | |
AND NOT VALUE LITERAL -1 OUTCHAR VALUE LITERAL -7 | |
ASSIGN LITERAL -5 ADD VALUE LITERAL -5 LITERAL 1 | |
# newline if necessary | |
AND NOT MODULO VALUE LITERAL -5 VALUE LITERAL -2 | |
OUTCHAR VALUE LITERAL -8 | |
# loop unless at end of array | |
AND NOT EQUAL? VALUE LITERAL -4 VALUE LITERAL -5 | |
GOTO LITERAL 1 | |
# wait on input (exit on EOF) | |
AND NOT INCHAR EXIT | |
# loop back to start | |
ASSIGN LITERAL -5 LITERAL 0 | |
GOTO LITERAL 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment