Skip to content

Commit 201ac13

Browse files
committed
Add 2023 Day 03 Part 1 solution
1 parent e0f614f commit 201ac13

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

adventofcode2023/Day03.kt

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package adventofcode2023
2+
3+
import java.io.File
4+
5+
object Day03 {
6+
fun part1(inputs: List<String>) {
7+
val firstDigitChecks = setOf(
8+
Pair(-1, 0),
9+
Pair(-1, -1),
10+
Pair(0, -1),
11+
Pair(-1, 1),
12+
Pair(0, 1)
13+
)
14+
val centralDigitChecks = setOf(
15+
Pair(0, 1),
16+
Pair(0, -1)
17+
)
18+
val lastDigitChecks = setOf(
19+
Pair(1, 0),
20+
Pair(1, 1),
21+
Pair(0, 1),
22+
Pair(1, -1),
23+
Pair(0, -1)
24+
)
25+
26+
fun checkPositions(x: Int, y: Int, checks: Set<Pair<Int, Int>>): Boolean {
27+
return checks.any {
28+
val checkX = x + it.first
29+
val checkY = y + it.second
30+
31+
if (checkX < 0 || checkY < 0
32+
|| checkX >= inputs[0].length || checkY >= inputs.size
33+
) {
34+
false
35+
} else {
36+
inputs[checkY][checkX] != '.'
37+
}
38+
}
39+
}
40+
41+
fun checkPartNumberDigit(x: Int, y: Int): Boolean =
42+
(x > 0 && !inputs[y][x - 1].isDigit() && checkPositions(x, y, firstDigitChecks)
43+
|| x < inputs[0].length - 1 && !inputs[y][x + 1].isDigit() && checkPositions(x, y, lastDigitChecks)
44+
|| checkPositions(x, y, centralDigitChecks))
45+
46+
var sum = 0
47+
48+
for (y in inputs.indices) {
49+
var x = 0
50+
while (x < inputs[0].length) {
51+
if (inputs[y][x].isDigit()) {
52+
var isPartNumber = checkPartNumberDigit(x, y)
53+
var number = inputs[y][x].toString()
54+
55+
while (x < inputs[0].length - 1 && inputs[y][x + 1].isDigit()) {
56+
x++
57+
number += inputs[y][x]
58+
if (!isPartNumber && checkPartNumberDigit(x, y)) isPartNumber = true
59+
}
60+
61+
if (isPartNumber) sum += number.toInt()
62+
}
63+
x++
64+
}
65+
}
66+
67+
println(sum)
68+
}
69+
}
70+
71+
fun main() {
72+
val inputs = File("resources/adventofcode2023/Day03.txt").readLines()
73+
Day03.part1(inputs)
74+
}

0 commit comments

Comments
 (0)