-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day05.kts
127 lines (108 loc) · 2.03 KB
/
Day05.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Day05.kts
import java.io.File
// Shared
val input = File("Data/Day05.txt").readText()
val positionInput = input
.split("\n\n")
.first()
.split("\n")
val indices = positionInput
.last()
.split(" ")
.filter { !it.isBlank() }
.map { it.toInt() }
val rows = positionInput
.dropLast(1)
.filter {
it.count() > 0
}
var charIndices = arrayOf(1)
for (index in indices.dropLast(1)) {
val next = charIndices.last() + 4
charIndices += next
}
val stacks = indices.map {
val index = it
rows.reversed().map {
if (it.isBlank()) {
null
} else {
it[charIndices[index - 1]]
}
}
.filter { it.toString() != " " }
.filterNotNull()
.toMutableList()
}
class Move(val from: Int, val to: Int, val length: Int) {}
val moves = input.split("\n\n")
.last()
.split("\n")
.filter { !it.isBlank() }
.map {
it.split(" ")
.map {
try {
it.toInt()
} catch(e: Exception) {
null
}
}
.filterNotNull()
}
.map {
Move(it[1], it[2], it[0])
}
// Part One
var result1 = indices.map {
val index = it
rows.reversed().map {
if (it.isBlank()) {
null
} else {
it[charIndices[index - 1]]
}
}
.filter { it.toString() != " " }
.filterNotNull()
.toMutableList()
}
for (move in moves) {
val fromIndex = move.from - 1
val toIndex = move.to - 1
for (i in 0..move.length - 1) {
if (!result1[fromIndex].isEmpty()) {
val box = result1[fromIndex].removeLast()
result1[toIndex] += box
}
}
}
val output1 = result1.map { it.last() }
println(output1.joinToString(""))
// Part Two
var result2 = indices.map {
val index = it
rows.reversed().map {
if (it.isBlank()) {
null
} else {
it[charIndices[index - 1]]
}
}
.filter { it.toString() != " " }
.filterNotNull()
.toMutableList()
}
for (move in moves) {
val fromIndex = move.from - 1
val toIndex = move.to - 1
if (!result2[fromIndex].isEmpty()) {
val boxes = (0..move.length - 1).map {
result2[fromIndex].removeLast()
}
.reversed()
result2[toIndex] += boxes
}
}
val output2 = result2.map { it.last() }
println(output2.joinToString(""))