Skip to content

Commit c284755

Browse files
committed
Solution Day 22, part one (Monkey Market)
1 parent a5c6c7e commit c284755

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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+
})

0 commit comments

Comments
 (0)