From 522618d10604e6f7b3ca41ed3537774d9779c542 Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Wed, 30 Dec 2020 14:42:29 +0100 Subject: [PATCH] Day25 --- days/src/main/kotlin/Day25.kt | 50 +++++++++++++++++++++++++++++++ days/src/main/resources/day25.txt | 2 ++ 2 files changed, 52 insertions(+) create mode 100644 days/src/main/kotlin/Day25.kt create mode 100644 days/src/main/resources/day25.txt diff --git a/days/src/main/kotlin/Day25.kt b/days/src/main/kotlin/Day25.kt new file mode 100644 index 0000000..854276f --- /dev/null +++ b/days/src/main/kotlin/Day25.kt @@ -0,0 +1,50 @@ +package be.vandewalleh.aoc.days + +import be.vandewalleh.aoc.utils.input.Day +import be.vandewalleh.aoc.utils.input.Input +import be.vandewalleh.aoc.utils.input.Lines +import be.vandewalleh.aoc.utils.input.createDay + +@Day(25) +class Day25(@Lines val input: Input) { + private val doorPublicKey = input.value[0] + private val cardPublicKey = input.value[1] + + private fun encryptionKey(loopSize: Int, publicKey: Int) = transformSubjectNumber(loopSize, publicKey) + + private fun transformSubjectNumber(loopSize: Int, subjectNumber: Int): Int { + var number = 1L + repeat(loopSize) { + number *= subjectNumber + number %= 20201227 + } + return number.toInt() + } + + private fun transformSubjectNumberStartingWith(currentNumber: Long, subjectNumber: Int): Long { + var number = currentNumber + number *= subjectNumber + number %= 20201227 + return number + } + + private fun findLoopSize(expectedPublicKey: Long): Int { + var computedPublicKey = 1L + var loopSize = 0 + do { + computedPublicKey = transformSubjectNumberStartingWith(computedPublicKey, 7) + loopSize++ + } while (computedPublicKey != expectedPublicKey) + return loopSize + } + + fun part1(): Int { + val cardLoopSize = findLoopSize(cardPublicKey.toLong()) + return encryptionKey(cardLoopSize, doorPublicKey) + } + +} + +fun main() = with(createDay()) { + println(part1()) +} diff --git a/days/src/main/resources/day25.txt b/days/src/main/resources/day25.txt new file mode 100644 index 0000000..a7a920f --- /dev/null +++ b/days/src/main/resources/day25.txt @@ -0,0 +1,2 @@ +1327981 +2822615