X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=advent15.hs;fp=advent15.hs;h=0000000000000000000000000000000000000000;hb=7267c0fa74db510564dc59587dd076372640114f;hp=27793c14b58618c03598a7d1d09e22d7345cf6cf;hpb=b66f0f79e01057fcb153ac16ce13ff50943a6d02;p=advent-of-code-16.git diff --git a/advent15.hs b/advent15.hs deleted file mode 100644 index 27793c1..0000000 --- a/advent15.hs +++ /dev/null @@ -1,41 +0,0 @@ -import Text.Parsec -import Text.ParserCombinators.Parsec.Number - -type Disk = (Int -> Bool) - -main :: IO () -main = do - text <- readFile "advent15.txt" - let disks = successfulParse $ parseIfile text - part1 disks - part2 disks - -part1 :: [Disk] -> IO () -part1 disks = print $ head $ filter (canFall disks) [0..] - -part2 :: [Disk] -> IO () -part2 disks = print $ head $ filter (canFall disks2) [0..] - where disks2 = disks ++ [diskify 7 11 0] - -canFall :: [Disk] -> Int -> Bool -canFall ds i = all (\d -> (d i)) ds - - -instructionFile = instructionLine `endBy` newline -instructionLine = diskify <$> (string "Disc #" *> int) - <*> (string " has " *> int) - <*> (string " positions; at time=0, it is at position " *> int) - <* (string ".") - -diskify :: Int -> Int -> Int -> (Int -> Bool) -diskify n size pos0 = (\i -> (size + n + pos0 + i) `mod` size == 0) - -parseIfile :: String -> Either ParseError [Disk] -parseIfile input = parse instructionFile "(unknown)" input - -parseIline :: String -> Either ParseError Disk -parseIline input = parse instructionLine "(unknown)" input - -successfulParse :: Either ParseError [a] -> [a] -successfulParse (Left _) = [] -successfulParse (Right a) = a