Skip to content

Instantly share code, notes, and snippets.

@iamevn
Last active October 28, 2017 20:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iamevn/2d6380d8eb4bc47e270ea5678116d1bb to your computer and use it in GitHub Desktop.
Save iamevn/2d6380d8eb4bc47e270ea5678116d1bb to your computer and use it in GitHub Desktop.
unoptimized wimpmode Game of Life in Wordy https://esolangs.org/wiki/Wordy
# 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