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

Codeへの愛とCuriosity

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

Minority's hello, world の 解説・解題

CodeIQ に「Minority's hello, world」という問題
https://codeiq.jp/q/1579
を出した。

問題について

ideone にある言語で hello, world! を書いて、競わせようという問題。

提出コードに課された条件は

  • ideone にある言語のどれかで書くこと。
  • 過不足なく「hello, world」を出力すること。
  • ソースコードに使える文字は、アスキーコード 0x20〜0x7e の文字のみ。

という具合。

今回は対戦ではなく、ポイント争い。
ルールはこんな感じ:

提出されたプログラムで使われている文字を、全挑戦者について集計します。
各文字には「(その文字を利用した挑戦者の人数)の2乗」というポイントが割り当てられます。
提出されたプログラムのポイントは、そのプログラムで使われている文字のポイントの合計となります。
提出コードのポイントが少ない順に順位をつけます。最小ポイントの方が優勝です。

という感じ。

戦いの結果は

で見ることが出来る。

勝つために

他の挑戦者の送り込むコードを予想することがまず大事。
予想した上で、ポイントの低いコードを書くための技術力が必要。
様々な言語について何ができるのかを把握していることが求められている内容になっている。

問題の設定はかなり馬鹿げているが、どうやっても勝てない問題というわけではない。

勝つための方法は以下のとおりである:

  1. 各投稿がどの文字を使っているのかを適当に予想する。
  2. 予想をもとに、各文字のポイントを計算する。
  3. 計算結果を元に、自分の書いたコードのポイントを計算し、ゴルフ頑張る。

たぶん、この作業をきちんとやれば、優勝とは言わないまでも、15位ぐらいには入れたのではないかと思う。
もちろん、ある程度、rubyperl などの素養がないと無理ではあるけれど。

出題意図など

hello, world で競い合う面白いゲームを提供したかった、というのが出題意図である。
必要な能力は

  • 複数の言語の素養
  • 予測しにくい環境に対応する力
  • イレギュラーなゴルフに対応するパズル力

辺りだと思う。

母集団が違うと全然違う戦いになるので、同じルールのゲームを別のところでやっても面白いと思う。
言語を限定しても楽しめると思う。

しかし。
PHP に文字列と文字列の xor があるのは知らなかった。
勉強になりました。

総評的な何か

前回同様、勝ち負けはまあいいんだけど、要求仕様である

  • 改行不可
  • 「"hello, world"」や「Hello World!」ではなく「hello, world」を出力する
  • Ideone で実行可能

などのルールを守れていない方が10名以上いたのが残念だった。

出題文面はだいぶ工夫したつもりなんだけど、全然足りてなかった感じ。

また問題出します。
よろしくお願いします。