お盆最終日の8/17の午後、Nagoya.php vol6 へ行ってきました。
今回は、現在の勤務先であるカルテットコミュニケーションズが会場を提供していました。
いつものオフィスに開発部員よりも大勢のPHPerが集まってわいわいしてる光景は、なかなかレアだったと思います!
自己紹介が終わった後は早速、後藤さんから問題が提示されます。
今回の問題は
「レッスンは何曜日? 〜 横へな 2014.5.9 問題」でした。
Nagoya.phpに来たことが無い方のために補足しておくと、Nagoya.phpではフレームワークや画面を想定しない生PHPでプログラムを書く時間が恒例となっています。チーム戦ではなく個人戦(各自一人で取り組み)ですが、特に勝敗はつけないので、書き終わった人に質問したり、逆に困ってる人を助けたりするのは大いにありです。(私は今回、解くのにいっぱいいっぱいで助ける側には廻れませんでしたが…) 大抵は雑談しながら書くので、IDEのオススメやら実装のコツがぽろぽろ拾える時間でもあります。
私の書いたもの
https://github.com/77web/Nagoya.php-vol6
コミット履歴に沿って振り返ると、下記のような感じでした。珍しく(?)、中からアプローチでなく外からアプローチです。
* PHP.Skeletonをcreate-project
* プロジェクト名Nagoya.Phpでcreate-projectしたらnamespaceがNagoya¥Nagoyaになってたのを修正
*
入力値のパース→実処理→出力値のフォーマット という流れと処理に必要なデータクラスを考え、メイン処理の流れとテストをコメントアウトした状態で作成 ここで申し込み順保持の考慮漏れがあったばかりに後で苦労する羽目に…
*
入力値のパースを行うクラスを作成
*
実処理のクラスを作成(定員は考えず第一希望ごとに割り振るだけ)
*
出力のフォーマットを行うクラスを作成 この時点でテストケース1,2辺りは通るようになった
ここからは実際に出題者に与えられたテストケースの実行結果を見ながら仕様の不足点を埋めていくことにします。
*
テストケース3で出力フォーマットの「社員番号昇順」が抜けてたのに気付き、実装
*
テストケース6で実処理に「定員オーバーしたら受講できない」を実装 この時点で希望順→応募順にできたつもりでしたが…
*
テストケース11で実処理に「より希望順の高い人が後から来たら追い出される」を実装 希望順→応募順にはなった
ここからは現場で解決できず、自宅に帰ってから追加で書いた分です。
*
テストケース18で実処理の「同じ希望順なら応募順の早い人」判定を修正 同じ希望順の時に応募順が前の人を追い出してしまっていたのを修正
*
テストケース17で実処理の追い出された後の再アサイン時に応募順がわからなくなっていた問題を修正 社員データクラスに応募順を保持していなかったので、一度アサインされて希望順で追い出された場合に応募順がわからなくなり、正しく希望順→応募順になっていなかったのを修正。応募順まで入ってくるとそれは既に社員情報(Staff)じゃないので申込み情報(Entry)にデータクラス名も変更しました。
予定では一時間程度の予定でしたが、私も含めて苦戦した人が多かったせいか大幅に伸びて二時間になりました。
というか、うーんうーんと頭を捻ってるうちにうっかり予定の時間が過ぎていましたw
他の方のコード(わかってる分のみ)
*
@hidenorigotoさん
*
@ounziwさん
*
@qckanemotoさん
似ているようで少し違ったりして面白いですね!
結局、LT予定だった時間まで問題を解く時間に使ってしまったので、全員が懇親会参加希望ということもありLTは懇親会で行うことになりました。
LTは
* @hidenorigotoさん 「Symfonyの実装パターン」(スライド公開予定なし) 7月のSymfony勉強会の再演でした。行けなかったのでありがたかったです…!
* @qckanemotoさん 「WordPress.Skeleton」(
スライド) 鬼門のWordPressを少しでも楽にというお話。
* 私から 「CoderDojo Nagoyaへのお誘い」(スライドは全く内容が無いので公開予定なし) CoderDojo Nagoyaのメンターと参加者募集。説明は抜けるわMacBookの電池が無くてデモできないわで、素面の割にいつも以上にグダグダでしたorz 思いがけず、関西から参加のホタルマルさんがCoderDojoのメンター経験者ということで、色々会場や人集めの話を聞くことができました。満足。
参加された皆様、お疲れ様でした!
次回は11月のどこかの土日で開催予定です。面白そうだと思った方は是非是非いらしてみてください〜。