git @ Cat's Eye Technologies Chrysoberyl / master article / Automata.md
master

Tree @master (Download .tar.gz)

Automata.md @masterview rendered · raw · history · blame

  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
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
Automata
========

*   image_url: https://static.catseye.tc/images/illustrations/Perpetual_Motion_Machine.jpg

This is a list of Automata designed by Cat's Eye Technologies, listed in chronological
order.  For more information on these Automata, [see below](#about-these-automata).

The distinction between an Automaton and a [Language](Languages.md) or a
[Gewgaw](Gewgaws.md) is not always cut-and-dried, so if you can't find what
you're looking for here, try those lists as well.

### SMETANA

*   type: Automaton
*   inception-date: ca 1994
*   genre: Esolang
*   development-stage: archival
*   computational-class: known not Turing-complete
*   paradigms: Self-modifying
*   reference-distribution: [SMETANA distribution](https://catseye.tc/distribution/SMETANA_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/SMETANA)
*   online @ [archive.org](https://archive.org/details/smetana-v2004.0227-dos)
*   jnlp @ [archive.org](https://archive.org/details/yoob-rel_0_3_2018_1128)

Sample configuration:

    Step 1. Swap step 1 with step 2.
    Step 2. Go to step 2.
    Step 3. Go to step 1.

SMETANA is a pathological little self-modifying language with only two
possible operations: Go to step *n*, and Swap steps *n* and *m*.
It has inspired a few variants and developments, notably a proof that
despite its minimalism, it is finite-automata-complete; it is also the
(great-?)grandfather of [SMITH][].

#### Reference Implementation: smetana.pl

*   license: Public Domain
*   implementation-type: interpreter
*   host-language: [Perl][]

#### Implementation: SMETANA (Visual Basic)

*   license: Freely Redistributable
*   implementation-type: interpreter
*   host-language: [Visual Basic][]

#### Implementation: tc.catseye.yoob.smetana

*   license: Public Domain
*   implementation-type: interpreter
*   host-language: [Java][]
*   host-platform: [yoob][]

### Cyclobots

![preview](https://static.catseye.tc/images/screenshots/Cyclobots.jpg)

*   type: Automaton
*   inception-date: ca 1994
*   genre: Desk toy
*   reference-distribution: [Cyclobots distribution](https://catseye.tc/distribution/Cyclobots_distribution)
*   online @ [catseye.tc](https://catseye.tc/installation/Cyclobots)

Cyclobots is an automaton that consists of a number of little virtual
"turtle robots" called "cyclobots".  Each cyclobot moves with a constant
velocity, and tries to follow exactly one other cyclobot, adjusting
its heading to point towards the cyclobot it is following.
No cyclobot is followed by more than one cyclobot.

A group of cyclobots tends to fall into one of several semi-stable
patterns.  The simplest of these is just a rotating circle, but
more complex, [trefoil](http://en.wikipedia.org/wiki/Trefoil_knot)-like
patterns are common.

I originally conceived of this automaton, calling it
an "interactive desktop toy", in 1994, and implemented
it immediately in Visual Basic.  I remember the year because I wrote the
first implementation of [SMETANA][] in Visual Basic at about the same time.

The original implementation had a few features which are not present (yet)
in the HTML5 version: cyclobots could collide with each other, and the user
could use the mouse to attract/repel them from a chosen point.

#### Reference Implementation: cyclobots.js

*   license: Public Domain
*   host-language: Javascript
*   host-platform: HTML5
*   development-stage: mature

#### Implementation: Cyclobots (Visual Basic)

*   license: Freely Redistributable
*   host-language: Visual Basic
*   development-stage: lost

### RUBE

*   type: Automaton
*   inception-date: 1997
*   genre: Esolang
*   development-stage: mature
*   computational-class: ???
*   paradigms: Bully automaton, 2-dimensional
*   reference-distribution: [RUBE distribution](https://catseye.tc/distribution/RUBE_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/RUBE)
*   online @ [archive.org](https://archive.org/details/rube-1.02-dos)

Sample configuration:

      0a21646c726f77202c6f6c6c6548
    , :::::::::::::::::::::::::::: ,
     )
     ==============================
    F
                                   O F
                                   c
                                   =

RUBE is an esoteric programming language in tribute to [Rube Goldberg][],
with bulldozers pushing around numbered crates, knocking them together to
perform computations.  It is based on a variant of a cellular automaton called
a *[bully automaton][]*, where certain state changes can
force other state changes to occur elsewhere in the playfield.

#### Reference Implementation: rube.c

*   license: BSD license
*   implementation-type: interpreter
*   host-language: [ANSI C][]

### REDGREEN

*   type: Automaton
*   inception-date: 1998
*   genre: Esolang
*   development-stage: mature
*   computational-class: Turing-complete
*   influences: RUBE
*   paradigms: Cellular automaton
*   reference-distribution: [REDGREEN distribution](https://catseye.tc/distribution/REDGREEN_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/REDGREEN)
*   online @ [catseye.tc](https://catseye.tc/installation/REDGREEN)

Sample configuration:

                       # #
     ......            # #
                       #  ~                      #
                       #######################   #
                      %#                         #
           . . .      T #####                    #
                      ###   #  :                 #
                            #                    #
                            #  .                 #
                            #                    #
                            #                    #
                            #  .                 #
                            #                    #
                            #                    #
    #<<<<<<<<<<<<<<<<<############################
                                    %
                                    T

REDGREEN is a cellular automaton that simulates a little
"physical world", much like [RUBE][].

#### Reference Implementation: redgreen.alp

*   license: BSD license
*   implementation-type: formal description
*   host-language: ALPACA

### noit o' mnain worb

![screenshot](https://static.catseye.tc/images/screenshots/noit_o_mnain_worb.jpg)

*   type: Automaton
*   inception-date: Sep 15, 2000
*   genre: Esolang
*   development-stage: mature
*   computational-class: ???
*   paradigms: Particle automaton, Probabilistic
*   reference-distribution: [noit o' mnain worb distribution](https://catseye.tc/distribution/noit_o'_mnain_worb_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/noit_o'_mnain_worb)
*   online @ [catseye.tc](https://catseye.tc/installation/noit_o'_mnain_worb)
*   jnlp @ [archive.org](https://archive.org/details/yoob-rel_0_3_2018_1128)

Sample configuration:

    #####         #####
    #   ###########   #
    # . >         < . #
    #   #####v#####   #
    #####   #  ########
            #       >!#
            #v#########
            # #
            ###

noit o' mnain worb is a probabilistic particle automaton that
uses pressure between randomly moving particles to approximate the behaviour
of circuits.  It can approximate computation with these circuits, too, but
it's so lossy that it has more value as just a neat toy to watch.

(The name of this language contains a *secret message*! Can *you* find it?)

#### Reference Implementation: worb.pl

*   license: BSD license
*   implementation-type: interpreter
*   host-language: [Perl][]

#### Implementation: worb.js

*   license: BSD license
*   implementation-type: interpreter
*   host-language: [Javascript][]
*   host-platform: [HTML5][]

#### Implementation: tc.catseye.yoob.worb

*   license: BSD license
*   implementation-type: interpreter
*   host-language: [Java][]
*   host-platform: [yoob][]

### Circute

![screenshot](https://static.catseye.tc/images/screenshots/Circute.jpg)

*   type: Automaton
*   inception-date: 2005
*   genre: Esolang
*   development-stage: mature
*   computational-class: known not Turing-complete
*   influences: Wireworld
*   paradigms: Cellular automaton
*   reference-distribution: [Circute distribution](https://catseye.tc/distribution/Circute_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/Circute)
*   online @ [catseye.tc](https://catseye.tc/installation/Circute)
*   jnlp @ [archive.org](https://archive.org/details/yoob-rel_0_3_2018_1128)

Sample configuration:

                     =
                     =
      #######==   ===N===   =========
      #       =   =     =   =       =
    ==N==     = ==N== ==N== =     ==N==
    =   =     = =   = =   = =     =   =
    =====     = ===== ===== =     =====
      =       =   =     =   =       =
      =============     =============

Circute is a cellular automaton that simulates conduits that
carry digital signals and NAND gates that manipulate those signals.

#### Reference Implementation: circute.alp

*   license: BSD license
*   implementation-type: formal description
*   host-language: ALPACA

#### Implementation: tc.catseye.yoob.circute

*   license: Public Domain
*   implementation-type: interpreter
*   host-language: [Java][]
*   host-platform: [yoob][]

### Braktif

*   type: Automaton
*   inception-date: 2005
*   genre: Esolang
*   development-stage: mature
*   computational-class: believed Turing-complete
*   influences: brainfuck
*   paradigms: Cellular automaton
*   reference-distribution: [Braktif distribution](https://catseye.tc/distribution/Braktif_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/Braktif)
*   online @ [catseye.tc](https://catseye.tc/installation/Braktif)

Sample configuration:

                                *
                           <<*[--]*
    000000000000000000  *[-----  --]
    -----------------d-i--         --------

Braktif is a cellular automaton modelled closely after the [brainfuck][]
programming language.

#### Reference Implementation: braktif.alp

*   license: BSD license
*   implementation-type: formal description
*   host-language: ALPACA

### Xigxag

*   type: Automaton
*   inception-date: Apr 23, 2007
*   genre: Esolang
*   development-stage: mature
*   computational-class: unknown computational class
*   paradigms: String-rewriting
*   reference-distribution: [Xigxag distribution](https://catseye.tc/distribution/Xigxag_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/Xigxag)
*   online @ [archive.org](https://archive.org/details/xigxag-2007.0602-dos)

Sample configuration:

    ><<

Sample result:

    ><<
    <<>><
    <><<<<>>
    <<<<>><><><<><<<><<<>

Xigxag is a simple string-copying automaton that has exponential
growth almost everywhere (i.e. there are only a finite number of initial
configurations that don't blow up.)

#### Reference Implementation: xigxag.pl

*   license: Public Domain
*   implementation-type: interpreter
*   host-language: [Perl][]

### Didigm

*   type: Automaton
*   inception-date: Nov 20, 2007
*   genre: Esolang
*   development-stage: not fully complete
*   computational-class: ???
*   paradigms: Cellular automaton, Reflective
*   reference-distribution: [Specs on Spec distribution](https://catseye.tc/distribution/Specs_on_Spec_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/Didigm)

Sample configuration:

    3333333333333
    3002300230073
    3111311132113
    3311321131573
    3111311131333
    3333333333333
    =F3
    ,
    =F1
    111111111111111
    111111131111111
    111111111111574
    111111111111333
    311111111111023
    111111111111113

Didigm is a reflective cellular automaton: the transition rules
for the automaton are defined by forms in the very playfield governed by
those transition rules.

### Jaccia

*   type: Automaton
*   inception-date: Apr 11, 2009
*   genre: Esolang
*   development-stage: mature
*   computational-class: known not Turing-complete
*   paradigms: Cellular automaton, 2-dimensional
*   reference-distribution: [Jaccia and Jacciata distribution](https://catseye.tc/distribution/Jaccia_and_Jacciata_distribution)
*   entry @ [esolangs.org](https://esolangs.org/wiki/Jaccia)
*   online @ [catseye.tc](https://catseye.tc/installation/Jaccia)

Sample configuration:

    #######S###
    #:::::::::#
    #:###:###:#
    #:#:#:::#:#
    #:#:#:#:###
    #:::#:#:#:#
    #####:#:#:#
    #:#:::#:::#
    #:#:###:###
    #:::#:::::#
    #########F#

Sample result:

    #######S###
    #    :::  #
    # ###:### #
    # # #:::# #
    # # # #:###
    #   # #:# #
    ##### #:# #
    # #   #:  #
    # # ###:###
    #   #  :::#
    #########F#

Jaccia and Jacciata are cellular automata inspired by the [Announcement
of Scientific Proof that Slime Molds are Intelligent Maze Solvers](http://web.archive.org/web/20020220163303/http://www.riken.go.jp/lab-www/frontier-div/NEWSLETTER/feb2001/ameboid_e.htm).
Jaccia can solve mazes too, by a similar mechanism (shrinking). Jacciata builds
upon this to find the shortest path through a maze, if one exists and is unique.

#### Reference Implementation: jaccia.alp

*   license: BSD license
*   implementation-type: formal description
*   host-language: ALPACA

### Jacciata

*   type: Automaton
*   genre: Esolang
*   online @ [catseye.tc](https://catseye.tc/installation/Jacciata)

Jacciata is a variant of [Jaccia][] which finds the shortest path.

### Chzrxl

![preview](https://static.catseye.tc/images/screenshots/Chzrxl.jpg)

*   type: Automaton
*   inception-date: 2013
*   genre: Desk toy
*   reference-distribution: [Chzrxl distribution](https://catseye.tc/distribution/Chzrxl_distribution)
*   online @ [catseye.tc](https://catseye.tc/installation/Chzrxl)

"Chzrxl, the Living Inkblot."  Or is it a sort of self-attracting
lava lamp?

#### Reference Implementation: chzrxl.js

*   type: Implementation
*   license: Public Domain
*   host-language: Javascript
*   host-platform: HTML5

### Backtracking Wang Tiler

![screenshot](https://static.catseye.tc/images/screenshots/Backtracking_Wang_Tiler.jpg)

*   type: Automaton
*   inception-date: Feb 2015
*   genre: Experimental language
*   development-stage: mature
*   computational-class: ???
*   paradigms: 2-dimensional
*   reference-distribution: [Backtracking Wang Tiler distribution](https://catseye.tc/distribution/Backtracking_Wang_Tiler_distribution)
*   online @ [catseye.tc](https://catseye.tc/installation/Backtracking%20Wang%20Tiler)

This backtracking Wang tiler is an automaton which naïvely tiles the
plane with [Wang tiles](http://en.wikipedia.org/wiki/Wang_tile).

It operates like a backtracking algorithm, backing up whenever it finds
it cannot place a tile, but it may be inaccurate to describe it as an
algorithm, since it never terminates.

#### Implementation: backtracking-wang-tiler.js

*   license: Public Domain
*   implementation-type: generator
*   host-language: [Javascript][]
*   host-platform: [HTML5][]

### Schrödinger's Game of Life

![screenshot](https://static.catseye.tc/images/screenshots/Schroedingers_Game_of_Life.jpg)

*   type: Automaton
*   inception-date: Feb 7, 2015
*   genre: Experimental language
*   development-stage: mature
*   computational-class: ???
*   paradigms: 2-dimensional, Cellular automaton, Non-deterministic
*   reference-distribution: [Schrödinger's Game of Life distribution](https://catseye.tc/distribution/Schrödinger's_Game_of_Life_distribution)
*   online @ [catseye.tc](https://catseye.tc/installation/Schrödinger's%20Game%20of%20Life)

Schrödinger's Game of Life is what happens when [Conway's Game of Life][]
meets [Schrödinger's Cat][]: each individual cell may be **Alive**,
or **Dead**, or **Possibly-Alive-Possibly-Dead** (which we call **Cat**.)

This is, in essence, the result of applying
[non-determinism][] to an existing
[cellular automaton][], and this operation could
probably be applied to any cellular automaton with similar results.

For a full account of its development, see
[its README document](https://codeberg.org/catseye/Schroedingers-Game-of-Life/#schr%C3%B6dinger-s-game-of-life).

#### Reference Implementation: slife

*   license: Public Domain
*   implementation-type: interpreter
*   host-language: Python

#### Implementation: slife.js

*   license: Public Domain
*   implementation-type: interpreter
*   host-language: [Javascript][]
*   host-platform: [HTML5][]

## About these Automata

We should say a few words about these automata here.

- - - -

[Javascript]: ../article/Project%20Dependencies.md#javascript
[HTML5]: https://www.w3.org/TR/html5/
[yoob]: ../article/Archived.md#yoob
[Jaccia]: ../article/Automata.md#jaccia
[SMITH]: ../article/Languages.md#smith
[Perl]: ../article/Project%20Dependencies.md#perl
[Visual Basic]: https://en.wikipedia.org/wiki/Visual_Basic
[Java]: ../article/Project%20Dependencies.md#java
[Rube Goldberg]: https://en.wikipedia.org/wiki/Rube_Goldberg
[bully automaton]: https://esolangs.org/wiki/Bully%20automaton
[RUBE]: ../article/Automata.md#rube
[ANSI C]: ../article/Project%20Dependencies.md#ansi-c
[brainfuck]: https://esolangs.org/wiki/brainfuck
[Conway's Game of Life]: http://en.wikipedia.org/wiki/Conway's_Game_of_Life
[Schrödinger's Cat]: https://en.wikipedia.org/wiki/Schr%C3%B6dinger's_cat
[SMETANA]: ../article/Automata.md#smetana
[non-determinism]: https://esolangs.org/wiki/Category:Nondeterministic
[cellular automaton]: https://en.wikipedia.org/wiki/Cellular_automaton