SPDX-FileCopyrightText: Copyright (c) 2O22, Theodore Preduta.
SPDX-License-Identifier: BSD-2-Clause
Rule 11O cellular automata.
Just run this file. The program will exit when it receives a key input
(due to buffering you may also need to hit return).
Load modules/basic-io.ooonooo.
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 n 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 . 0000000000 0000000000 0000000000 0000000000 000000
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 i 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 - 0000000000 0000000000 0000000000 0000000000 00000
0000000000 c 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 i 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 s 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 a 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 b 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 / 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 s 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 e 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 l 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 u 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 d 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 m 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 24 0000000000 0000000000 0000
0000000000 1O 0000000000 the offset
000000000
Load modules/basic-math.ooonooo.
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 n 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 . 0000000000 0000000000 0000000000 0000000000 000000
0000000000 h 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000
0000000000 t 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000
0000000000 a 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 m 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 - 0000000000 0000000000 0000000000 0000000000 00000
0000000000 c 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 i 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 s 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 a 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 b 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 / 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 s 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 e 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 l 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 u 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 d 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 m 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 26 0000000000 0000000000 000000
0000000000 2O 0000000000 0000000000 the offset
000000000
Load modules/basic-bitmath.ooonooo.
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 n 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 . 0000000000 0000000000 0000000000 0000000000 000000
0000000000 h 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000
0000000000 t 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000
0000000000 a 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 m 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 t 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000
0000000000 i 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 b 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 - 0000000000 0000000000 0000000000 0000000000 00000
0000000000 c 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 i 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 s 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 a 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 b 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 / 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 s 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 e 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 l 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 u 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000000 d 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 o 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 m 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 29 0000000000 0000000000 000000000
0000000000 3O 0000000000 0000000000 0000000000 the offset
000000000
Create a display function that displays a single character, consumes the current state and a shift.
0000000000 drop 00
0000000000 eval 0
0000000000 wchr 0000000000 0000000000 0000000000 0
0000000000 bnch 000000
0000000000 swap 0000
0000000000 # 0000000000 0000000000 0000000000 0000000000 00000
0000000000 swap 0000
0000000000 spce 0000000000 0000000000 0000000000 0000000000 00
0000000000 eval 0
0000000000 and 0000000000 0000000000 0000000000 0000000000 0000000000 00
0000000000 1 0000000000 0
0000000000 eval 0
0000000000 shr 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 13 0000000000 000
0000000000 P 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 P 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 2 00
0000000000 1O 0000000000
0000000
Create a display function that displays a row of characters.
0000000000 eval 0
0000000000 bnch 000000
0000000000 swap 0000
0000000000 PPP 0000000000 0000000000 0
0000000000 swap 0000
0000000000 NOP 0000000000
0000000000 dup 000
0000000000 eval 0
0000000000 subt 0000000000 0000000000 0000000000 0000000000 0
0000000000 swap 0000
0000000000 1 0000000000 0
0000000000 swap 0000
0000000000 eval 0
0000000000 PP 0000000000 0000000000
0000000000 swap 0000
0000000000 rot 00000
0000000000 dup 000
0000000000 rot 00000
0000000000 dup 000
0000000000 19 0000000000 000000000
0000000000 P 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 P 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 P 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 3 000
0000000000 11 0000000000 0
0000000
Create a function for the OOO (O) pattern.
0000000000 O 0000000000
0000000000 1 0
0000000000 O 0000000000 0000000000 0000000000 0000000000 00000000
0000000000 1 0
0000000000 8O 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
0000000
Create a function for the OO1 (1) pattern.
0000000000 1 0000000000 0
0000000000 1 0
0000000000 1 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 1 0
0000000000 81 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000
Create a function for the O1O (2) pattern.
0000000000 1 0000000000 0
0000000000 1 0
0000000000 2 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 1 0
0000000000 82 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00
0000000
Create a function for the O11 (3) pattern.
0000000000 1 0000000000 0
0000000000 1 0
0000000000 3 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 1 0
0000000000 83 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000
0000000
Create a function for the 1OO (4) pattern.
0000000000 O 0000000000
0000000000 1 0
0000000000 4 0000000000 0000000000 0000000000 0000000000 0000000000 00
0000000000 1 0
0000000000 84 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000
0000000
Create a function for the 1O1 (5) pattern.
0000000000 1 0000000000 0
0000000000 1 0
0000000000 5 0000000000 0000000000 0000000000 0000000000 0000000000 000
0000000000 1 0
0000000000 85 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000
Create a function for the 11O (6) pattern.
0000000000 1 0000000000 0
0000000000 1 0
0000000000 6 0000000000 0000000000 0000000000 0000000000 0000000000 0000
0000000000 1 0
0000000000 86 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000
0000000
Create a function for the 111 (7) pattern.
0000000000 O 0000000000
0000000000 1 0
0000000000 7 0000000000 0000000000 0000000000 0000000000 0000000000 00000
0000000000 1 0
0000000000 87 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000
0000000
Create a function that processes a row.
0000000000 eval 0
0000000000 bnch 000000
0000000000 eval 0
0000000000 add 0000000000 0000000000 0000000000 0000000000
0000000000 1 0000000000 0
0000000000 swap 0000
0000000000 R 0000000000 0000000000 00
0000000000 swap 0000
0000000000 NOP 0000000000
0000000000 dup 000
0000000000 eval 0
0000000000 subt 0000000000 0000000000 0000000000 0000000000 0
0000000000 swap 0000
0000000000 1 0000000000 0
0000000000 swap 0000
^ loop end ^
0000000000 eval 0
0000000000 or 0000000000 0000000000 0000000000 0000000000 0000000000 000
^ set the destination ^
0000000000 eval 0
0000000000 shl 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 swap 0000
^ make the bitmask ^
0000000000 eval 0
0000000000 add 0000000000 0000000000 0000000000 0000000000
0000000000 rot 00000
0000000000 33 0000000000 0000000000 0000000000 0000000000 000
^ get the destination ^
0000000000 eval 0
0000000000 eval 0
0000000000 add 0000000000 0000000000 0000000000 0000000000
0000000000 8O 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
^ collect the result ^
0000000000 eval 0
0000000000 shr 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 rot 00000
0000000000 dup 000
0000000000 swap 0000
0000000000 eval 0
0000000000 and 0000000000 0000000000 0000000000 0000000000 0000000000 00
0000000000 eval 0
0000000000 shl 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 7 0000000000 0000000
^ extract the pattern ^
0000000000 swap 0000
0000000000 rot 00000
0000000000 dup 000
0000000000 rot 00000
0000000000 dup 000
0000000000 rot 00000
0000000000 dup 000
^ setup some copies ^
0000000000 45 0000000000 0000000000 0000000000 0000000000 00000
0000000000 R 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 00
0000000000 1 0
0000000000 12 0000000000 00
0000000
Create the main loop function.
0000000000 eval 0
0000000000 bnch 000000
0000000000 eval 0
0000000000 pchr 0000000000 0000000000 0000000000 00
0000000000 NOP 0000000000
0000000000 E 0000000000 0000000000 000000000
^ check for keyboard input ^
0000000000 eval 0
0000000000 shl 0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 swap 0000
0000000000 1 0000000000 0 note we do this extra shift to clear the last bit, kinda a hack but it seems to work
0000000000 eval 0
0000000000 shr 0000000000 0000000000 0000000000 0000000000 0000000000 0
0000000000 swap 0000
0000000000 33 0000000000 0000000000 0000000000 0000000000 000
^ shift the destination on to the source ^
0000000000 drop 00
0000000000 eval 0
0000000000 R 0000000000 0000000000 00
0000000000 31 0000000000 0000000000 0000000000 0000000000 0
^ update the state ^
0000000000 drop 00
0000000000 eval 0
0000000000 wchr 0000000000 0000000000 0000000000 0
0000000000 \n 0000000000 0000000000
0000000000 drop 00
0000000000 eval 0
0000000000 PPP 0000000000 0000000000 0
0000000000 3O 0000000000 0000000000 0000000000 0000000000
^ print out the row ^
0000000000 26 0000000000 0000000000 000000
0000000000 E 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 000000000
0000000000 1 0
0000000000 19 0000000000 000000000
0000000
Start the main loop.
0000000000 2 00
0000000000 E 0000000000 000000000
0
00