Skip to content

Commit 01eb91f

Browse files
committed
AOC - Day 23
1 parent 37d0c4a commit 01eb91f

File tree

3 files changed

+105
-0
lines changed

3 files changed

+105
-0
lines changed

src/main/java/Exercise23-part2.kt

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
fun main() {
2+
val input = object {}.javaClass.getResource("input-23.txt").readText()
3+
.toCharArray()
4+
.map(Character::getNumericValue)
5+
6+
val size = 1_000_000
7+
val cups = Array(size + 1) { Cup(it) }
8+
9+
cups.onEachIndexed { index, cup ->
10+
if (index == cups.size - 1) {
11+
cup.next = cups[1]
12+
} else {
13+
cup.next = cups[index + 1]
14+
}
15+
}
16+
17+
input.forEachIndexed { index, elem ->
18+
if (index != input.size - 1) {
19+
cups[elem].next = cups[input[index + 1]]
20+
} else {
21+
cups[elem].next = cups[input.size + 1]
22+
}
23+
}
24+
25+
var current = cups[input.first()]
26+
cups.last().next = current
27+
28+
repeat(10_000_000) {
29+
val curr1 = current.next
30+
val curr2 = curr1.next
31+
val curr3 = curr2.next
32+
val currAfter = curr3.next
33+
34+
var toFind = current.num - 1
35+
36+
while (toFind == curr1.num || toFind == curr2.num || toFind == curr3.num) toFind--
37+
if (toFind == 0) {
38+
toFind = size
39+
while (toFind == curr1.num || toFind == curr2.num || toFind == curr3.num) toFind--
40+
}
41+
val dest0 = cups[toFind]
42+
val dest1 = dest0.next
43+
dest0.next = curr1
44+
curr3.next = dest1
45+
current.next = currAfter
46+
current = currAfter
47+
}
48+
println((cups[1].next.num).toLong() * (cups[1].next.next.num).toLong())
49+
}

src/main/java/Exercise23.kt

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
fun main() {
2+
val input = object {}.javaClass.getResource("input-23.txt").readText()
3+
.toCharArray()
4+
.map(Character::getNumericValue)
5+
6+
val size = input.size
7+
val cups = Array(size + 1) { Cup(it) }
8+
9+
cups.onEachIndexed { index, cup ->
10+
if (index == cups.size - 1) {
11+
cup.next = cups[1]
12+
} else {
13+
cup.next = cups[index + 1]
14+
}
15+
}
16+
17+
input.forEachIndexed { index, elem ->
18+
if (index != input.size - 1) {
19+
cups[elem].next = cups[input[index + 1]]
20+
} else {
21+
cups[elem].next = cups[input.first()]
22+
}
23+
}
24+
25+
var current = cups[input.first()]
26+
repeat(100) {
27+
val curr1 = current.next
28+
val curr2 = curr1.next
29+
val curr3 = curr2.next
30+
val currAfter = curr3.next
31+
32+
var toFind = current.num - 1
33+
34+
while (toFind == curr1.num || toFind == curr2.num || toFind == curr3.num) toFind--
35+
if (toFind == 0) {
36+
toFind = size
37+
while (toFind == curr1.num || toFind == curr2.num || toFind == curr3.num) toFind--
38+
}
39+
val dest0 = cups[toFind]
40+
val dest1 = dest0.next
41+
dest0.next = curr1
42+
curr3.next = dest1
43+
current.next = currAfter
44+
current = currAfter
45+
}
46+
var t = cups[1]
47+
(1 until size).fold("") { acc, _ ->
48+
t = t.next
49+
"$acc${t.num}"
50+
}.also(::println)
51+
}
52+
53+
class Cup(val num: Int) {
54+
lateinit var next: Cup
55+
}

src/main/resources/input-23.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
123487596

0 commit comments

Comments
 (0)