Skip to content

Commit

Permalink
2023 - Day 21 - init
Browse files Browse the repository at this point in the history
  • Loading branch information
fmmr committed Dec 21, 2023
1 parent dc0a6b5 commit 2e18735
Show file tree
Hide file tree
Showing 5 changed files with 269 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/main/kotlin/no/rodland/advent/Misc.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,24 @@ fun String.readFileAsString(): String {
}
}

// https://kotlinlang.slack.com/archives/C87V9MQFK/p1703069274599999?thread_ts=1703048402.894019&cid=C87V9MQFK
//fun chineseRemainder(values: List<Pair<Long, Long>>): Long {
// if (values.isEmpty()) {
// return 0L
// }
// var result = values[0].first
// var lcm = values[0].second
// for (i in 1 until values.size) {
// val (base, modulo) = values[i]
// val target = base % modulo
// while (result % modulo != target) {
// result += lcm
// }
// lcm = lcm(lcm, modulo)
// }
// return result
//}

fun lcm(n1: BigInteger, n2: BigInteger): BigInteger {
// https://no.wikipedia.org/wiki/Minste_felles_multiplum
// lcm = (n1 * n2) / gcd
Expand Down
27 changes: 27 additions & 0 deletions src/main/kotlin/no/rodland/advent_2023/Day21.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package no.rodland.advent_2023

import no.rodland.advent.Day

// template generated: 21/12/2023
// Fredrik Rødland 2023

class Day21(val input: List<String>) : Day<Long, Long, List<String>> {

private val parsed = input.parse()

override fun partOne(): Long {
return 2
}

override fun partTwo(): Long {
return 2
}

override fun List<String>.parse(): List<String> {
return map { line ->
line
}
}

override val day = "21".toInt()
}
82 changes: 82 additions & 0 deletions src/test/kotlin/no/rodland/advent_2023/Day21Test.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package no.rodland.advent_2023

import no.rodland.advent.*
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import readFile

//
// run: download_aoc_input.sh to download input
//

@Suppress("ClassName")
@DisableSlow
internal class Day21Test {
private val data21 = "2023/input_21.txt".readFile()
private val test21 = "2023/input_21_test.txt".readFile()

private val resultTestOne = 2L
private val resultTestTwo = 2L
private val resultOne = 2L
private val resultTwo = 2L

val test = defaultTestSuiteParseOnInit(
Day21(data21),
Day21(test21),
resultTestOne,
resultOne,
resultTestTwo,
resultTwo,
{ Day21(data21) },
{ Day21(test21) },
)

@Nested
inner class Init {
@Test
fun `21,-,example,1`() {
report(AOCTest({ "123".toInt() }, Unit, 123, 5, "21".toInt(), Part.TWO, false, "example"))
}

@Test
fun `21,-,example,2`() {
report(test.initTest.copy())
}

@Test
fun `21,-,test,init`() {
report(test.initTest)
}

@Test
fun `21,-,live,init`() {
report(test.initLive)
}
}

@Nested
inner class `Part 1` {
@Test
fun `21,1,test`() {
report(test.testPart1)
}

@Test
fun `21,1,live,1`() {
report(test.livePart1)
}
}

@Nested
inner class `Part 2` {
@Test
fun `21,2,test`() {
report(test.testPart2)
}

@Test
fun `21,2,live,1`() {
report(test.livePart2)
}
}
}
Loading

0 comments on commit 2e18735

Please sign in to comment.