Done day 1
authorNeil Smith <NeilNjae@users.noreply.github.com>
Sun, 1 Dec 2024 10:18:39 +0000 (10:18 +0000)
committerNeil Smith <NeilNjae@users.noreply.github.com>
Sun, 1 Dec 2024 10:18:39 +0000 (10:18 +0000)
advent01/Main.hs [new file with mode: 0644]
adventofcode24.cabal
app/Main.hs
src/AoC.hs

diff --git a/advent01/Main.hs b/advent01/Main.hs
new file mode 100644 (file)
index 0000000..b304759
--- /dev/null
@@ -0,0 +1,30 @@
+-- Writeup at https://work.njae.me.uk/2023/12/01/advent-of-code-2023-day-01/
+
+import AoC
+-- import Data.Char
+import Data.List
+import qualified Data.MultiSet as MS
+
+main :: IO ()
+main = 
+  do  dataFileName <- getDataFileName
+      text <- readFile dataFileName
+      let pairs = fmap readPair $ lines text
+      print pairs
+      print $ part1 pairs
+      print $ part2 pairs
+
+part1 :: [(Int, Int)] -> Int
+part1 pairs = sum $ zipWith absDiff (sort lefts) (sort rights)
+  where (lefts, rights) = unzip pairs
+        absDiff a b = abs (a - b)
+
+part2 pairs = sum $ fmap similarity lefts
+    where (lefts, rights) = unzip pairs
+          counts = MS.fromList rights
+          similarity l = l * (MS.occur l counts)
+
+readPair :: String -> (Int, Int)
+readPair s = (read a, read b)
+  where (a : b : _ ) = words s
+
index 6f98911049f4bb6a68316be4e328737349e2da70..8126db189fe9e620cca63e7c0b425ed707d6dda6 100644 (file)
@@ -70,6 +70,6 @@ executable adventofcode24
     default-language: GHC2021
 
 executable advent01
-  import: common-extensions, build-directives
+  import: warnings, common-extensions, build-directives
   main-is: advent01/Main.hs
---   build-depends: split
+  build-depends: multiset
index 60d904e8c1c1edf3fd5ef53182d9265e1e6806c4..0600f81527a0e7df04a97dfc43a1b8328014b818 100644 (file)
@@ -1,8 +1,8 @@
 module Main where
 
-import qualified MyLib (someFunc)
+-- import qualified MyLib (someFunc)
 
 main :: IO ()
 main = do
   putStrLn "Hello, Haskell!"
-  MyLib.someFunc
+  -- MyLib.someFunc
index 449c739f80ae135e210384ef331238ba64f12f5f..90b5c62b18f58c8e9fde85044090d99d0ac4e6d8 100644 (file)
@@ -1,4 +1,4 @@
-Module AoC ( getDataFileName ) where
+module AoC ( getDataFileName ) where
 
 import System.Environment
 
@@ -9,8 +9,8 @@ getDataFileName =
      let baseDataName =  if null args
                          then progName
                          else head args 
-    let baseDataName' =  if length baseDataName < 5
-                         then progName ++ baseDataName
-                         else baseDataName
+     let baseDataName' =  if length baseDataName < 5
+                          then progName ++ baseDataName
+                          else baseDataName
      let dataFileName = "../data/" ++ baseDataName' ++ ".txt"
      return dataFileName