aboutsummaryrefslogtreecommitdiff
path: root/entries/jj
diff options
context:
space:
mode:
authorBraxton Hall2022-11-05 15:07:10 +0000
committerGitHub2022-11-05 15:07:10 +0000
commit7e8d796440aac327b911f86e6ed7502d7e095fcc (patch)
treed0e2e077a0bdaa7f24c5f027c053d7983e89a40a /entries/jj
parent672a5245b2dc1fad79645b9553404960437ea142 (diff)
parent2b5ac5ef3264e56c373fd6bb7dc671e1b90329eb (diff)
Merge pull request #81 from j-james/main
Wang tiling
Diffstat (limited to 'entries/jj')
-rw-r--r--entries/jj/tiles/README.md13
-rw-r--r--entries/jj/tiles/example.pngbin0 -> 94057 bytes
-rw-r--r--entries/jj/tiles/fib.pngbin0 -> 26282 bytes
-rw-r--r--entries/jj/tm/tm.nim224
4 files changed, 125 insertions, 112 deletions
diff --git a/entries/jj/tiles/README.md b/entries/jj/tiles/README.md
new file mode 100644
index 0000000..ba10578
--- /dev/null
+++ b/entries/jj/tiles/README.md
@@ -0,0 +1,13 @@
+# Wang Tiling
+
+These are Wang tiles. For more information, see https://en.wikipedia.org/wiki/Wang_tile.
+
+![Wang tiles](fib.png)
+
+There is only one arrangement of these tiles that tiles the infinite plane _aperiodically_. This arrangement forms the Fibonacci sequence.
+
+Begin by placing down the third tile (the one with the North and West edges being black, the East edge being green, and the South edge being yellow), and continue by placing tiles such that the infinite plane can continue to be filled. The eleventh tile (the one with the North edge being black and the West, East, and South edges being purple) will appear in Fibonacci-spaced intervals.
+
+![The aperiodic tiling](example.png)
+
+The algorithm for this is adapted from https://grahamshawcross.com/2012/10/12/wang-tiles-and-turing-machines/ (with some fixes and tweaks).
diff --git a/entries/jj/tiles/example.png b/entries/jj/tiles/example.png
new file mode 100644
index 0000000..28b7365
--- /dev/null
+++ b/entries/jj/tiles/example.png
Binary files differ
diff --git a/entries/jj/tiles/fib.png b/entries/jj/tiles/fib.png
new file mode 100644
index 0000000..7668696
--- /dev/null
+++ b/entries/jj/tiles/fib.png
Binary files differ
diff --git a/entries/jj/tm/tm.nim b/entries/jj/tm/tm.nim
index 8710acb..71debe4 100644
--- a/entries/jj/tm/tm.nim
+++ b/entries/jj/tm/tm.nim
@@ -24,13 +24,13 @@ type State = enum
type Transition = object
current_state: State
- read_symbol: seq[Symbol]
+ read_symbol: set[Symbol]
next_state: State
write_symbol: Symbol
move_direction: Direction
# convenience constructor
-func δ(a: State, b: seq[Symbol], c: State, d: Symbol, e: Direction): Transition =
+func δ(a: State, b: set[Symbol], c: State, d: Symbol, e: Direction): Transition =
return Transition(current_state: a, read_symbol: b, next_state: c, write_symbol: d, move_direction: e)
# safe get for an infinite tape: pretty, right?
@@ -46,116 +46,116 @@ func set(tape: var Tape, i: int, s: Symbol) =
tape[i] = s
let turing_machine = @[
- δ(ca, @[`_`], cb, `$`, R),
- δ(cb, @[`_`], cc, `0`, R),
- δ(cc, @[`_`], cd, `$`, R),
- δ(cd, @[`_`], ce, `1*`, R),
- δ(ce, @[`_`], cf, `$`, R),
- δ(cf, @[`_`], cg, `1`, R),
- δ(cg, @[`_`], ch, `$`, R),
- δ(ch, @[`_`], sa, noop, S),
-
- δ(sa, @[`_`, `X`], sa, noop, L),
- δ(sa, @[`$`], sb, noop, L),
- δ(sb, @[`0*`, `1*`], sb, noop, L),
- δ(sb, @[`0`], sc, `0*`, R),
- δ(sb, @[`1`], sc, `1*`, R),
- δ(sb, @[`$`], sd, noop, R),
- δ(sc, @[`$`, `X`, `0*`, `1*`], sc, noop, R),
- δ(sc, @[`_`], sa, `X`, L),
- δ(sd, @[`$`, `X`], sd, noop, R),
- δ(sd, @[`0*`], sd, `0`, R),
- δ(sd, @[`1*`], sd, `1`, R),
- δ(sd, @[`_`], aa, noop, L),
-
- δ(aa, @[`X`, `0`, `1`], aa, noop, L),
- δ(aa, @[`$`], ab, noop, L),
- δ(ab, @[`0*`, `1*`], ab, noop, L),
- δ(ab, @[`0`], aaa, `0*`, L),
- δ(ab, @[`1`], aba, `1*`, L),
- δ(ab, @[`$`], ac, noop, R),
- δ(ac, @[`$`, `X`, `0`, `1`, `0*`, `1*`], ac, noop, R),
- δ(ac, @[`_`], sa, `$`, R),
-
- δ(aaa, @[`0`, `1`], aaa, noop, L),
- δ(aaa, @[`$`], aab, noop, L),
- δ(aab, @[`0*`], aac, `0`, R),
- δ(aac, @[`$`, `X`, `0`, `1`, `0*`, `1*`], aac, noop, R),
- δ(aac, @[`_`], aad, noop, L),
- δ(aad, @[`0`, `1`], aad, noop, L),
- δ(aad, @[`X`], aa, `0`, L),
- δ(aab, @[`1*`], aae, `1`, R),
- δ(aae, @[`$`, `X`, `0`, `1`, `0*`, `1*`], aae, noop, R),
- δ(aae, @[`_`], aaf, noop, L),
- δ(aaf, @[`0`, `1`], aaf, noop, L),
- δ(aaf, @[`X`], aa, `1`, L),
- δ(aab, @[`0`, `1`], aab, noop, L),
-
- δ(aba, @[`0`, `1`], aba, noop, L),
- δ(aba, @[`$`], abb, noop, L),
- δ(abb, @[`0*`], abc, `0`, R),
- δ(abc, @[`$`, `X`, `0`, `1`, `0*`, `1*`], abc, noop, R),
- δ(abc, @[`_`], abd, noop, L),
- δ(abd, @[`0`, `1`], abd, noop, L),
- δ(abd, @[`X`], aa, `1`, L),
- δ(abb, @[`1*`], abe, `1`, R),
- δ(abe, @[`$`, `X`, `0`, `1`, `0*`, `1*`], abe, noop, R),
- δ(abe, @[`_`], abf, noop, L),
- δ(abf, @[`0`, `1`], abf, noop, L),
- δ(abf, @[`X`], ba, `0`, L),
- δ(abb, @[`$`], abc, noop, R),
- δ(abb, @[`0`, `1`], abb, noop, L),
-
- δ(ba, @[`X`, `0`, `1`], ba, noop, L),
- δ(ba, @[`$`], bb, noop, L),
- δ(bb, @[`0*`, `1*`], bb, noop, L),
- δ(bb, @[`0`], baa, `0*`, L),
- δ(bb, @[`1`], bba, `1*`, L),
- δ(bb, @[`$`], bc, noop, R),
- δ(bc, @[`$`, `X`, `0`, `1`, `0*`, `1*`], bc, noop, R),
- δ(bc, @[`_`], za, noop, L),
-
- δ(baa, @[`0`, `1`], baa, noop, L),
- δ(baa, @[`$`], bab, noop, L),
- δ(bab, @[`0*`], bac, `0`, R),
- δ(bac, @[`$`, `X`, `0`, `1`, `0*`, `1*`], bac, noop, R),
- δ(bac, @[`_`], bad, noop, L),
- δ(bad, @[`0`, `1`], bad, noop, L),
- δ(bad, @[`X`], aa, `1`, L),
- δ(bab, @[`1*`], bae, `1`, R),
- δ(bae, @[`$`, `X`, `0`, `1`, `0*`, `1*`], bae, noop, R),
- δ(bae, @[`_`], baf, noop, L),
- δ(baf, @[`0`, `1`], baf, noop, L),
- δ(baf, @[`X`], ba, `0`, L),
- δ(bab, @[`0`, `1`], bab, noop, L),
-
- δ(bba, @[`0`, `1`], bba, noop, L),
- δ(bba, @[`$`], bbb, noop, L),
- δ(bbb, @[`0*`], bbc, `0`, R),
- δ(bbc, @[`$`, `X`, `0`, `1`, `0*`, `1*`], bbc, noop, R),
- δ(bbc, @[`_`], bbd, noop, L),
- δ(bbd, @[`0`, `1`], bbd, noop, L),
- δ(bbd, @[`X`], ba, `0`, L),
- δ(bbb, @[`1*`], bbe, `1`, R),
- δ(bbe, @[`$`, `X`, `0`, `1`, `0*`, `1*`], bbe, noop, R),
- δ(bbe, @[`_`], bbf, noop, L),
- δ(bbf, @[`0`, `1`], bbf, noop, L),
- δ(bbf, @[`X`], ba, `1`, L),
- δ(bbb, @[`$`], bbc, noop, R),
- δ(bbb, @[`0`, `1`], bbb, noop, L),
-
- δ(za, @[`0`, `1`], za, noop, L),
- δ(za, @[`$`], zb, noop, R),
-
- δ(zb, @[`0`], zc, `1`, R),
- δ(zb, @[`1`], zb, `1`, R),
- δ(zb, @[`_`], zd, `1`, R),
-
- δ(zc, @[`0`], zc, `0`, R),
- δ(zc, @[`1`], zb, `0`, R),
- δ(zc, @[`_`], zd, `0`, R),
-
- δ(zd, @[`_`], sa, `$`, R)
+ δ(ca, {`_`}, cb, `$`, R),
+ δ(cb, {`_`}, cc, `0`, R),
+ δ(cc, {`_`}, cd, `$`, R),
+ δ(cd, {`_`}, ce, `1*`, R),
+ δ(ce, {`_`}, cf, `$`, R),
+ δ(cf, {`_`}, cg, `1`, R),
+ δ(cg, {`_`}, ch, `$`, R),
+ δ(ch, {`_`}, sa, noop, S),
+
+ δ(sa, {`_`, `X`}, sa, noop, L),
+ δ(sa, {`$`}, sb, noop, L),
+ δ(sb, {`0*`, `1*`}, sb, noop, L),
+ δ(sb, {`0`}, sc, `0*`, R),
+ δ(sb, {`1`}, sc, `1*`, R),
+ δ(sb, {`$`}, sd, noop, R),
+ δ(sc, {`$`, `X`, `0*`, `1*`}, sc, noop, R),
+ δ(sc, {`_`}, sa, `X`, L),
+ δ(sd, {`$`, `X`}, sd, noop, R),
+ δ(sd, {`0*`}, sd, `0`, R),
+ δ(sd, {`1*`}, sd, `1`, R),
+ δ(sd, {`_`}, aa, noop, L),
+
+ δ(aa, {`X`, `0`, `1`}, aa, noop, L),
+ δ(aa, {`$`}, ab, noop, L),
+ δ(ab, {`0*`, `1*`}, ab, noop, L),
+ δ(ab, {`0`}, aaa, `0*`, L),
+ δ(ab, {`1`}, aba, `1*`, L),
+ δ(ab, {`$`}, ac, noop, R),
+ δ(ac, {`$`, `X`, `0`, `1`, `0*`, `1*`}, ac, noop, R),
+ δ(ac, {`_`}, sa, `$`, R),
+
+ δ(aaa, {`0`, `1`}, aaa, noop, L),
+ δ(aaa, {`$`}, aab, noop, L),
+ δ(aab, {`0*`}, aac, `0`, R),
+ δ(aac, {`$`, `X`, `0`, `1`, `0*`, `1*`}, aac, noop, R),
+ δ(aac, {`_`}, aad, noop, L),
+ δ(aad, {`0`, `1`}, aad, noop, L),
+ δ(aad, {`X`}, aa, `0`, L),
+ δ(aab, {`1*`}, aae, `1`, R),
+ δ(aae, {`$`, `X`, `0`, `1`, `0*`, `1*`}, aae, noop, R),
+ δ(aae, {`_`}, aaf, noop, L),
+ δ(aaf, {`0`, `1`}, aaf, noop, L),
+ δ(aaf, {`X`}, aa, `1`, L),
+ δ(aab, {`0`, `1`}, aab, noop, L),
+
+ δ(aba, {`0`, `1`}, aba, noop, L),
+ δ(aba, {`$`}, abb, noop, L),
+ δ(abb, {`0*`}, abc, `0`, R),
+ δ(abc, {`$`, `X`, `0`, `1`, `0*`, `1*`}, abc, noop, R),
+ δ(abc, {`_`}, abd, noop, L),
+ δ(abd, {`0`, `1`}, abd, noop, L),
+ δ(abd, {`X`}, aa, `1`, L),
+ δ(abb, {`1*`}, abe, `1`, R),
+ δ(abe, {`$`, `X`, `0`, `1`, `0*`, `1*`}, abe, noop, R),
+ δ(abe, {`_`}, abf, noop, L),
+ δ(abf, {`0`, `1`}, abf, noop, L),
+ δ(abf, {`X`}, ba, `0`, L),
+ δ(abb, {`$`}, abc, noop, R),
+ δ(abb, {`0`, `1`}, abb, noop, L),
+
+ δ(ba, {`X`, `0`, `1`}, ba, noop, L),
+ δ(ba, {`$`}, bb, noop, L),
+ δ(bb, {`0*`, `1*`}, bb, noop, L),
+ δ(bb, {`0`}, baa, `0*`, L),
+ δ(bb, {`1`}, bba, `1*`, L),
+ δ(bb, {`$`}, bc, noop, R),
+ δ(bc, {`$`, `X`, `0`, `1`, `0*`, `1*`}, bc, noop, R),
+ δ(bc, {`_`}, za, noop, L),
+
+ δ(baa, {`0`, `1`}, baa, noop, L),
+ δ(baa, {`$`}, bab, noop, L),
+ δ(bab, {`0*`}, bac, `0`, R),
+ δ(bac, {`$`, `X`, `0`, `1`, `0*`, `1*`}, bac, noop, R),
+ δ(bac, {`_`}, bad, noop, L),
+ δ(bad, {`0`, `1`}, bad, noop, L),
+ δ(bad, {`X`}, aa, `1`, L),
+ δ(bab, {`1*`}, bae, `1`, R),
+ δ(bae, {`$`, `X`, `0`, `1`, `0*`, `1*`}, bae, noop, R),
+ δ(bae, {`_`}, baf, noop, L),
+ δ(baf, {`0`, `1`}, baf, noop, L),
+ δ(baf, {`X`}, ba, `0`, L),
+ δ(bab, {`0`, `1`}, bab, noop, L),
+
+ δ(bba, {`0`, `1`}, bba, noop, L),
+ δ(bba, {`$`}, bbb, noop, L),
+ δ(bbb, {`0*`}, bbc, `0`, R),
+ δ(bbc, {`$`, `X`, `0`, `1`, `0*`, `1*`}, bbc, noop, R),
+ δ(bbc, {`_`}, bbd, noop, L),
+ δ(bbd, {`0`, `1`}, bbd, noop, L),
+ δ(bbd, {`X`}, ba, `0`, L),
+ δ(bbb, {`1*`}, bbe, `1`, R),
+ δ(bbe, {`$`, `X`, `0`, `1`, `0*`, `1*`}, bbe, noop, R),
+ δ(bbe, {`_`}, bbf, noop, L),
+ δ(bbf, {`0`, `1`}, bbf, noop, L),
+ δ(bbf, {`X`}, ba, `1`, L),
+ δ(bbb, {`$`}, bbc, noop, R),
+ δ(bbb, {`0`, `1`}, bbb, noop, L),
+
+ δ(za, {`0`, `1`}, za, noop, L),
+ δ(za, {`$`}, zb, noop, R),
+
+ δ(zb, {`0`}, zc, `1`, R),
+ δ(zb, {`1`}, zb, `1`, R),
+ δ(zb, {`_`}, zd, `1`, R),
+
+ δ(zc, {`0`}, zc, `0`, R),
+ δ(zc, {`1`}, zb, `0`, R),
+ δ(zc, {`_`}, zd, `0`, R),
+
+ δ(zd, {`_`}, sa, `$`, R)
]
proc print(state: State, tape: Tape, position: int) =