頭の体操
CodeIQ ホリエモンからの挑戦状
https://codeiq.jp/magazine/2015/07/26213/
何故か体調を崩して頭ふらふらのときに解説編の記事を見てHaskellでコードを書いていたので記念メモ。
module Main where import Control.Applicative import Data.Set (fromList, member) main::IO () main = prog <$> getInputs >>= print -- main = print $ prog (10000, [1..5000]) prog :: (Int, [Int]) -> Int prog (ln, xs) = length $ [(a, b, ln - a - b) | a <- [x | x <- xs], b <- [x | x <- xs, a < x, x < ln - a - x, member (ln - a - x) $ fromList xs] ] getInputs :: IO (Int, [Int]) getInputs = (,) <$> readLn <*> (readLn >>= readContents) readContents :: Int -> IO [Int] readContents n = take n <$> map read <$> lines <$> getContents
ghcの環境が壊れててそれを戻すだけで1時間以上かかった記憶がある。あとリスト操作部分よりもIO操作とApplicativeの使い方調べるのに時間がかかって、問題にある「想定時間10分」は余裕で超えた。1時間以上はかかった気がする。
そして https://gist.github.com/yancya/3c5fa7c0f09ad85f5230 こちらのRubyより遅い。リストのindexを使ったりListじゃないものを使えば速くなりそうだけども放置で。
http://www.sampou.org/cgi-bin/haskell.cgi?%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%CA%D1%BF%F4%A4%AC%CD%DF%A4%B7%A4%A4%CD%FD%CD%B3%A1%A9
こちらを読み返しつつの練習。