summaryrefslogtreecommitdiff
path: root/simspace/README.md
blob: d97846e45e99ab88a1764bca6b9192b024814880 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
We're going to simulate "Rule 110", which is essentially a way of turning one
string of bits into another string of bits. (You won't need any background
knowledge to complete the problem, but if you're curious, check out
https://en.wikipedia.org/wiki/Rule_110)

The program should take one argument N on the command line, and should then
display a possibly-infinite sequence of rows of N digits each. A digit may be
either zero or one.

Create the first row randomly. Then, to construct the digit at position x of row
y, consider the digits at positions (x-1), x, and (x+1) of row (y-1), and select
the new digit according to the following table:

| Pattern | New Digit for Center Cell |
| ------- | ------------------------- | 
| 111     | 0                         |
| 110     | 1                         |
| 101     | 1                         |
| 100     | 0                         |
| 011     | 1                         |
| 010     | 1                         |
| 001     | 1                         |
| 000     | 0                         |

Wrap around at the edges, so the pattern for position 1 is obtained by looking
at positions N, 1, and 2.

Stop after printing a row consisting entirely of zero or ones. Note that
depending on your random initial row, this might never happen!

For example, if N is 3, an example run might be:

001
011
111