時間帯重複チェックについてひとこと
はじめに
お題「時間帯重複チェック」は昔、実際の業務で私が実装した経験をもとに作成したプログラミングお題です。当時はJavaでコードを記述していました。個人的にこのお題の面白いと思っているところとしては「内容が単純で仕様がすぐに理解でき、簡単に実装することができる点、しかし簡単に実装すると意外と泥臭くなってしまうため、その後のリファクタリングが楽しめる点」の2点であると思っています。またこれらを実現するために、壮大なクラスを作って挑むというのも楽しみ方の一つであると思います。
基本編
基本編の方は単純に二つの時間帯がかぶっているか?をチェックするお題となっており、簡単にチェックを済ますだけであれば、
例) 時間帯A と 時間帯B の重複チェック
時間帯Aの終了時刻 > 時間帯Bの開始時刻 AND
時間帯重複チェック - No Programming, No Life
時間帯Aの開始時刻 < 時間帯Bの終了時刻
という計算からも求めることが可能です。
あとは、入力値のエラーチェックを行うことくらいでしょうか。
応用編
さて、実業務で登場してきた内容をさらに練り込んだのがこちらの(応用編)となります。実業務では実際WEBページ上に20個の時間帯入力フォームを用意し、それぞれの時間帯が全て重複していないかをチェックする必要がありました。設問では
仕様変更の内容は以下のようなものでした。
- -
時間帯は二つではなく、複数指定可能として欲しい。
また、重複していた場合、その時間帯を時間順で教えて欲しい。お題:時間帯重複チェック(応用編) - No Programming, No Life
- -
として、複数時間帯対応を言い渡されるというあまり嬉しくない(笑)状況としてリアリティを追求しております。
後に24時間すべての時間帯が重複せずに選択されているかのチェックも
時間帯重複チェック - No Programming, No Life
しないといけなかったという裏事情もありました。
実際は最大で20個の時間帯を利用して24時間フルでかぶりなく選択しているかをチェックするためのチェック処理が時間帯重複チェックだったのです。応用編で求められている重複している時間帯をすべて返却するというのは、WEBページでチェックボタンを押下した際に時間帯重複があれば、それらの時間帯をアラートでユーザに伝える必要があったからです。
おわりに
このように実際にありそうな*1プログラミングのお題を通して、ある言語の実装方法を考えていくことで、その言語に対する知識がより深まると考えています。
4月から新たにプログラマ・システムエンジニアとなる新人の方々などにも是非解いてみていただきたいお題となっております。教育担当者の方、いかがでしょうか(笑)
*1:あったんですけどね。