Compare commits
2 Commits
3b05729081
...
724b4abcf0
Author | SHA1 | Date |
---|---|---|
|
724b4abcf0 | |
|
caee6ea61b |
|
@ -13,6 +13,7 @@
|
||||||
"HLINT",
|
"HLINT",
|
||||||
"mempty",
|
"mempty",
|
||||||
"Prec",
|
"Prec",
|
||||||
|
"succ",
|
||||||
"unrecognised"
|
"unrecognised"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,8 @@ solveP1 = length . filter (== True) . map safeReportP1
|
||||||
solveP2 :: [[Int]] -> Int
|
solveP2 :: [[Int]] -> Int
|
||||||
solveP2 = length . filter (== True) . map safeReportP2
|
solveP2 = length . filter (== True) . map safeReportP2
|
||||||
|
|
||||||
|
safeReportP1 :: [Int] -> Bool
|
||||||
|
safeReportP1 report = isSorted report && adjacentLevelCheck report
|
||||||
|
|
||||||
isSorted :: [Int] -> Bool
|
isSorted :: [Int] -> Bool
|
||||||
isSorted report = report `elem` [sort report, sortOn Down report]
|
isSorted report = report `elem` [sort report, sortOn Down report]
|
||||||
|
@ -43,17 +44,8 @@ adjacentLevelCheck report =
|
||||||
all (((== True) . (\n-> n>=1 && n<=3)) . abs)
|
all (((== True) . (\n-> n>=1 && n<=3)) . abs)
|
||||||
(zipWith subtract report (tail report))
|
(zipWith subtract report (tail report))
|
||||||
|
|
||||||
removeOneBadReport :: [Int] -> [[Int]]
|
|
||||||
removeOneBadReport lst = map (\i -> take i lst <> drop (succ i) lst) [0..(length lst)-1]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
safeReportP1 :: [Int] -> Bool
|
|
||||||
safeReportP1 report = isSorted report && adjacentLevelCheck report
|
|
||||||
|
|
||||||
safeReportP2 :: [Int] -> Bool
|
safeReportP2 :: [Int] -> Bool
|
||||||
safeReportP2 report =
|
safeReportP2 report = any safeReportP1 (removeOneBadReport report)
|
||||||
or $ zipWith (&&) (map adjacentLevelCheck reports) (map isSorted reports)
|
|
||||||
where
|
|
||||||
reports = removeOneBadReport report
|
|
||||||
|
|
||||||
|
removeOneBadReport :: [Int] -> [[Int]]
|
||||||
|
removeOneBadReport lst = map (\i -> take i lst <> drop (succ i) lst) [0..length lst-1]
|
||||||
|
|
Loading…
Reference in New Issue