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

Codeへの愛とCuriosity

CodeIQ への出題・解説解題・その周辺について、思いつくままに。

先制 hello, world のこと

先日、CodeIQ に「先制hello, world」という問題を出した。
単純なプログラムのソースコード同士を戦わせるというコンセプトとしては二回目なんじゃないかと思うけどよく憶えていない。

いつもここに書いているような解説解題の記事は CodeIQ Magazine に掲載していただいたので、普通の解説解題については https://codeiq.jp/magazine/2015/10/30191/ の方をご覧頂きたい。

で。
こちらはサブノート。

今回のルール(ルールについては 前出の CodeIQ Magazine の方を御覧ください)に至る経緯を書いてみよう。

最初のアイディアは、一文字ずつ互いに闘うという、以前出した「対戦型hello, world」と同じようなコンセプトだった。勝敗は文字コードの大小。
「負けたほうが退場」をやめて、n 文字目同士が闘うことにしたらどうだろう。とかいう感じ。

しかしそれだと文字数を揃えなくてはいけない。「対戦型hello, world」では揃えていただいたが、バラバラのほうが面白いと思う。

であれば。
n文字目がn文字目と戦うのをやめればよい。
どうやめるか。

文字のインデックスではなく、文字コードで戦う相手を決めればよいか。

戦いの順序はインデックスで決まり、戦う相手は文字コードで決める。よさ気。
戦うからには勝敗を決める必要がある。文字コードが同じ文字が相手なので、インデックスで勝敗を決めるしかない。インデックスが小さいほうが勝ち。
最終的な勝敗を生存者数にしてしまうと、長いコードを書けば勝てることになりそう。よろしくない。
じゃあ殺された数が少ない方はどうか。これだとコードを短くしたくなるので、いい感じに見える。

で。

このあと。
前後の文字も巻き添えでダメージを食らうとか、ヒットポイントがあって3ダメージで死ぬとか、直前にスペースがあると防御力が上がるとか、遠すぎる文字には攻撃できないとか、いろいろルールを考えたものの。
結局出題したようなシンプルなルールが一番面白そうだということになり、出題に至った。

そんな次第。

ちなみに。
同じような問題を出したいと思っていて、アイディアはあるものの、まだ出題できるところまでルールが仕上がっていない。
出題できるといいなぁ。