Day 4 in a pretty streamy way

This commit is contained in:
2019-12-04 19:42:01 +01:00
parent cbe279c02d
commit 1d67f6a52c
2 changed files with 40 additions and 0 deletions

View 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() }
}

View File

@@ -0,0 +1 @@
128392-643281