Day 3
This commit is contained in:
parent
9d1ecddf7b
commit
97595af8de
@ -7,5 +7,4 @@ listDistance xs ys = sum $ map abs $ zipWith (-) (sort xs) (sort ys)
|
|||||||
main = do
|
main = do
|
||||||
contents <- lines <$> readFile "day1.txt"
|
contents <- lines <$> readFile "day1.txt"
|
||||||
let [x, y] = transpose $ map read . words <$> contents
|
let [x, y] = transpose $ map read . words <$> contents
|
||||||
distance = listDistance x y
|
print $ listDistance x y
|
||||||
print distance
|
|
||||||
|
@ -8,5 +8,4 @@ similarityScore xs ys = let elemsY = [ (head y, length y) | y <- (group . sort)
|
|||||||
main = do
|
main = do
|
||||||
contents <- lines <$> readFile "day1.txt"
|
contents <- lines <$> readFile "day1.txt"
|
||||||
let [x, y] = transpose $ map read . words <$> contents
|
let [x, y] = transpose $ map read . words <$> contents
|
||||||
score = similarityScore x y
|
print $ similarityScore x y
|
||||||
print score
|
|
||||||
|
@ -10,5 +10,4 @@ isSafe xs = (isAscending xs || isDescending xs) && maximum distances <= 3 && min
|
|||||||
main = do
|
main = do
|
||||||
contents <- lines <$> readFile "day2.txt"
|
contents <- lines <$> readFile "day2.txt"
|
||||||
let reports = map read . words <$> contents
|
let reports = map read . words <$> contents
|
||||||
safeCount = length $ filter isSafe reports
|
print . length $ filter isSafe reports
|
||||||
print safeCount
|
|
||||||
|
@ -15,5 +15,4 @@ removeLevel xs = zipWith (++) ys zs
|
|||||||
main = do
|
main = do
|
||||||
contents <- lines <$> readFile "day2.txt"
|
contents <- lines <$> readFile "day2.txt"
|
||||||
let reports = map read . words <$> contents
|
let reports = map read . words <$> contents
|
||||||
safeCount = length . filter (any isSafe) $ map removeLevel reports
|
print . length . filter (any isSafe) $ map removeLevel reports
|
||||||
print safeCount
|
|
||||||
|
12
Day3/puzzle1.hs
Normal file
12
Day3/puzzle1.hs
Normal 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
16
Day3/puzzle2.hs
Normal 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
|
Loading…
x
Reference in New Issue
Block a user