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, 692)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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