From a1c5b64423d5d5daa8b7fc0e3024c6ed3f02a178 Mon Sep 17 00:00:00 2001 From: Gattix Date: Thu, 14 Dec 2023 17:31:44 +0100 Subject: [PATCH] day14 part1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit really shitty solution that I don’t want to look at any more --- 2023/day14/day14.hs | 50 ++++++++++++++++++++++ 2023/day14/input | 100 +++++++++++++++++++++++++++++++++++++++++++ 2023/day14/testinput | 10 +++++ 3 files changed, 160 insertions(+) create mode 100644 2023/day14/day14.hs create mode 100644 2023/day14/input create mode 100644 2023/day14/testinput diff --git a/2023/day14/day14.hs b/2023/day14/day14.hs new file mode 100644 index 0000000..ff99d63 --- /dev/null +++ b/2023/day14/day14.hs @@ -0,0 +1,50 @@ +import Control.Arrow +import Control.Lens +import qualified Data.Map as M +import Linear.V2 +import Safe + +type Grid = M.Map (V2 Int) Char + +main :: IO () +main = interact $ show . day14 . parse . lines + +day14 :: Grid -> Int +day14 m = + sum $ map ((maxY -) . view _y . fst) (M.toList $ M.filter (== 'O') (moveAll m)) + where maxY = succ $ maximum $ map (view _y) $ M.keys m + +moveAll :: Grid -> Grid +moveAll m = foldl moveUp m os + where + os = map fst $ M.toList $ M.filter (== 'O') m + +parse :: [String] -> Grid +parse = M.fromList . concat . zipWith (map . f) [0 ..] . map (zip [0 ..]) + where + f x (y, z) = (V2 y x, z) + +unParse :: Grid -> String +unParse m = + concat + [ M.elems (M.filterWithKey (\(V2 _ x) _ -> x == n) m) ++ "\n" + | n <- [a .. b] + ] + where + (a, b) = (minimum &&& maximum) $ map (view _y) $ M.keys m + +findLetter :: Char -> Grid -> V2 Int +findLetter c = fst . head . filter ((== c) . snd) . M.toList + +filterLowestDot :: V2 Int -> V2 Int -> Char -> Bool +filterLowestDot (V2 x1 y1) (V2 x2 y2) c = c /= 'O' && x1 == x2 && y1 > y2 + +moveUp :: Grid -> V2 Int -> Grid +moveUp m k = swapCoord m newCoord k + where + line = M.toList $ M.filterWithKey (filterLowestDot k) m + newCoord = lastMay $ takeWhile (\x -> snd x /= '#') $ reverse line + +swapCoord :: Grid -> Maybe (V2 Int, Char) -> V2 Int -> Grid +swapCoord m Nothing _ = m +swapCoord m (Just (v2, c)) v1 = M.insert v1 c $ M.insert v2 (m M.! v1) m diff --git a/2023/day14/input b/2023/day14/input new file mode 100644 index 0000000..da5d670 --- /dev/null +++ b/2023/day14/input @@ -0,0 +1,100 @@ +..#.#O##....O.O#O#O...O.....O........OO...#OO.O..O...O..O...O.....O....#O#..O#.......O.##..O....#..# +.O#O.#O.O#OO..#..O....OOO#....#.O#O..OO#..O...OOO.#.O..#..O#OO.#O..O#...##.#O#..OO#O#O.....#O.O.OO.O +...O..O.....#..#.O...O##.O...O...OO..#O.OO..###.OO.....##O.#.#.O.#.......O.....O...O...#.....O.#.#O. +.#..O.....#..O..OO.O#.....#OOO...OO..#....OO#..O.......................O..#.#O....#.OO.#..O.......#. +......O.##O......##.#.#..O.##............#.O.O.O..O#O.#.O....#....#....#OOO....O#O.O..#..#....O#..O# +...O#..O...O.O#.O#O...#..O.O.....O..#..#O.#......##..OO.#....#.....###..#...#.O.#.OOO.O.....#O...#O. +.#O##.#O.O.##O.##.#O....#..O..#......OOO..OO..#.#.#..#O...#O.#.#.O#O...#.#O..#.#....O........OO..... +##......O##.#.......O.#..#OO....O..OO.O.O..O#.....OO..O.O....#.O................#O...#O.#...O.O....O +...OO.O....##.##...##O...O..O..O#...O.#....#..O...O..#...O....#...O#OO..#.O.O.#.#O#O.O.......#.#O.#. +..O...#......#.....#.#.....#...........O..O..##..#.....#.O#.......O.##.....O.OO..#..O..#..........#. +.#.O...O#O#...OOO............OOO...#O#...#.....#OO.#.O..#OO.##.OOO..#O...#O#...O.O..##.#..O.O#O...O. +....O...O#OO..O..O.#.....###....O#..#OO...##.#O.#.#.O.O...OO.O....#..O..O..OOO.#......O...##OOO.O... +.OOO.....#.O..#..O.O..O..#O..#O#O.#..#.O.........O......#.#......O..#O.........OO#O..OOO......O#.O.. +O.O.#O.....O.O..##......O#....O#.O..##.....O.#..###O.O...#O.....##..#O..#O.O.#.O.OO#....O...OO#....O +.O#O..#...O.#...O......#.....O......OO...O.#...#..#.O.#..O.#...#.......#.#....O#..OO..O#O...O..O..#. +.#..#...#.OOOO..#.#.O...O##O##....O..##..OO..#OO#..##.OO#.....#............O..#O....OO.#..#......#O. +.....O......O..........O#...O...#.O#O...O.#...O.......O#..OOOO......O..O..#.#....O....#.O..O.###.#.O +.#OO.O#..O.O#...OO...##OO.O....O.O.##O.......O.#O...OO#O#...#.OO.#.O.O..OO.O.O.#...OOO..#...O.O#.#OO +OO.#.##O..O#.O.#..O#O..#.O#.....O#..O......OOOOO#..O#.#......O.O..OO....##.##O.OO#O#.#.#......O..... +.O.....O.O.#....OO.O..#..O##.#.....#.#......#..O...O.#..#..O#.O..O..##....##.O..#O....#...O#..O.#... +....OO#OO..#..O..O..O#.##O.OO.O.OO.##...#..#..O........#.O......O.#OO#...........#...O#O##.......O.. +#.#O........O...##..........#.###.OO#O.O#.....O#.....#.OO.#..OO..#..O...O...O..OO.OO..#OO..O..##.OO. +..#...O.....O.OO#OO##....#O#..#O...O#.....#O.O.O.......#...O..O.O#.O.....#O..OO#...O...O.OO.O.O....# +OO.#O..O..OOO.....O.....OOO.#........O........OO..##OOO...#.OOO..OO....#..#..........O...#..#.O#.#O. +#.#O##.O#.#O#.#.OO...O.#O.......O...#O......#.#..O##......#.....O.....O##..#...#.....#..O...O......O +O.......#...O...O.#O#.O...#..O..#.OO...OO.O.#.#........#OO.#..OOO#...#O#O......O.....##.O.#..O..#.#. +.#O....O...#OO..O........OO.#O...#...#O#O.O#.#...O....O.....##.#.#..#.#....##.#....#........#O...#.# +.......O........#.##.........#.O#.O.....OO..O..#.OO.##.O....#..O..OO.#O#.#....O......O..O#OO........ +..#.O...#.....OO.O.......#...O...O##O..OO.....O.O.#.#....#....O....#O....#..#O.OO..O.#O......O...O.. +.......O#.O.#O....OO##.......#.....##..O.OOO...O...OO#OO#.O#....#.#.O..#O.....OO..#..OOO....O#...O#O +......#.O##....O..O...O#...O#.O....O.#O#O#.O..#.O......O#......O.#O.#..#.O.......OO.#.#.O#.OO......# +..#.OOOO.#...#O#......#...#OOO.....O..#...O.......#.#O.O...#.O#..O..O....##...........O....O#.O#.O.. +...#.#...####.#O.......O.#O....OO..O.#....OOO.....#.O..OO.#O#.O.O##O#...OO....O.O..#.OO..........##. +O.O#..........O#.........OO.....#.O....OOO.O...#.....#O....#..O.#....O#OOOO.#...#.#O.O#.OOO..OO#.O.. +O......O.#....O#O..OOO##..........#OO.........#..O..O.....O..#O...##.OO.O.O........O.O...OOO......O. +#.....O........#OO.###O..O....#OO.##O#OO.....OO.#O.......#.......#..O..O.........#...O....#.#...O.O. +.#O....O##.O#....O.#.#..O#.#..........#........#..#O.#O...O.OOO.OO..##.#....OO.O..O#..O.#.#.......O. +...O.O....O##OO#..#..#.....O..#..OO..##.O.#.............O.......#.O.........OOO#.#...OO##...#.#..... +OO.O..O......O...#.O#..##O...O.....#.##.....O##........#.OO#.O..O.....O#.......##.O.OO.O##.O........ +.O#..OO.#O...O...#..O.O.O..##........OO.O.....O.O#.#..OO.O...O.OO..O.O#OO..O..O.......O......OOOO... +..O....#..O..OO.#.##O......#.#.........OO.....O....#..O.OO...OO.#O.#O....#........O....#O#...O#O.#.# +....O...O.OOO.O...OOO....O.#....##.OO....O.O.##............O..#..OO....O....#......#....OO...O#OO..O +.O.OO.....##.OOOO.#O#.......OOOO.O..#.....#O#O.........##OO.#.....O.O.#..##.O#..#O....#..O#...O..#.. +#....##O#.O#......O...OO.....O..O....##.O##.....O##O..OO..##O.###......#....#.#O....###.......#..... +...##..O.O.#...OOO...OO#.O....OOOO....O....#O..###.#....O..OO....#.....O#O#.O.....O.....O..#..#O..## +...OO.O...O.O..O..#.#OO..O#..OOO....#.O..#O#.###..O##..#.#..#....O....OOOO....#O.#.....O#O.....##... +.........#...O..O#.O#..#..OO..O..#...#......#..OO..O..O.O..OO.O.....O.................O...O#.#O..... +#.##...O.......#.#O#.....##O#.#..O.O.......#..O......O..O#.OOO#..O..OO#...O.O..O.#O.#.....##..OOOO.# +.O...O...###..OOOO.#.##.O.#..#O#.O.#O.#.O#O#......#.O.#OO.##.....O...O#.O##.#..#...OO..O...O..##...O +..##......O.#OO......#.O...#.......O##.........#.O.#....O...O....#O...O#O#.OO#.O...OO..O#....O.OO..O +.........#...#.O..#.#........##.O.....O.#...##.#.#.O##...##..OO...#.........#..O.....O...O....#.O... +.O.OO.#..O.OO..OO..O........O#.#O..O..O...#O.##.......#..#.....#O#..O....O.OOOOO#...O..#......O..... +...O..O....#O...O......#.OOO.#.#......O##O#..##O..OO#O.....O..#.#...O.O##O.OO.OO...........O..###... +....#.O..#..O#O.....#.OO.....##O....O#....#...O..OO.O...##..O.#O...OO.#..OO.#O.O.O..OOOO......O..O#. +O.#.....#...O#O..O##....#......#.O.O.....O#....#........##.O...O...O..#.....#O....O..O....#.#...#... +....O...O...O.OO.O##......#.......O.#....#.....#O.O...O#O.####.##..........#.#OO...........#.O.O#... +#.......#...O#.O..#O...#..#.#..O..###.OO.#..O.#..#..O#....###O...O..#..#......#O#.OO#.....#O#....... +.....#..#..O#.#.#O.....O..O...O.O#....OO......#O#..#O....#.#O#....O##.O.....#O...........O...O.O.#.. +.#OO##.......O....OO.OO.....O.O.....OO.........#.#O.O.O.O.OO......#O...#O#.....OO.OO.O.O.#..#..#..#. +.O...OOO#O..O.##.....#.#O#O.O.#O.....#.OO#.O...#O....OO..#...OO#.O.....O...O....O..O#...##.OO##..O.O +#.#.#...O........O##.#....#.....#..........O.#...O.....##O....#...OO..##......#...OO.O#OO......O.O.. +......#...O..##...O........O#.......#.......OO.##..#...#..#.....#...O#.#O........O#.O............... +...O..O....OOO...#.......O..OOO##.O.O#....#O..O.#O#...O.#.O..O.O#O..#...O..O.O.OO.O.#..#O..#O#..#..# +O.O..O#..O...O...O.O....##..OO#..O#.#OO##...OO..#OO....#..#..O.........O..O....#.#...OO#.#..O....O#. +.#.##.#..O.O#....#....#O..#O.O....O...#.#.OO..O.OO..#.#O..OOOO#..O..##O.#..O##O..O......#.O..O..O..O +O#OO..O.....O...O...#...#...#.....O...#.O...#.#O...O..O.###......#O.........#O..........O..OOO..O.O. +..#.#.O.....O....#....O..#.OO......O#.....O....O#.#.#...#O.O#OO..........#..#.O....O........O..O..O# +..#........##O#O.#....#O.O....OOO..#.O.....#OO.O...#....O#...##O#.O...O.#OO#.O.OO#..OO.....OO..#O... +...OO.#O#.#O.......OO#.O..O..OO...O..##O.#O.......#...#.O..O##O...O..O#.#....OO.###...#..O#...O..O.. +.O#O#....#.....###..#.#..#...#O...#..O#.....##.OO.....OO...O....#O.O........##...O.....OO#O.....#... +#.....OOO..#....O.O..........#.......O...#....O.O...O........O...#O##.O.O#OO....#.#..O.O.##........O +O..OO...#OO.#O........#...O#OO#..O....#......OOO..OOO#...OO.O....##..#...O#...#.#..#O..O...##..##.#. +OO..#O#..O...#......#.#.#O#.....#..OO......OO#.OO..#.....O...O#....#O..O...#O...#.OO.##.###.....O..O +.#.O......#...OO##.#.......O...O.......O#..O#...#..O#..O#O#..O.#O..OO.O..O.#..O..O#......O....O..... +#..#O#O.#.O...O...#...#.#.#.#O....O.O..#O........O#..#.#...O.O.##.....O.O.O....OO..OO.....##.#O..O.. +...#......O#...#..O#O.O...#..OOO....#O#...#.....#..O#....#O......#.O..O.#O.......O#..O.#......O.O... +..O.....O...O.....O#...#..#OO..##O.O.........OO...##.O.#..#.##O.O.O#..O#.#.#OO#......O#..#.#.O#O#.O. +##..OO.O..##O..O...O.O.....#.O#.O.OO....#..##O.O.##.O.#....#......O........##.....OOO.O.#.###....O#O +..OO..O.OO..#..O....O..O.###.#..#..#..#......OO#O#..#.#.#.OO#.#...O.....#..O#...............#....O.. +.#O.O..#...#.#OO..O.........O.##.#.....OOO.O.O.......OO##.##.OO.#......OO..O.O...#.....O...#O.#.O.O. +.O.O#O...O.O#O.O..O.O.O.O..O.O.O...O.#.#....#....#..O.#O.#........#.#...O.......#...O..O...O..#O...O +..O...O.O...O.#..........#O.O..........#......O...#OO..O..O##..O......O...#.O...O..#......OO..O....O +..#........#..O..O..#...#O...O.O...##....O..#O.#.#.#......O#.O....##O...O.OO.#...O.OOO.#..OOO...O... +..OO..O#...O..O#O..O.##...#.O.#O###.O#...O.###...O....O...#...#..#.#....#...O..O....O...####O.#OOO.O +.O....#.#O#.O.#.#.........O#.#..#.O.....O####.O.OO.O.O#O..O......O.#.OO.O.......OOO..#........OO..#O +#O....#...O..O.#..O.O#.O..OO#OO.O#..#.#....#.O...#..#O#.O.O.O...O#.O#...#O..O..O..O.O...#.#.#O....O# +#.....##...O.O..OO..O#.....O...........#.....#O#O......O..OO.....##..#...#O..#.O.........O.....O.... +#...#.#O#O..O...OO.O.O.O..#O..##..O..OO.....#OO.#.#....#.....O.#....#....#...#O....O.#.##..#O.O..#.. +O.##....O..O.#.OO.....#..OO#..#.OO.....#O..OOO#.......#.#....O....#.....OO....#.OO.....#.#..O...O.#. +..O...O#..O..#...OO.......#O.O.OO..OO.O...O.O.O.#..#OOO.#.....O....O..OO........#.....O.O#.O.O##.... +....O..#.#O...#.O....#O.OO.#..#.O...##..#......#OO..#....#....#.O..#OO#.#...O..O..O#.O.O#...O##...OO +.O.O....#...O#.O.......#.O........#..OO.#O...O##O......#.O.OOO......#OO.O.O..O###..#.O..OO.O.O.O.... +O.......#..O#......O.O#..O...O..O..O..O#..##....................O.#...........##....#..##.#...#O.### +..O...O.......O....O..OO..O.#......#.......O#O.....#..##..O.O#.....O...O.#OO....O.#.O.O.#O.#..OO..O# +#OOO....O.....O..O.O.....OO.OOO..#O.O..O..#O.#.....#.O...OO.O.......#..#O...O.....O.#...O#...O...OO. +O.#..O..OO.OO#O....#.O.......O....O....#..O...O.....OOOOO#.#...O#.#O.O..OO#O.O.......#.....O...O.OO. +.O#O.O....O.#OO##......O.......O#.#..##...O......#.#........#O..#.##..#.O.....#..OO..#..#.O.#.O...#O +.OO....#..O..O#.O.#O.........O.....#OOO............OOO..#.....#...#.O..##.OO....##...O#O....OO#.#.O# +...O.##.....###......O#...O.......#.#...#.......O.....###..OOO...O.O..O..O#.O....#O....#.#.......O.# +OO#....##..O.#......#OO..#....#.#.O.........#.OOO....OO.###....O#.#..#O.O.O..#...OO#.OO#.....O#O#... diff --git a/2023/day14/testinput b/2023/day14/testinput new file mode 100644 index 0000000..5a24dce --- /dev/null +++ b/2023/day14/testinput @@ -0,0 +1,10 @@ +O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#....