Day 4 in a pretty streamy way
This commit is contained in:
39
src/main/kotlin/com/basdado/adventofcode/day4/Day4.kt
Normal file
39
src/main/kotlin/com/basdado/adventofcode/day4/Day4.kt
Normal file
@@ -0,0 +1,39 @@
|
||||
package com.basdado.adventofcode.day4
|
||||
|
||||
import com.basdado.adventofcode.line
|
||||
import java.util.stream.IntStream
|
||||
|
||||
const val DAY4_PATH = "/day/4/input.txt"
|
||||
|
||||
fun main() {
|
||||
Day4.puzzle1()
|
||||
Day4.puzzle2()
|
||||
}
|
||||
|
||||
object Day4 {
|
||||
|
||||
fun puzzle1() {
|
||||
val range = line(DAY4_PATH).split('-').map { it.toInt() }
|
||||
println(IntStream.range(range[0], range[1])
|
||||
.parallel()
|
||||
.filter(::neverDecrease)
|
||||
.filter(::repeatingDigits)
|
||||
.count())
|
||||
}
|
||||
|
||||
fun puzzle2() {
|
||||
val range = line(DAY4_PATH).split('-').map { it.toInt() }
|
||||
println(IntStream.range(range[0], range[1])
|
||||
.parallel()
|
||||
.filter(::neverDecrease)
|
||||
.filter{ n -> IntStream.rangeClosed(1, 9).anyMatch{ repeatsOnlyTwice(n, it)} }
|
||||
.count())
|
||||
}
|
||||
|
||||
private fun neverDecrease(n: Int) = streamDigits(n).reduce(0) { a, b -> if (a < 0) a else if (b < a) -1 else b} >= 0
|
||||
private fun repeatingDigits(n: Int) = streamDigits(n).reduce(-1) { a, b -> if (a == 1000) a else if (a == b) 1000 else b} == 1000
|
||||
private fun repeatsOnlyTwice(n: Int, needle: Int) = streamDigits(n).filter { it == needle }.count() == 2L
|
||||
|
||||
private fun streamDigits(n: Int): IntStream = IntStream.range(0, n.toString().length).map { n.toString()[it].toString().toInt() }
|
||||
|
||||
}
|
||||
1
src/main/resources/day/4/input.txt
Normal file
1
src/main/resources/day/4/input.txt
Normal file
@@ -0,0 +1 @@
|
||||
128392-643281
|
||||
Reference in New Issue
Block a user