From bfa4f0a305cc22bd9cb94416381b67909ea5773a Mon Sep 17 00:00:00 2001 From: Arranun Date: Sun, 8 Dec 2019 14:34:22 +0100 Subject: [PATCH] Day8 --- day8.hs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 day8.hs diff --git a/day8.hs b/day8.hs new file mode 100644 index 0000000..09a951d --- /dev/null +++ b/day8.hs @@ -0,0 +1,32 @@ +import Data.List as List + + +main = do + content <- getContents + let input = map (read . (:"")) content + let layers = getLayers input (6*25) [] + let min = minimum (map (\x-> countOccurence x 0) layers) + let layer = head (filter(\x-> countOccurence x 0 == min) layers) + putStrLn (show $ (countOccurence layer 1) * (countOccurence layer 2)) + let picture = foldl combineLayer (head layers) (tail layers) + mapM putStrLn (map show (getLayers picture 25 [])) + + +getLayers :: [Int] -> Int -> [[Int]] -> [[Int]] +getLayers xs x ys= do + if (length xs) >= x + then do + let split = splitAt x xs + getLayers (snd split) x (ys ++ [fst split]) + else ys + +countOccurence :: [Int] -> Int -> Int +countOccurence xs x= length $ filter (x==) xs + +compare :: Int -> Int -> Int +compare 0 y = 0 +compare 1 y = 1 +compare 2 y = y + +combineLayer :: [Int] -> [Int] -> [Int] +combineLayer xs ys = zipWith Main.compare xs ys