いわゆる卍研究所。
In: Project Euler
19 12月 2009Project Euler 番外編(?)
妻から レイトン教授と魔神の笛 のナゾ#042 が解けないとヘルプ要請アリ。
う〜ん、候補は3つか・・・答えは22:29だろ。あれ?不正解??
ん?これは出題ミスだろ、とおもったら案の定。
レイトン教授と魔神の笛 : ナゾ042についてのお知らせ
さて、せっかくなのでProject Euler風にコードを書いて解いてみる。
角度が大きい順に5つリストアップ。Clojureで実装しました。
(ns euler.layton042) (defn long-hand-angle "Return angle of long-hand from noon." [minute] (* 360 (/ minute 60))) (defn short-hand-angle "Return angle of short-hand from noon." [hour minute] (+ (* 360 (/ (rem hour 12) 12)) (* 30 (/ minute 60)))) (defn angle-clockwise "Returs angle fromm short-hand to long-hand clockwise." [hour minute] (let [diff (- (long-hand-angle minute) (short-hand-angle hour minute))] (if (neg? diff) (+ diff 360) diff))) (defn three-digits-in-a-row? "Return true if hh:mm is like aB:BB or AA:Ab." [hour minute] (or (and (pos? hour) (zero? (rem hour 11)) (= (quot hour 11) (quot minute 10))) (and (zero? (rem minute 11)) (= (quot minute 11) (rem hour 10))))) (def sorted-hour-minute-angle (sort-by :angle > (for [hour (range 24) minute (range 60) :when (three-digits-in-a-row? hour minute)] {:hour hour :minute minute :angle (angle-clockwise hour minute)}))) (println (apply str (take 5 (map #(format "Time = %d:%02d, Angle = %.1f\n" (:hour %) (:minute %) (* 1.0 (:angle %))) sorted-hour-minute-angle))))
Time = 22:29, Angle = 219.5 Time = 22:28, Angle = 214.0 Time = 15:55, Angle = 212.5 Time = 23:33, Angle = 211.5 Time = 22:27, Angle = 208.5
うん。スッキリした。
私 manjilab のポータル的サイトになっております。日々気付いたこと、考えたこと、発表したいものを載せていきます。