aboutsummaryrefslogtreecommitdiff
path: root/aoc-2021-kotlin/src/Utils.kt
diff options
context:
space:
mode:
authortchojnacki <tomaszchojnacki2001@gmail.com>2022-08-14 16:57:25 +0200
committertchojnacki <tomaszchojnacki2001@gmail.com>2022-08-14 16:57:25 +0200
commitee60e254ed7eed4c0624fcd651575726f15f6e29 (patch)
treecfe18acffc41f99a749d843db9bf17aaf1c505fe /aoc-2021-kotlin/src/Utils.kt
parent402ee25e6e63a40e292faf25c9e164ef5688d4a5 (diff)
downloadgleam_aoc2020-ee60e254ed7eed4c0624fcd651575726f15f6e29.tar.gz
gleam_aoc2020-ee60e254ed7eed4c0624fcd651575726f15f6e29.zip
Finish day 22
Diffstat (limited to 'aoc-2021-kotlin/src/Utils.kt')
-rw-r--r--aoc-2021-kotlin/src/Utils.kt18
1 files changed, 18 insertions, 0 deletions
diff --git a/aoc-2021-kotlin/src/Utils.kt b/aoc-2021-kotlin/src/Utils.kt
index 4f78a1f..2be34ac 100644
--- a/aoc-2021-kotlin/src/Utils.kt
+++ b/aoc-2021-kotlin/src/Utils.kt
@@ -26,6 +26,24 @@ data class Pos2D(val x: Int, val y: Int) {
operator fun minus(other: Pos2D) = Pos2D(x - other.x, y - other.y)
}
+data class Pos3D(val x: Int, val y: Int, val z: Int) {
+ companion object {
+ val zero = Pos3D(0, 0, 0)
+ val unique = Pos3D(1, 2, 3)
+
+ fun fromString(string: String) = string
+ .split(",")
+ .map(String::toInt)
+ .let { Pos3D(it[0], it[1], it[2]) }
+ }
+
+ operator fun unaryMinus() = Pos3D(-x, -y, -z)
+
+ operator fun plus(other: Pos3D) = Pos3D(x + other.x, y + other.y, z + other.z)
+
+ operator fun minus(other: Pos3D) = Pos3D(x - other.x, y - other.y, z - other.z)
+}
+
fun parseToMap(input: List<String>): Map<Pos2D, Int> =
input.flatMapIndexed { y, line ->
line.mapIndexed { x, char ->