コードを短くするのって楽しいですよね?(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が必要になる。(つづく)