This commit is contained in:
Andrew Glaze
2024-12-02 00:53:13 -05:00
parent 61197504c3
commit b742a633fb
2 changed files with 98 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
package day02
import kotlin.math.abs
class Day02 {
fun parse(input: String): List<List<Int>> {
return input.lines().map { it.split(" ").map { it.toInt() } }
}
fun part1(input: String): Int {
val parsed = parse(input)
var safeCount = 0;
for (line in parsed) {
if (isSafe(line)) {
safeCount += 1
}
}
return safeCount
}
fun isSafe(line: List<Int>): Boolean {
var neg = line[0] - line[1] < 0
for (i in 1..<line.count()) {
val diff = line[i-1] - line[i]
if (abs(diff) > 3 || abs(diff) < 1) {
return false
}
if ((diff < 0 && !neg) || (diff > 0 && neg)) {
return false
}
}
return true
}
fun part2(input: String): Int {
val parsed = parse(input)
var safeCount = 0;
for (line in parsed) {
if (isSafe(line)) {
safeCount += 1
continue
}
for (i in 0..<line.count()) {
if (isSafe(line.subList(0, i) + line.subList(i + 1, line.count()))) {
safeCount += 1
break
}
}
}
return safeCount
}
}

View File

@@ -0,0 +1,42 @@
package day02
import kotlin.test.Test
import util.InputDownloader
class Day02Test {
val day = 2
val input = InputDownloader().getInput(day)
val example = InputDownloader().getExample(day)
@Test fun part1Example() {
part1(example, 2)
}
@Test fun part2Example() {
part2(example, 4)
}
@Test fun part1Solution() {
part1(input, 663)
}
@Test fun part2Solution() {
part2(input, -1)
}
fun part1(input: String, expected: Int) {
val day = Day02()
val output = day.part1(input)
println("output: $output")
assert(output == expected)
}
fun part2(input: String, expected: Int) {
val day = Day02()
val output = day.part2(input)
println("output: $output")
assert(output == expected)
}
}