Day16: Puzzle 1 is done, pretty easy, don't know how to do part 2 yet
This commit is contained in:
64
src/main/kotlin/com/basdado/adventofcode/day16/Day16.kt
Normal file
64
src/main/kotlin/com/basdado/adventofcode/day16/Day16.kt
Normal file
@@ -0,0 +1,64 @@
|
||||
package com.basdado.adventofcode.day16
|
||||
|
||||
import com.basdado.adventofcode.line
|
||||
import java.util.stream.IntStream
|
||||
import kotlin.math.abs
|
||||
|
||||
const val DAY16_INPUT_PATH = "/day/16/input.txt"
|
||||
|
||||
fun main() {
|
||||
Day16.puzzle1()
|
||||
Day16.puzzle2()
|
||||
|
||||
}
|
||||
|
||||
object Day16 {
|
||||
|
||||
val pattern = intArrayOf(0, 1, 0, -1)
|
||||
|
||||
fun puzzle1() {
|
||||
val input = line(DAY16_INPUT_PATH)
|
||||
.chars().map { it - '0'.toInt() }
|
||||
.toArray()
|
||||
|
||||
var code = input
|
||||
IntStream.range(0, 100)
|
||||
.peek { phase ->
|
||||
code = IntStream.range(0, code.size).parallel()
|
||||
.map { output -> lastDigit(IntStream.range(0, code.size)
|
||||
.map { i -> code[i] * patternAt(output, i) }
|
||||
.sum())}
|
||||
.toArray()
|
||||
}
|
||||
// .peek { phase -> println("Phase $phase: ${code.joinToString()} ") }
|
||||
.skip(99)
|
||||
.findFirst()!!
|
||||
|
||||
println(code.joinToString(""))
|
||||
}
|
||||
|
||||
fun puzzle2() {
|
||||
val input = line(DAY16_INPUT_PATH).repeat(10)
|
||||
.chars().map { it - '0'.toInt() }
|
||||
.toArray()
|
||||
|
||||
var code = input
|
||||
IntStream.range(0, 100)
|
||||
.peek { phase ->
|
||||
code = IntStream.range(0, code.size).parallel()
|
||||
.map { output -> lastDigit(IntStream.range(0, code.size)
|
||||
.map { i -> code[i] * patternAt(output, i) }
|
||||
.sum())}
|
||||
.toArray()
|
||||
}
|
||||
// .peek { phase -> println("Phase $phase: ${code.joinToString()} ") }
|
||||
.skip(99)
|
||||
.findFirst()!!
|
||||
|
||||
println(code.joinToString(""))
|
||||
}
|
||||
|
||||
|
||||
fun patternAt(output: Int, i: Int) = pattern[((i + 1) / (output + 1)) % pattern.size]
|
||||
fun lastDigit(n: Int) = abs(n % 10)
|
||||
}
|
||||
1
src/main/resources/day/16/ex1.txt
Normal file
1
src/main/resources/day/16/ex1.txt
Normal file
@@ -0,0 +1 @@
|
||||
12345678
|
||||
1
src/main/resources/day/16/input.txt
Normal file
1
src/main/resources/day/16/input.txt
Normal file
@@ -0,0 +1 @@
|
||||
59727310424796235189476878806940387435291429226818921130171187957262146115559932358924341808253400617220924411865224341744614706346865536561788244183609411225788501102400269978290670307147139438239865673058478091682748114942700860895620690690625512670966265975462089087644554004423208369517716075591723905075838513598360188150158989179151879406086757964381549720210763972463291801513250953430219653258827586382953297392567981587028568433943223260723561880121205475323894070000380258122357270847092900809245133752093782889315244091880516672127950518799757198383131025701009960944008679555864631340867924665650332161673274408001712152664733237178121872
|
||||
Reference in New Issue
Block a user