added year of 2023
This commit is contained in:
73
2023/03/Kotlin/src/Main.kt
Normal file
73
2023/03/Kotlin/src/Main.kt
Normal file
@@ -0,0 +1,73 @@
|
||||
import java.awt.Point
|
||||
import java.io.File
|
||||
|
||||
fun main() {
|
||||
val input = File("Input.txt").readLines()
|
||||
var sum = 0
|
||||
val numbers = ArrayList<PartNumber>()
|
||||
input.forEachIndexed { indexY, line ->
|
||||
var isDigitFlag = 0
|
||||
var startIndex = 0
|
||||
var number = ""
|
||||
line.forEachIndexed { indexX, c: Char ->
|
||||
if (c.isDigit()) {
|
||||
if (isDigitFlag == 0) {
|
||||
startIndex = indexX
|
||||
}
|
||||
number += c
|
||||
isDigitFlag = 1
|
||||
} else if (isDigitFlag == 1) {
|
||||
isDigitFlag = -1
|
||||
}
|
||||
if (isDigitFlag == -1) {
|
||||
numbers.add(PartNumber(number.toInt(), indexY, startIndex, indexX - 1))
|
||||
number = ""
|
||||
isDigitFlag = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
val symbols = ArrayList<Point>()
|
||||
input.forEachIndexed { y, line ->
|
||||
line.forEachIndexed { x, c ->
|
||||
if (!c.isDigit() && c != '.') {
|
||||
symbols.add(Point(x, y))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
symbols.forEach { cord ->
|
||||
val around = getSurroundingCords(cord)
|
||||
numbers.forEach { partNumber ->
|
||||
val seen = ArrayList<PartNumber>()
|
||||
around.forEach { p ->
|
||||
if (p.x in partNumber.startIndex..partNumber.endIndex && p.y == partNumber.y && !seen.contains(partNumber)){
|
||||
//println(partNumber.number)
|
||||
seen.add(partNumber)
|
||||
sum += partNumber.number
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
println(sum)
|
||||
}
|
||||
|
||||
fun getSurroundingCords(p: Point): List<Point> {
|
||||
return listOf(
|
||||
Point(p.x - 1, p.y - 1),
|
||||
Point(p.x, p.y - 1),
|
||||
Point(p.x + 1, p.y - 1),
|
||||
Point(p.x - 1, p.y),
|
||||
Point(p.x + 1, p.y),
|
||||
Point(p.x - 1, p.y + 1),
|
||||
Point(p.x, p.y + 1),
|
||||
Point(p.x + 1, p.y + 1)
|
||||
)
|
||||
}
|
||||
|
||||
data class PartNumber(
|
||||
val number: Int,
|
||||
val y: Int,
|
||||
val startIndex: Int,
|
||||
val endIndex: Int
|
||||
)
|
||||
Reference in New Issue
Block a user