Best primal ASCII graphics

最高の主要なASCIIグラフィックス

受賞者:Nicolas Ollinger

引用元:https://www.ioccc.org/2001/ollinger.c

審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2001/ollinger.hint

動作

セルオートマトンで素数列挙。

$ gcc -o ollinger ollinger.c

$ ./ollinger 1000
        0
        0\
     2  1.\
     3  1\ \
        0\. \
     5  1/\  \
        0\;\  \
     7  1:.0\  \
        0/.0.\  \
        0; 10 \  \
        0|/\0; \  \
    11  1/\.0|1 \  \
        0\/| |1/ \  \
    13  1:\| |\1. \  \
        0//| \:11  \  \
        0;\| /|.0/  \  \
        0|/|/ : 1.   \  \
    17  1/\:|.|.11    \  \
        0\/|; : 00/    \  \
    19  1:\: ;|0 1.     \
        0//|./||.11      \
        0;\:/ :0 00/      \
        0|/:|.;11 1.
    23  1/;|;.1/0 11
        0;/:.\|0..00/
        0:;: /|11 .1.
        0//|/ |00 .\1
        0;\:| | 1. \;/
        0|/|\ | 11  \1
    29  1/\| \| 00/ 1;/
        0\/| /|  1. /01
    31  1:\|/ |  11///1/
        0//:| |  011  11
        0;;|\ |  /;0/ 00/
        0:/| \| / |0.  1.
        0/\| /|/  |1\  11
        0\/|/ :|  |0\\ 00/
    37  1:\:|.|\  |1. \ 1.
        0//|; | \ |11  \11
        0;\: \|  \|00/ 100/
        0|/| /|  /| 1. \;1.
    41  1/\|/ | / | 11  \\1
        0\/:| |/  | 00/  \;/
    43  1:;|\ :|  |  1.   \1
        0//| ;|\  |  11   1;/
        0;\|./| \ |  00/  /01
        0|/:/ |  \|   1. ///1/
    47  1/;:| |  /|   11/   11
        0;/|\ | / |   011   00/
        0:\| \|/  |   /;0/   1.
        0//| /:|  |  / |0.   11
        0;\|/.|\  | /  |1\   00/
        0|/:: | \ |/   |0\\   1.
    53  1/;:\ |  \:|   |1. \  11
        0;/| \|  /|\   |11  \ 00/
        0:\| /| / | \  |00/  \ 1.
        0//|/ |/  |  \ | 1.   \11
        0;\:| :|  |   \| 11   100/
        0|/|\.|\  |   /| 00/  \;1.
    59  1/\|.\| \ |  / |  1.   \\1
        0\/: /|  \| /  |  11    \;/
    61  1:;|/ |  /|/   |  00/    \1
        0//:| | / :|   |   1.    1;/
        0;;|\ |/ .|\   |   11    /01
        0:/| \:|. | \  |   00/  ///1/
        0/\| /|;  |  \ |    1. /   11
        0\/|/ : \ |   \|    11/    00/
    67  1:\:|.|  \|   /|    011     1.
        0//|; |  /|  / |    /;0/    11
        0;\: \| / | /  |   / |0.    00/
        0|/| /|/  |/   |  /  |1\     1.
    71  1/\|/ :|  :|   | /   |0\\    11
        0\/:|.|\ .|\   |/    |1. \   00/
    73  1:;|; | ; | \  :|    |11  \   1.
        0//: \|. \|  \.|\    |00/  \  11
        0;;| /:  /|  .\| \   | 1.   \ 00/
        0:/|/.| / | . /|  \  | 11    \ 1.
        0/\:: |/  |. / |   \ | 00/    \11
        0\/:\ :|  : /  |    \|  1.    100/
    79  1:;| ;|\ .|/   |    /|  11    \;1.
        0//|./| ; :|   |   / |  00/    \\1
        0;\:/ |. ;|\   |  /  |   1.     \;/
        0|/:| : ./| \  | /   |   11      \1
    83  1/;|\.|./ |  \ |/    |   00/     1;/
        0;/|.\:/  |   \:|    |    1.     /01
        0:\: /:|  |   /|\    |    11    ///1/
        0//|/.|\  |  / | \   |    00/  /   11
        0;\:: | \ | /  |  \  |     1. /    00/
        0|/:\ |  \|/   |   \ |     11/      1.
    89  1/;| \|  /:|   |    \|     011      11
        0;/| /| /.|\   |    /|     /;0/     00/
        0:\|/ |/. | \  |   / |    / |0.      1.
        0//:| ::  |  \ |  /  |   /  |1\      11
        0;;|\.:\  |   \| /   |  /   |0\\     00/
        0:/|.;| \ |   /|/    | /    |1. \     1.
        0/\:./|  \|  / :|    |/     |11  \    11
        0\/:/ |  /| / .|\    :|     |00/  \   00/
    97  1:;:| | / |/ . | \  .|\     | 1.   \   1.
        0//|\ |/  :|.  |  \. | \    | 11    \  11
        0;\| \:| .|;   |  .\ |  \   | 00/    \ 00/
        0|/| /|\. : \  | .  \|   \  |  1.     \ 1.
   101  1/\|/ |.\.|  \ |.   /|    \ |  11      \11
        0\/:| : .\|   \:   / |     \|  00/     100/
   103  1:;|\.|. /|   /|  /  |     /|   1.     \;1.

解説

左側は素数、右側はオートマトン。

左上、真上、右上の3セルの状態から次の行のセルが決まる、9状態の1次元セルオートマトン。各状態をいい感じに01\|/:;.と空白の9文字で表現している(と思う)。オートマトン自体はKorec 1998が提案しているもので、ベースはFischer 1965とのこと。

IOCCC審査員のFAQの「見飽きてるネタはありますか?」に対して「素数列挙や状態機械」という回答があったので、その2つを組み合わせたとのこと。