From 7a432cf872c236ebfe2689b91f1af6438cd6af98 Mon Sep 17 00:00:00 2001 From: natkam <3858688+natkam@users.noreply.github.com> Date: Wed, 1 Jan 2025 02:46:21 +0100 Subject: [PATCH] [2024/05] Solve pt. 1 --- 2024_haskell/05Manual.hs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 2024_haskell/05Manual.hs diff --git a/2024_haskell/05Manual.hs b/2024_haskell/05Manual.hs new file mode 100644 index 0000000..69a8061 --- /dev/null +++ b/2024_haskell/05Manual.hs @@ -0,0 +1,33 @@ +module Main where + +import Data.List (isPrefixOf, isSuffixOf) +import Data.List.Split (splitOn) + +-- import qualified Data.Map.Strict as Map + +main :: IO () +main = do + input <- readFile "05input" + let [rules, seqsInit] = map lines (splitOn "\n\n" input) + let seqs = map (splitOn ",") seqsInit + let validSeqs = filter (validate rules) seqs + let result = sum $ map getMiddle validSeqs + print result + +readInt :: String -> Int +readInt = read + +validate :: [String] -> [String] -> Bool +validate rules [] = True +validate rules (x : xs) + | all (anyRuleMatches (rulesForPage x rules)) xs = validate rules xs + | otherwise = False + +rulesForPage :: String -> [String] -> [String] +rulesForPage rules x = filter (x `isPrefixOf`) rules + +anyRuleMatches :: [String] -> String -> Bool +anyRuleMatches rules p = any (p `isSuffixOf`) rules + +getMiddle :: [String] -> Int +getMiddle seq = readInt (seq !! div (length seq) 2)