Day8
This commit is contained in:
parent
6cb104199c
commit
bfa4f0a305
|
@ -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
|
Loading…
Reference in New Issue
Block a user