Advent of Code solutions
at main 20 lines 621 B view raw
1import Data.List 2import Data.Ord 3 4split :: Eq a => a -> [a] -> [[a]] 5split x ys = splitInner x [] ys 6 where 7 splitInner _ [] [] = [] 8 splitInner _ r [] = [reverse r] 9 splitInner x r (y : ys) 10 | x == y = reverse r : splitInner x [] ys 11 | otherwise = splitInner x (y : r) ys 12 13main :: IO () 14main = do 15 [arrival, buses] <- lines <$> getContents 16 let 17 start = read arrival 18 intervals = [read n | n <- split ',' buses, n /= "x"] :: [Int] 19 waits = [(n, n - start `mod` n) | n <- intervals] 20 in print . uncurry (*) $ minimumBy (comparing snd) waits