AOC Day 1

This commit is contained in:
Anupam Jain 2024-12-02 19:21:31 +05:30
parent 9395bea26a
commit 130d334729
3 changed files with 2043 additions and 0 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,43 @@
module AOC.Year2024.Quest01 where
import PCC.Lib
import Data.Array (transpose, zipWith)
import Data.Array as Array
import Data.CommutativeRing ((*))
import Data.Eq ((==))
import Data.EuclideanRing ((-))
import Data.Foldable (sum)
import Data.Function (($), (<<<))
import Data.Functor (map)
import Data.Ord (abs)
import Data.Semigroup ((<>))
import Data.Show (show)
import Data.String.Utils (lines, words)
import Data.Tuple (Tuple(..))
import Data.Unit (Unit)
import Effect (Effect)
import Effect.Class.Console (log)
--------------------------------------------------------------------------------
-- Write your solutions here
part1 :: String -> Effect Unit
part1 input = do
let datums = map Array.sort $ transpose $ map (Array.mapMaybe parseInt10 <<< words) $ lines input
let result = case datums of
[left, right] -> sum $ zipWith (\a b -> abs (a - b)) left right
_ -> 0
log $ "Part 1 ==> " <> show result
part2 :: String -> Effect Unit
part2 input = do
let datums = transpose $ map (Array.mapMaybe parseInt10 <<< words) $ lines input
let Tuple left right = case datums of
[left, right] -> Tuple left right
_ -> Tuple [] []
let result = sum $ map (\n -> n * countMatching (_ == n) right) left
log $ "Part 2 ==> " <> show result
--------------------------------------------------------------------------------