File tree Expand file tree Collapse file tree 2 files changed +77
-0
lines changed
main/kotlin/de/ronny_h/aoc/year24/day22
test/kotlin/de/ronny_h/aoc/year24/day22 Expand file tree Collapse file tree 2 files changed +77
-0
lines changed Original file line number Diff line number Diff line change 1+ package de.ronny_h.aoc.year24.day22
2+
3+ import de.ronny_h.aoc.AdventOfCode
4+
5+ fun main () = MonkeyMarket ().run (17965282217 , 0 )
6+
7+ class MonkeyMarket : AdventOfCode <Long >(2024 , 22 ) {
8+
9+ fun nextSecretNumber (seed : Long ): Long {
10+ var secret = (seed * 64 ) xor seed
11+ secret % = 16777216
12+ secret = (secret / 32 ) xor secret
13+ secret % = 16777216
14+ secret = (secret * 2048 ) xor secret
15+ secret % = 16777216
16+ return secret
17+ }
18+
19+ override fun part1 (input : List <String >): Long = input
20+ .map(String ::toLong)
21+ .sumOf {
22+ var secret = it
23+ repeat(2000 ) {
24+ secret = nextSecretNumber(secret)
25+ }
26+ secret
27+ }
28+
29+ override fun part2 (input : List <String >): Long {
30+ TODO (" Not yet implemented" )
31+ }
32+ }
Original file line number Diff line number Diff line change 1+ package de.ronny_h.aoc.year24.day22
2+
3+ import de.ronny_h.aoc.extensions.asList
4+ import io.kotest.core.spec.style.StringSpec
5+ import io.kotest.matchers.shouldBe
6+
7+ class MonkeyMarketTest : StringSpec ({
8+
9+ val input = """
10+ 1
11+ 10
12+ 100
13+ 2024
14+ """ .asList()
15+ val market = MonkeyMarket ()
16+
17+ " next secret number of 123" {
18+ market.nextSecretNumber(123) shouldBe 15887950
19+ }
20+
21+ " next ten secret numbers of 123" {
22+ var secret = 123L
23+ buildList {
24+ repeat(10) {
25+ secret = market.nextSecretNumber(secret)
26+ add(secret)
27+ }
28+ } shouldBe listOf(
29+ 15887950,
30+ 16495136,
31+ 527345,
32+ 704524,
33+ 1553684,
34+ 12683156,
35+ 11100544,
36+ 12249484,
37+ 7753432,
38+ 5908254,
39+ )
40+ }
41+
42+ " part 1" {
43+ market.part1(input) shouldBe 37327623
44+ }
45+ })
You can’t perform that action at this time.
0 commit comments