答案:時間帯重複チェック(Scala)
お題:時間帯重複チェック - No Programming, No LifeをScalaで解いてみました。
答案:時間帯重複チェック (Scala による Option モナド活用編) - akihiro4chawonの日記との一番の違いは、classをバンバン定義してimplicit defも使いまくって、難しくしてみたところでしょうかw
あと、for使ってません。foreach, map, flatMap, filter, filterNot only...。
慣れると意外と読みやすい?
長く見えますが半分はテストコードとコメントですし、
時間・分のバリデーションを行ってる部分
val HourRange = 0 to 23 val MinuteRange = 0 to 59 val SpecialCase = (24, 0) def isValid = (HourRange contains hour) && (MinuteRange contains minute) || (hour, minute) == SpecialCase
時間帯を分単位のRangeに変換してる部分
start.inMinutes to (end.inMinutes - 1)
時間帯aと時間帯bが重複しているかチェック
a duplicateWith b
とか結構直感的だと思います。
また、timeDuplicationCheckそのものの定義は10ラインしかないです。
どんなもんでしょう。