tryプログラミング、リモートワーク、田舎暮らし、音楽、etc.2011-12-31Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(後編)社内勉強会はじめにすいません、なかなかブログを書く時間が無くて前編からかなり間が空いてしまいました。第2回社内プログラミングコンテストの後編をご紹介します。前回までのあらすじ前回までのあらすじは大体以下のような感じです。Excelの列名変換問題で2回目の社内プログラミングコンテストを開催した。アルファベットから数字、数字からアルファベットの2題を出題した。予想以上に難しく、時間内に2問目(数字からアルファベット)まで解けた人はいなかった。そこで2問目は各自の宿題にして、説明会は後日行うことにした。詳しくはこちらのエントリをご覧下さい。tryまた、第2問の仕様はこんな感じです。入力された数字をアルファベットに変換する。問題1で作ったプログラムを拡張すること。AAちょっとした趣向を加えてみた今回はちょっと説明会に面白い趣向を加えてみました。これまでは僕は出題者という立場だったので、ランキング投票の対象者に含めていなかったのですが、今回は僕もランキング対象に含めてもらうことにしました。時間制限なしで答えを見ずに問題を解く、という意味では他のメンバーと同じ条件になるから、というのがその理由です。これまでは他のメンバーが評価されるのを上から見下ろしていたわけですが、今回は僕も評価されるわけです。このプログラミングコンテストの発起人は見事上位にランクされるのでしょうか?それとも・・・??動作確認&説明タイム今回の回答者は全部で12人です。時間制限なしはなかったので、全員が見事に正解!!・・・と思ったのですが、残念ながら一名だけバグありのプログラムでした。彼のプログラムでは26の変換結果が「Z」ではなく「AZ」に・・・。う〜ん、残念!Zの前後はバグが出やすいので要注意なんですよね〜。実は僕も最初はバグってました。他のメンバーの解答を見ると、パッと見た感じの書き方は大きく違っていても、説明を聞くとロジック自体はそれほど大きく変わらないような印象を受けました。一部には「えっ?そんなやり方でやったの!?」というような少々風変わりなロジックを組んでたメンバーもいました。ちなみに今回は時間短縮のため、動作確認用のシェルスクリプト/バッチプログラムも作ってもらいました。シェルやバッチを書くぐらいなら、次回からはいっそのことユニットテストも必須にしてしまった方が良いのかも、と思ったりもしました。投票&開票結果さて、今回もまた投票でベストプログラマを選出する時間がやってきました。基本的に負けず嫌いなので、なんとか1位になりたいと思ってたのですが、結果はどうだったんでしょうか・・・??はい、1位の人は前回、前々回も1位だったAさんでした!見事V3です!2位も前回、前々回と2位だったMさんでした!このお二方は不動のポジションなのでしょうか??そして、僕は・・・なんとか3位でした!ちょっと悔しいですが、なんとかベスト3に食い込めたので、ほっとしました。(でも悔しい・・・)ちなみに4位は前回3位だったKさんでした。3位の僕とは1点差です。ほんと、ギリギリの3位です。前回と前々回はAさんとMさんが3位の人に10点以上の差を付けていたのですが、今回は比較的票が分散していました。1位:17点、2位:15点、3位:12点、4位:11点、という感じです。時間をかけると、みんなのコードの品質はある程度均衡してくるのかもしれません。後編のまとめ第1回と第2回前編は時間制限があったので、スピードが重視されました。今回は時間制限なしだったので、メンバーはロジックをじっくり考えたり、リファクタリングしたりする時間を確保できたはずです。先ほども述べたように、今回は特定の人に票が偏らず、比較的分散したのは時間制限をなくしたのが原因の一つになってるんじゃないかと思います。実際の業務ではスピードと質の両方が求められるのは確かですが、コンテストとしては質をじっくり追求できる要素があっても良いのかな〜と思いました。今回時間制限がなくなったのはたまたま全員が時間内に解答できなかったのが原因でした。コンテストは時間制限なしにしても面白い、ということが発見できたのは怪我の功名だったかもしれません。今回も上位3人のプログラムを載せておきます。各メンバーに投票した他のメンバーからのコメントも載せておきます。1位の人が書いたプログラム最初の配列の定義が行数を食っていますが、メインロジック自体は比較的シンプルです。"@answer\n";}1位の人に投票したメンバーからのコメントシンプル。引数の自動判定ができるのにしなかったところ。