summaryrefslogtreecommitdiff
path: root/2023/day05/Main.hs
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2024-05-17 15:41:55 +0200
committerOrangerot <purple@orangerot.dev>2024-05-17 15:41:55 +0200
commitc6075f736e67e47b940abb9c1a0c54753d4b55b8 (patch)
tree69d827646e615e00f91ef54361cc1701e4f0eff7 /2023/day05/Main.hs
parenta1895fe157e06ee4d119576163ea76390b3d402c (diff)
AoC 2023HEADmain
Diffstat (limited to '2023/day05/Main.hs')
-rw-r--r--2023/day05/Main.hs24
1 files changed, 24 insertions, 0 deletions
diff --git a/2023/day05/Main.hs b/2023/day05/Main.hs
new file mode 100644
index 0000000..e7c71e8
--- /dev/null
+++ b/2023/day05/Main.hs
@@ -0,0 +1,24 @@
+import Data.List.Split
+import Data.List
+
+toMapFn :: [(Int, Int)] -> Int -> Int
+toMapFn map seed
+ | Just (d,s) <- find (\(drs, srs) -> srs == seed) map = d
+ | otherwise = seed
+
+main :: IO ()
+main = do
+ lines <- lines <$> getContents
+
+ let sections = splitOn [""] lines
+ let seeds = map read $ tail $ splitOn [' '] (sections!!0!!0) :: [Int]
+
+ let maps = map (\(_:xs) -> (map (\l -> map (\i -> (read i) :: Int) (splitOn [' '] l)) xs)) (tail sections)
+ let myMaps = map (\m -> concat (map (\[drs, srs, r] -> zip [drs..(drs+r)] [srs..(srs+r)]) m)) maps
+ let myMapFns = map (toMapFn) myMaps
+ let myFn = foldr (.) id (reverse myMapFns)
+
+ print (minimum (map myFn seeds))
+
+ -- mapM_ putStrLn lines
+