Most poetic use of strings

文字列のもっとも詩的な使い方

受賞者:Arch D. Robison

引用元:https://www.ioccc.org/2013/robison/robison.c

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

動作

多倍長整数に対応した電卓。

$ gcc -o robison robison.c

$ echo '1*2*3*4*5*6*7*8*9%1000' | ./robison
880

$ echo '100000000000000000000*(20*(1+(99477941840441*50)))/31664812345028528' | ./robison
314159265358979333767

解説

コード形状は、ライブラリ関数(主に文字列・メモリ関係)を特徴的に並べている。

hint.textがポエム調になっている。 おもしろいが、ちょっと理解に自信がない。 四則演算もビット演算もポインタ演算も配列参照もしないという制約で書かれている。 基本的に上から下に流れていくだけのフローだが、qsort()によってチューリング完全にしている(と書かれていると思うが、できないと思うし、for文も使用されているのでよくわからない)。

コマンドライン引数で基数を指定できる。 ただし、argv[1]は配列参照だから使ってはいけないので、argvqsortして先頭を拾う。 普通に./robison 17と起動すると、argv[0]./robisonで、17より先に来てしまうのでダメ。 次のように起動すると17進数で計算ができる(babbagecafefadはhint.textに書いてあった例)。

$ echo "babbage / cafe" | PATH=. robison 17
fad

“translate from Urdu to Tzouby?”(ウルドゥー語からTzoubyに翻訳せよ)という謎のフレーズがあるが、Tzoubyはコード中にある"tzouby!fssps"という文字列を指していると思う。 これはASCIIコードを1引くと"syntax error"という文字列になる。

$ echo "babbage / nix" | PATH=. robison 17
syntax error
Segmentation fault

審査員コメントは通常、一通りの使用法に言及するのだが、基数指定は言及されていない。 審査員が見落としているか、または意図的に情報を隠したか。