Skip to content

Commit b93432e

Browse files
committed
Refactor
1 parent 1698c2a commit b93432e

File tree

1 file changed

+41
-34
lines changed

1 file changed

+41
-34
lines changed

src/Day8.kt

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,56 +15,61 @@ fun main() {
1515
parsedInput.forEach {
1616
val map = it.first().groupBy { it.length }.toSortedMap()
1717

18-
val one = map[2]!!.first()
19-
val four = map[4]!!.first()
20-
val seven = map[3]!!.first()
21-
val eight = map[7]!!.first()
18+
val segments = Array(10) { "" }
19+
20+
// 1, 4, 7, 8 have unique segment count
21+
segments[1] = map[2]!!.first().sortAlphabetically()
22+
segments[4] = map[4]!!.first().sortAlphabetically()
23+
segments[7] = map[3]!!.first().sortAlphabetically()
24+
segments[8] = map[7]!!.first().sortAlphabetically()
25+
26+
val digitsWith5Segments = map[5]!!.toMutableList() // 2, 3, 5 have 5 segments
2227

23-
val digitsWith5Segments = map[5]!!.toMutableList()
2428
// 3 =
25-
val threeIndex = digitsWith5Segments.indexOfFirst { it.contains(one[0]) && it.contains(one[1]) }
26-
val three = digitsWith5Segments.removeAt(threeIndex)
29+
val threeIndex = digitsWith5Segments.indexOfFirst { it.contains(segments[1][0]) && it.contains(segments[1][1]) }
30+
segments[3] = digitsWith5Segments.removeAt(threeIndex).sortAlphabetically()
2731

2832
// 5 =
29-
val fiveHint = four.replace(one[0].toString(), "").replace(one[1].toString(), "")
33+
val fiveHint = segments[4].replace(segments[1][0].toString(), "").replace(segments[1][1].toString(), "")
3034
val fiveIndex = digitsWith5Segments.indexOfFirst { it.contains(fiveHint[0]) && it.contains(fiveHint[1]) }
31-
val five = digitsWith5Segments.removeAt(fiveIndex)
35+
segments[5] = digitsWith5Segments.removeAt(fiveIndex).sortAlphabetically()
3236

3337
// 2 =
34-
val two = digitsWith5Segments.first()
38+
segments[2] = digitsWith5Segments.first().sortAlphabetically()
39+
40+
val digitsWith6Segments = map[6]!!.toMutableList() // 0, 6, 9 have 6 segments
3541

36-
val digitsWith6Segments = map[6]!!.toMutableList()
3742
// 6 =
38-
val sixIndex = digitsWith6Segments.indexOfFirst { it.contains(one[0]) xor it.contains(one[1]) }
39-
val six = digitsWith6Segments.removeAt(sixIndex)
43+
val sixIndex = digitsWith6Segments.indexOfFirst { it.contains(segments[1][0]) xor it.contains(segments[1][1]) }
44+
segments[6] = digitsWith6Segments.removeAt(sixIndex).sortAlphabetically()
4045

4146
// 0
42-
val zeroHint = eight
43-
.replace(four[0].toString(), "")
44-
.replace(four[1].toString(), "")
45-
.replace(four[2].toString(), "")
46-
.replace(four[3].toString(), "")
47-
.replace(seven[0].toString(), "")
48-
.replace(seven[1].toString(), "")
49-
.replace(seven[2].toString(), "")
47+
val zeroHint = segments[8]
48+
.replace(segments[4][0].toString(), "")
49+
.replace(segments[4][1].toString(), "")
50+
.replace(segments[4][2].toString(), "")
51+
.replace(segments[4][3].toString(), "")
52+
.replace(segments[7][0].toString(), "")
53+
.replace(segments[7][1].toString(), "")
54+
.replace(segments[7][2].toString(), "")
5055
val zeroIndex = digitsWith6Segments.indexOfFirst { it.contains(zeroHint[0]) && it.contains(zeroHint[1]) }
51-
val zero = digitsWith6Segments.removeAt(zeroIndex)
56+
segments[0] = digitsWith6Segments.removeAt(zeroIndex).sortAlphabetically()
5257

5358
// 9 =
54-
val nine = digitsWith6Segments.first()
59+
segments[9] = digitsWith6Segments.first().sortAlphabetically()
5560

5661
val output = it[1].map {
57-
when (it.toCharArray().sorted().joinToString("")) {
58-
zero.toCharArray().sorted().joinToString("") -> 0
59-
one.toCharArray().sorted().joinToString("") -> 1
60-
two.toCharArray().sorted().joinToString("") -> 2
61-
three.toCharArray().sorted().joinToString("") -> 3
62-
four.toCharArray().sorted().joinToString("") -> 4
63-
five.toCharArray().sorted().joinToString("") -> 5
64-
six.toCharArray().sorted().joinToString("") -> 6
65-
seven.toCharArray().sorted().joinToString("") -> 7
66-
eight.toCharArray().sorted().joinToString("") -> 8
67-
nine.toCharArray().sorted().joinToString("") -> 9
62+
when (it.sortAlphabetically()) {
63+
segments[0] -> 0
64+
segments[1] -> 1
65+
segments[2] -> 2
66+
segments[3] -> 3
67+
segments[4] -> 4
68+
segments[5] -> 5
69+
segments[6] -> 6
70+
segments[7] -> 7
71+
segments[8] -> 8
72+
segments[9] -> 9
6873
else -> throw Error()
6974
}.toString()
7075

@@ -85,3 +90,5 @@ fun main() {
8590
println(part2(input))
8691
}
8792

93+
private fun String.sortAlphabetically() = toCharArray().sorted().joinToString("")
94+

0 commit comments

Comments
 (0)