読者です 読者をやめる 読者になる 読者になる

最強のじゃんけんプログラム

雑記

大学生の頃プログラミングサークルに所属していて、ある時ちょっとした余興で、最強のじゃんけんプログラム作ろうぜ!となった。

勝負となる手を返すインターフェース作って、各々が「ぼくの考えたさいきょうのストラテジー」を実装し、提出されたじゃんけんストラテジー同士を10000回ほど勝負させ、全試合の合計勝率を見て最強のストラテジーをあぶり出そうとした。


その時俺は、相手が過去に出した手を覚えていてどの手が多いのかを判断し、確率的にどの手が勝ちやすいかを判断するロジックを書いた。ランダムな手を出す相手には勝率は五割だが、何かしら人間の手が入っていれば偏りが出来て勝てるんじゃないかと思ったわけなのだが、結果は・・・勝てなかった。
俺が負けた相手は、戦いによっては勝率100%を叩き出していた。100%!?!?

しかも相手はプログラムが苦手な奴で、いったいどんな最強アルゴリズムなんだ!?とワクテカした。
なんせ今までプログラムが書けそうな感じがほとんど無かったヤツがこんな圧倒的勝利を収めるなんて、きっと頭脳は大変に優れていてただそれをコードとして表すのが苦手なだけな人なんだろうとさえ思った。

で、その最強コードを見せてもらった。
そしたら

return Hand.PAA;

という、じゃんけんのパーしか返さないプログラムだった。
その時たまたまメンツの中にはグーしか返さないプログラムを書いたヤツがいて、圧倒的勝利を収めていたのだった。

なんだよそりゃあ、という気持ちだったが、ルールを破ったわけでもなくちゃんと事前に取り決めた枠の中で彼は最高の成績を収めたのだから、文句のぶつけようが無かった。