From 1d67f6a52ccc409a743c1000a8d8679d70886223 Mon Sep 17 00:00:00 2001 From: Bas Dado Date: Wed, 4 Dec 2019 19:42:01 +0100 Subject: [PATCH] Day 4 in a pretty streamy way --- .../com/basdado/adventofcode/day4/Day4.kt | 39 +++++++++++++++++++ src/main/resources/day/4/input.txt | 1 + 2 files changed, 40 insertions(+) create mode 100644 src/main/kotlin/com/basdado/adventofcode/day4/Day4.kt create mode 100644 src/main/resources/day/4/input.txt diff --git a/src/main/kotlin/com/basdado/adventofcode/day4/Day4.kt b/src/main/kotlin/com/basdado/adventofcode/day4/Day4.kt new file mode 100644 index 0000000..0d8a02a --- /dev/null +++ b/src/main/kotlin/com/basdado/adventofcode/day4/Day4.kt @@ -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() } + +} \ No newline at end of file diff --git a/src/main/resources/day/4/input.txt b/src/main/resources/day/4/input.txt new file mode 100644 index 0000000..0d20957 --- /dev/null +++ b/src/main/resources/day/4/input.txt @@ -0,0 +1 @@ +128392-643281 \ No newline at end of file