Removed a redundant filter
[advent-of-code-19.git] / advent04 / src / advent04.hs
1
2 main :: IO ()
3 main = do
4 print part1
5 print part2
6
7 lowerLimit = 134792
8 upperLimit = 675810
9
10
11 part1 = length $ filter inRange $ filter adjacentSame candidates
12 part2 = length $ filter inRange $ filter isolatedAdjacentSame candidates
13
14 inRange digits = n >= lowerLimit && n <= upperLimit
15 where n = numify digits
16
17 numify :: (Int, Int, Int, Int, Int, Int) -> Int
18 numify (d1, d2, d3, d4, d5, d6) =
19 d1 * 10^5 + d2 * 10^4 + d3 * 10^3 + d4 * 10^2 + d5 * 10 + d6
20
21 adjacentSame (d1, d2, d3, d4, d5, d6) =
22 d1 == d2 || d2 == d3 || d3 == d4 || d4 == d5 || d5 == d6
23
24 isolatedAdjacentSame (d1, d2, d3, d4, d5, d6) =
25 (d1 == d2 && d2 /= d3)
26 || (d1 /= d2 && d2 == d3 && d3 /= d4)
27 || (d2 /= d3 && d3 == d4 && d4 /= d5)
28 || (d3 /= d4 && d4 == d5 && d5 /= d6)
29 || (d4 /= d5 && d5 == d6)
30
31
32 candidates = [ (d1, d2, d3, d4, d5, d6)
33 | d1 <- [1..6]
34 , d2 <- [d1..9]
35 , d3 <- [d2..9]
36 , d4 <- [d3..9]
37 , d5 <- [d4..9]
38 , d6 <- [d5..9]
39 ]
40