コードを短くするのって楽しいですよね?(7)

神の領域


―――そして神の領域へ。


すでに当初の問題とは全く別の問題と化しているが、67byteから縮めるというのは、そう容易ではない。これはこれで難問なのである。


昨日の段階から、65byteを達成するには、2つのhackが必要になる。ひとつ目は、getpidを使うということだ。これはid:kurimura:20051130さんが書いている。


pidを使うというのはもとは私のアイデアだが、私はincludeが必要なのだと勘違いしていた。そのあとgetpidについて気づいたのだが、連続してプロセス二つが実行された場合、その差が2の倍数になりやすい。(cygwin環境下では連続してpsを実行した場合、pid自体が2の倍数のようだし)


何度やってもacceptされずにあきらめていた。


そこで「getpid()&1」ではなく「getpid()%3」とするのがOzyさんの開発した一撃必殺で、3の剰余で勝負する。(実はgetpid()&4とか&8とかでも良かったのだけれど) これで何度かに一回acceptされる。くしくも、このあともう一度、3の剰余系に巡り合うことになる。


我々に残されたもうひとつの技は、「time(0)」だった。これが通れば(acceptされれば)67バイトから一気に2バイト縮む。ただしこれは、100回に一回ぐらいしか通らないので最後の最後に温存しておきたい。


とりあえず65byteに出来る可能性が見えてきたところで、ここからさらにコードを縮めることを考える。実は、ここから2byte縮めるには、3つのhackが必要になる。(つづく)