In [1]:
inputLines = lines <$> readFile "input/day3.txt"
In [2]:
-- Parse a string that contains space-separated numbers
parseNumbers :: String -> [Int]
parseNumbers = map read . words
In [3]:
import Data.List -- for sort
In [4]:
isValidTriangle :: [Int] -> Bool
isValidTriangle (a:b:c:[]) = head sortedSides < sum (tail sortedSides)
where
sortedSides = reverse $ sort [a, b, c]
isValidTriangle _ = False -- too many or too few sides
In [5]:
length . filter isValidTriangle . map parseNumbers <$> inputLines
In [6]:
-- the number of lines is divisible by 3 if the remainder is zero
(`mod` 3) . length <$> inputLines
In [7]:
import Data.List.Split -- for splitEvery
In [8]:
length . filter isValidTriangle . splitEvery 3 . concat . transpose . map parseNumbers <$> inputLines