diff --git a/app/Main.hs b/app/Main.hs index 362fe14..5c28b90 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -30,4 +30,4 @@ import qualified Day24 import qualified Day25 main :: IO () -main = Day10.main +main = Day11.main diff --git a/src/Day11.hs b/src/Day11.hs index 863d28f..dc49209 100644 --- a/src/Day11.hs +++ b/src/Day11.hs @@ -1,6 +1,23 @@ module Day11 (main) where +import Data.Char (digitToInt) +import Data.List (maximumBy) +import Data.Ord (comparing) + +indexToCoord :: Int -> (Int, Int) +indexToCoord i = (1 + i `div` 300, 1 + i `mod` 300) + +powerLevel :: (Int, Int) -> Int +powerLevel (x, y) = (subtract 5) . digitToInt . (!! 2) . reverse . show $ ((x + 10) * y + 7672) * (x + 10) + +powerSquare :: Int -> (Int, Int) -> Int +powerSquare size (x, y) = + if x > 300 - size + 1 || y > 300 - size + 1 then -5 + else sum [powerLevel (x', y') | x' <- [x .. x + size - 1], y' <- [y .. y + size - 1]] + +part1 :: (Int, Int) +part1 = indexToCoord . fst . maximumBy (comparing snd) . zip [0..] . map (powerSquare 3 . indexToCoord) $ [0 .. 300 * 300] + main :: IO () main = do - input <- readFile "input/11.txt" - print input \ No newline at end of file + print part1 \ No newline at end of file