This commit is contained in:
daniele 2024-12-03 18:52:51 +01:00
parent 9d1ecddf7b
commit 97595af8de
Signed by: fuxino
GPG Key ID: 981A2B2A3BBF5514
6 changed files with 32 additions and 8 deletions

View File

@ -7,5 +7,4 @@ listDistance xs ys = sum $ map abs $ zipWith (-) (sort xs) (sort ys)
main = do
contents <- lines <$> readFile "day1.txt"
let [x, y] = transpose $ map read . words <$> contents
distance = listDistance x y
print distance
print $ listDistance x y

View File

@ -8,5 +8,4 @@ similarityScore xs ys = let elemsY = [ (head y, length y) | y <- (group . sort)
main = do
contents <- lines <$> readFile "day1.txt"
let [x, y] = transpose $ map read . words <$> contents
score = similarityScore x y
print score
print $ similarityScore x y

View File

@ -10,5 +10,4 @@ isSafe xs = (isAscending xs || isDescending xs) && maximum distances <= 3 && min
main = do
contents <- lines <$> readFile "day2.txt"
let reports = map read . words <$> contents
safeCount = length $ filter isSafe reports
print safeCount
print . length $ filter isSafe reports

View File

@ -15,5 +15,4 @@ removeLevel xs = zipWith (++) ys zs
main = do
contents <- lines <$> readFile "day2.txt"
let reports = map read . words <$> contents
safeCount = length . filter (any isSafe) $ map removeLevel reports
print safeCount
print . length . filter (any isSafe) $ map removeLevel reports

12
Day3/puzzle1.hs Normal file
View File

@ -0,0 +1,12 @@
import Data.List.Split (splitOn)
import Data.Char (isDigit)
import Text.Regex.TDFA (getAllTextMatches, (=~))
sumMul :: [String] -> Int
sumMul xs = let vals = map (splitOn "," . filter (`elem` "0123456789,")) xs
in sum $ map (product . map read) vals
main = do
contents <- readFile "day3.txt"
let mults = getAllTextMatches (contents =~ "mul\\([0-9]+,[0-9]+\\)") :: [String]
print $ sumMul mults

16
Day3/puzzle2.hs Normal file
View File

@ -0,0 +1,16 @@
import Data.List (isPrefixOf)
import Data.List.Split (split, splitOn, startsWith)
import Data.Char (isDigit)
import Text.Regex.TDFA (getAllTextMatches, (=~))
sumMul :: [String] -> Int
sumMul xs = let vals = map (splitOn "," . filter (`elem` "0123456789,")) xs
in sum $ map (product . map read) vals
filterDonts :: [String] -> String
filterDonts = concat . filter (not . isPrefixOf "don't()") . concatMap (split (startsWith "do()"))
main = do
contents <- split (startsWith "don't()") <$> readFile "day3.txt"
let mults = getAllTextMatches (filterDonts contents =~ "mul\\([0-9]+,[0-9]+\\)") :: [String]
print $ sumMul mults