X-Git-Url: https://git.njae.me.uk/?p=advent-of-code-19.git;a=blobdiff_plain;f=advent04%2Fsrc%2Fadvent04.hs;fp=advent04%2Fsrc%2Fadvent04.hs;h=9066cbbd2744d58d54cf01aabef5733df24d17da;hp=0000000000000000000000000000000000000000;hb=c2a0cc1ad95b213ef2552d25328341b3479822f7;hpb=c4794c207f6278f57aebedc5827d20cc6de41962 diff --git a/advent04/src/advent04.hs b/advent04/src/advent04.hs new file mode 100644 index 0000000..9066cbb --- /dev/null +++ b/advent04/src/advent04.hs @@ -0,0 +1,40 @@ + +main :: IO () +main = do + print part1 + print part2 + +lowerLimit = 134792 +upperLimit = 675810 + + +part1 = length $ filter inRange $ filter adjacentSame candidates +part2 = length $ filter isolatedAdjacentSame $ filter inRange $ filter adjacentSame candidates + +inRange digits = n >= lowerLimit && n <= upperLimit + where n = numify digits + +numify :: (Int, Int, Int, Int, Int, Int) -> Int +numify (d1, d2, d3, d4, d5, d6) = + d1 * 10^5 + d2 * 10^4 + d3 * 10^3 + d4 * 10^2 + d5 * 10 + d6 + +adjacentSame (d1, d2, d3, d4, d5, d6) = + d1 == d2 || d2 == d3 || d3 == d4 || d4 == d5 || d5 == d6 + +isolatedAdjacentSame (d1, d2, d3, d4, d5, d6) = + (d1 == d2 && d2 /= d3) + || (d1 /= d2 && d2 == d3 && d3 /= d4) + || (d2 /= d3 && d3 == d4 && d4 /= d5) + || (d3 /= d4 && d4 == d5 && d5 /= d6) + || (d4 /= d5 && d5 == d6) + + +candidates = [ (d1, d2, d3, d4, d5, d6) + | d1 <- [1..6] + , d2 <- [d1..9] + , d3 <- [d2..9] + , d4 <- [d3..9] + , d5 <- [d4..9] + , d6 <- [d5..9] + ] + \ No newline at end of file