+++ /dev/null
-module Main(main) where
-
-import Data.List (nub)
-
-input = "11100010111110100"
-disk1length = 272
-disk2length = 35651584
-
--- input = "10000"
--- disk1length = 20
-
-main :: IO ()
-main = do
- part1
- part2
-
-part1 :: IO ()
-part1 = putStrLn $ checksum $ take disk1length $ expand disk1length input
-
-part2 :: IO ()
-part2 = putStrLn $ checksum $ take disk2length $ expand disk2length input
-
-
-expand :: Int -> String -> String
-expand len a
- | length a >= len = a
- | otherwise = expand len $ a ++ "0" ++ b
- where b = map (invert) $ reverse a
- invert '0' = '1'
- invert '1' = '0'
-
-checksum :: String -> String
-checksum digits
- | odd $ length digits = digits
- | otherwise = checksum $ map (checksumPair) $ pairs digits
- where checksumPair p = if (length $ nub p) == 1 then '1' else '0'
-
-
-pairs :: [a] -> [[a]]
-pairs [] = []
-pairs xs = [p] ++ (pairs ys)
- where (p, ys) = splitAt 2 xs