Most underscored argument

もっともアンダースコアな引数

受賞者:Ferenc Deak

引用元:https://www.ioccc.org/2014/deak/prog.c

審査員・作者による説明:https://www.ioccc.org/2014/deak/hint.html

動作

マンデルブロ集合を端末に描く。

$ gcc -o prog prog.c

$ ./prog
-------------.......................................................-------------
-----------................................           ................-----------
---------..............................                   ..............---------
--------............................          ++@++++       .............--------
------...........................           +++@+@@@+++       .............------
-----..........................           ++++@@.- --.++        ............-----
----.........................            ++++@@-.+@@@ @+++       ............----
--.........................            +++++@@--.+ ++.-@+++       .............--
-........................             +++++@@-..@@@ + .@@++++       ............-
.......................            +++++@@@@-. @-   -@@-@@+++++     .............
.....................            +++++@@@@--..@      ++.-@@@+++++    ............
...................           ++++++@@-----.  @-     +@ .--@@@@@++    ...........
.................          +++++++@@- - @  - -.@    @+.-@@ .--. -++    ..........
...............         ++++++++@@@-. @ @ ..           @  -+.@@  @++   ..........
............         ++++++++++@@@--.+   -                 ++  @-@++    .........
..........        ++++++++++@@@@@--. @ -                      ++.@@++    ........
.......         +++@@@@@@@@@@@@--- . ..                      ..+.-@++    ........
.....         ++++@@+-----------.. -.                          @  -++    ........
...         +++++@@ .  .. @ .....  +@                          + +.@+     .......
..         +++++@@-.--@ @--.- + ++ +                             @-@++    .......
.        ++++++@@--.+.  @+@ + @-@-@                             . -@++    .......
        +++++@@@--.+@ -        +++                               @-+++     ......
      ++++@@@@-.+  @.           -+                              +.@+++     ......
  +++++@@@@@--. .   -            +                               -@+++     ......
+++@@- .--... +@                                                -@@+++     ......
                                                             ++.-@@+++     ......
+++@@- .--... +@                                                -@@+++     ......
  +++++@@@@@--. .   -            +                               -@+++     ......
      ++++@@@@-.+  @.           -+                              +.@+++     ......
        +++++@@@--.+@ -        +++                               @-+++     ......
.        ++++++@@--.+.  @+@ + @-@-@                             . -@++    .......
..         +++++@@-.--@ @--.- + ++ +                             @-@++    .......
...         +++++@@ .  .. @ .....  +@                          + +.@+     .......
.....         ++++@@+-----------.. -.                          @  -++    ........
.......         +++@@@@@@@@@@@@--- . ..                      ..+.-@++    ........
..........        ++++++++++@@@@@--. @ -                      ++.@@++    ........
............         ++++++++++@@@--.+   -                 ++  @-@++    .........
...............         ++++++++@@@-. @ @ ..           @  -+.@@  @++   ..........
.................          +++++++@@- - @  - -.@    @+.-@@ .--. -++    ..........
...................           ++++++@@-----.  @-     +@ .--@@@@@++    ...........
.....................            +++++@@@@--..@      ++.-@@@+++++    ............
.......................            +++++@@@@-. @-   -@@-@@+++++     .............
-........................             +++++@@-..@@@ + .@@++++       ............-
--.........................            +++++@@--.+ ++.-@+++       .............--
----.........................            ++++@@-.+@@@ @+++       ............----
-----..........................           ++++@@.- --.++        ............-----
------...........................           +++@+@@@+++       .............------
--------............................          ++@++++       .............--------
---------..............................                   ..............---------
-----------................................           ................-----------
-------------.......................................................-------------

解説

ひさびさにマクロで引っ掻き回した作品。 プリプロセスをかけただけだと、わりと巨大になってしまう。 #define __(...)sizeofを使った式を出しているが、少し観察すると、単にこのマクロの引数の数になるだけとわかるので、そこに注意して処理すれば解読できる。

マンデルブロ集合の描画範囲は/* <-- Configure here: X1, X2, Y1, Y2 */というコメントがあるところをいじれば変更可能。

作者コメントによると、C言語っぽいと感じさせるコード断片を極力隠すというテーマで作ったもので、そうでなければ次のようなコードを書いただろうとのこと。

double                                 _[]={-2
,1,-1.3                ,1.3,  0,         0,0,0
,0               ,0,50, 80,     0,0,0     ,255
,               8,0};    int      main       (
               int j) {if (j==  1 ){ if(
       _[12]      >_[10]  )_[17]=1 ;}  if
   (_[13] >_[11     ] ||_[17]==1)  return
 ;_[6]   =  _ [13] / _[11]*(_[1]-_[   0])
+_[  0];  _ [7]=_[12]/_[10]*(_[3]-_[2] )+_
[2];_[8]=_[9]=_[14]=0;l2:_[4]=_[8] * _ [8]
;_[  5]=  _ [9]*_[9];_[9]=2*_[8]*_[9]+ _[7
 ];_[8   ]  = _ [ 4 ]-_[5]+_[6];_[14   ]++
   ;if((_ [14]<     _ [15])&&(_[4]+ _[ 5]
       <_[16      ])) goto l2;  putchar(
               " #@*+   "[( int)  _[14]%
5             ]);_ [13   ] ++ ;   main       (
0)               ;_[12]++;      _[13]       =0
;if(_                [17]    !=1)      putchar
(0xa);                               main(1);}

賞名の”underscored”はコードに多数のアンダースコアが使われていることを指しているが、英単語としては「強調された」という意味もある。