day 2
This commit is contained in:
56
app/src/main/kotlin/day02/Day02.kt
Normal file
56
app/src/main/kotlin/day02/Day02.kt
Normal 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
|
||||
}
|
||||
}
|
42
app/src/test/kotlin/day02/Day02Test.kt
Normal file
42
app/src/test/kotlin/day02/Day02Test.kt
Normal 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)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user