Codeへの愛とCuriosity

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

神奈川Ruby会議でペアプロ問題出した

先日行われた神奈川Ruby会議01 http://regional.rubykaigi.org/kana01/
ここで行われた最初のセッションがペアプロ大会 http://regional.rubykaigi.org/kana01/contents/02_pair_programing.html だったんだけど、ここで出す問題を作るという大役を仰せつかった。

いろいろ悩んだ結果、ひねりのない、ストレートなコンピュータサイエンス問題にした。

当日までと当日は、問題を用意したり、当日悩んでいる人にヒントを出したり、前に出て解説したり。
必死というほどでもないんだけど、あんまり周りは見えていなくて。

終わるまで気づかなかったんだけど、出題される側の方々のなかに、コミッタ様を始めとして数多くのスーパープレイヤーがいて、なんかすごい空間だったんだなと、畏れ多いなと、いう感じがした。

幸い。私の実装は好評だったみたい。ほ。

念の為に書いておくと。
当日壇上で説明した通り、私の実装は実行速度という点では全然よろしくない。
実装が簡単になるようにという方向にフォーカスしていて、実行速度には全然フォーカスしていない。

問題の解説は、ヒントという形で問題ページからリンクされているので、そちらを。
実装例も、問題ページ問題ページからリンクされているので、そちらを。
足りてないのは解題か。

解題

式の評価という、ストレートなコンピュータサイエンス問題になっている。
とはいえ、できるだけ迷わないように、いろいろ配慮した:

  • 演算子の意味が ruby とおなじ
  • 二項演算子しかない
  • 括弧がない
  • 右結合 / 左結合 のことを気にしなくていい演算子のみ
  • 定数はすべて正の整数
  • 計算結果が必ず正の整数になる

辺り。
配慮してばかりだと eval で終了、ということになるので、優先順位を変えた。
優先順位が違うというだけで、数式の評価に、それなりに真面目に向き合う必要が出てくる。

ruby で書くということがわかっているので、他の言語に対する配慮はないんだけど、正規表現もevalもない処理系だとだいぶ面倒になると思う。

私が作った他の問題

問題作成業は本業というわけではないんだけど、コミュニティから見える私は問題作成業者みたいになっているようにも思う。

CodeIQ

縁あって、CodeIQ に問題を出している。
https://codeiq.jp/ace/nabetani_takenori/
これを書いている時点で出している問題は、シンプルでどうということのない計算問題。
のように見えるでしょ?
なかなかうまく答えが合わず苦しむかもしれないし、どうということもなくスッと解けるかもしれない。

概ね月1問のペースで問題を出している。
過去問のうちの大部分は、このブログにあるよ。

どう書く

あと。これを書いている時点では満席だけど、オフラインリアルタイムどう書く
http://yhpg.doorkeeper.jp/
ってのもやっている。上記リンクから過去問がたくさん辿れるよ。

最後に

CodeIQ なんかもそうなんだけど、こういう場が与えられることに感謝している。それと、楽しんでいただけたのではないかと思っていて、それは本当に嬉しく思う。
ありがとうございました。
またなんかあったらお声お掛け下さい。