天下一プログラマー ― 2009/06/19
名前が素敵。 ってのはともかく、今一ターゲットが不明。 提示されている例題を含めての話。
天下一
天下一なんて冠をつけたからには(うちのSKKのJIS-L辞書には入ってない単語だけど、多分DBを意識しているんだよね?)geek方面を意識しているんだと思う。
で、実際
審査基準 1. 出題通りに正しく動作するか 2. 所要時間 3. コードのエレガントさ
とあるわけだけど、これで例題が
以下の文字列はUTF-8を文字エンコーディング形式とする16進数のバイト列である。 UTF-8でエンコーディングされた文字列として解析した場合、 この文字列の【文字数】を答えなさい。 e4bba5e4b88be381aee69687e5ad97e58897e381af5554462d38e38292e69687e5ad97 e382a8e383b3e382b3e383bce38387e382a3e383b3e382b0e5bda2e5bc8fe381a8e381 99e3828b3136e980b2e695b0e381aee38390e382a4e38388e58897e381a7e38182e3828be38082
ってのは何か違うんじゃないかなあ。
こんな問題に "出題通りに正しく動作するか" 悩んだり、 "所要時間" が計測可能な程時間を掛けたりする "天下一プログラマー" は居ないよ。
"コードのエレガントさ" に関しても、主題に頭を使う部分が全くないので、小手先のそれこそGolf的な凝り方しかすることがないと思う。 んで、(個人的にGolfは好きだけど)これも "天下一プログラマー" の要件では無い。
- バイト列が実はUTF-8符号化として正しくないとか
- 幅無しの空白文字が含まれていてこいつの「文字数」は0なのか1なのかとか
- 解答に与えられる時間が秒単位だとか
ぐらいの制限なりひっかけなりが無いと、コンテストとしての面白みに欠けると思うけど、どうだろう?
蛇足
あと、細かいところだと"16進数のバイト列"って表現もおかしい。 "バイト列の16進数表記"ぐらいなら我慢もできるけど。
"以下の文字列は、ある文字列をUTF-8で符号化したオクテットストリームを16進数表記にしたものである。" が正しいと思う。
ちなみに、僕の解答は
p <<EOT.gsub(/(.)./){$1}.tr("8-b\n",'').size e4bba5e4b88be381aee69687e5ad97e58897e381af5554462d38e38292e69687e5ad97 e382a8e383b3e382b3e383bce38387e382a3e383b3e382b0e5bda2e5bc8fe381a8e381 99e3828b3136e980b2e695b0e381aee38390e382a4e38388e58897e381a7e38182e3828be38082 EOT #=> 41
こんな感じ。
MEMOはてな支店 ここの最初の例と全く同じですね。
(追記)
この手の問題をわんこそば形式でひたすら解いていき、一定時間内の正答数を競うコンテストはそれなりに面白いかも。
と思ったけど、それってなんて Project Euler ?
最近のコメント