引用元:https://www.ioccc.org/1996/schweikh2.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1996/schweikh2.hint
動作
小町算のソルバ。
$ gcc -o schweikh2 schweikh2.c
$ ./schweikh2
1 + 2 * 3 + 4 * 5 + 6 * 7 - 8 - 9 - 10 = 42
1 - 2 + 3 * 4 * 5 / 6 * 7 - 8 - 9 - 10 = 42
1 + 2 * 3 / 4 * 5 * 6 + 7 + 8 - 9 - 10 = 42
1 - 2 + 3 + 4 + 5 + 6 * 7 + 8 - 9 - 10 = 42
1 / 2 * 3 * 4 + 5 + 6 * 7 + 8 - 9 - 10 = 42
...
引数は次の通り。第1引数は演算する数字の数。
$ ./schweikh2 6
1 * 2 * 3 * 4 + 5 + 6 + 7 = 42
1 * 2 - 3 - 4 + 5 + 6 * 7 = 42
第2引数は先頭の数字。
$ ./schweikh2 7 0
0 / 1 + 2 * 3 * 4 + 5 + 6 + 7 = 42
0 * 1 + 2 * 3 * 4 + 5 + 6 + 7 = 42
0 + 1 * 2 * 3 * 4 + 5 + 6 + 7 = 42
0 / 1 - 2 + 3 + 4 + 5 * 6 + 7 = 42
0 * 1 - 2 + 3 + 4 + 5 * 6 + 7 = 42
...
第3引数は隣り合う数字の差。
$ ./schweikh2 7 7 0
7 + 7 + 7 + 7 + 7 + 7 + 7 - 7 = 42
7 + 7 + 7 + 7 + 7 + 7 - 7 + 7 = 42
7 + 7 + 7 + 7 + 7 - 7 + 7 + 7 = 42
第4引数は合計値。
$ ./schweikh2 8 9 -1 -67/21
9 - 8 / 7 * 6 - 5 - 4 / 3 + 2 - 1 = -67/21
9 - 8 / 7 * 6 - 5 + 4 / 3 / 2 - 1 = -67/21
9 - 8 / 7 / 6 - 5 - 4 * 3 / 2 - 1 = -67/21
9 + 8 / 7 - 6 - 5 - 4 / 3 - 2 + 1 = -67/21
解説
すべての組み合わせを列挙するわけではない模様。
いくつか実験すると、明らかな解が不足していたり、解がある問題でも何もでなかったりすることもある。
詳細は未解読。
コードには原則として1文字ずつスペースが入っている。
たとえばmain
はこのようにつくる。
#define R( n , d ) e ( n , d )
#define e(p,o)o##p
R ( e ( n , i ) , e ( a , m ) )
コード形状はウロコのよう。
ダイヤモンドを並べているものらしい。
挙動との関係はなさそう。
オリジナルのコードはhunni.cで、これをhunni.plで処理することで生成されているとのこと。
当時の難読化コードの開発が垣間見えるのは興味深い。
[[1996/schweikh2]]と[[1996/schweikh3]]とあわせて、同じ人が同年に3部門で入賞するのは初の事例。