File tree Expand file tree Collapse file tree 3 files changed +105
-0
lines changed Expand file tree Collapse file tree 3 files changed +105
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 1+ 123487596
You can’t perform that action at this time.
0 commit comments