File tree Expand file tree Collapse file tree 2 files changed +33
-4
lines changed
main/kotlin/org/suggs/aoc2024
test/kotlin/org/suggs/aoc2024 Expand file tree Collapse file tree 2 files changed +33
-4
lines changed Original file line number Diff line number Diff line change @@ -8,12 +8,29 @@ object Day02RedNosedReports {
8
8
private val log = LoggerFactory .getLogger(this ::class .java)
9
9
10
10
fun countNumberOfSafeReportsFrom (data : List <String >) =
11
- data.count { isSafe(it.split(" " ).map { it.toInt() }.zipWithNext().map { it.first - it.second }) }
12
-
13
- private fun isSafe (lineDeltas : List <Int >) = allInRange(lineDeltas) && sameDirection(lineDeltas)
11
+ data.count { isSafeLine(it.split(" " ).map { it.toInt() }) }
14
12
13
+ private fun isSafeLine (line : List <Int >) = isSafeDeltas(line.zipWithNext().map { it.second - it.first })
14
+ private fun isSafeDeltas (lineDeltas : List <Int >) = allInRange(lineDeltas) && allSameDirection(lineDeltas)
15
15
private fun allInRange (lineDeltas : List <Int >) = lineDeltas.all { abs(it) in 1 .. 3 }
16
+ private fun allSameDirection (lineDeltas : List <Int >) = lineDeltas.all { it > 0 } || lineDeltas.all { it < 0 }
17
+
18
+ fun countNumberOfDampenedSafeReportsFrom (data : List <String >): Int =
19
+ data.count { isDampenedSafeLine(it.split(" " ).map { it.toInt() }) }
20
+
21
+ private fun isDampenedSafeLine (line : List <Int >): Boolean {
22
+ return if (isSafeLine(line)) true
23
+ else findSubLisThatIsSafe(line)
24
+ }
25
+
26
+ private fun findSubLisThatIsSafe (line : List <Int >): Boolean {
27
+ for (i in line.indices) {
28
+ val mutated = line.toMutableList()
29
+ mutated.removeAt(i)
30
+ if (isSafeLine(mutated)) return true
31
+ }
32
+ return false
33
+ }
16
34
17
- private fun sameDirection (lineDeltas : List <Int >) = lineDeltas.all { it > 0 } || lineDeltas.all { it < 0 }
18
35
19
36
}
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Disabled
5
5
import org.junit.jupiter.api.DisplayName
6
6
import org.junit.jupiter.api.Test
7
7
import org.suggs.adventofcode.Util.getFileLinesFrom
8
+ import org.suggs.aoc2024.Day02RedNosedReports.countNumberOfDampenedSafeReportsFrom
8
9
import org.suggs.aoc2024.Day02RedNosedReports.countNumberOfSafeReportsFrom
9
10
10
11
@DisplayName(" Red-Nosed Reports" )
@@ -21,6 +22,17 @@ class Day02RedNosedReportsTest {
21
22
countNumberOfSafeReportsFrom(largeData) shouldBe 123
22
23
}
23
24
25
+ @Test
26
+ fun `counts number of dampened safe reports from a short list` () {
27
+ countNumberOfDampenedSafeReportsFrom(smallData) shouldBe 4
28
+ }
29
+
30
+ @Test
31
+ @Disabled
32
+ fun `counts number of dampened safe reports from a larger list` () {
33
+ countNumberOfDampenedSafeReportsFrom(largeData) shouldBe 123
34
+ }
35
+
24
36
private val largeData = getFileLinesFrom(" day02-input.txt" )
25
37
private val smallData = """ 7 6 4 2 1
26
38
1 2 7 8 9
You can’t perform that action at this time.
0 commit comments