aboutsummaryrefslogtreecommitdiff
path: root/aoc-2021-kotlin/src/Utils.kt
diff options
context:
space:
mode:
Diffstat (limited to 'aoc-2021-kotlin/src/Utils.kt')
-rw-r--r--aoc-2021-kotlin/src/Utils.kt32
1 files changed, 32 insertions, 0 deletions
diff --git a/aoc-2021-kotlin/src/Utils.kt b/aoc-2021-kotlin/src/Utils.kt
new file mode 100644
index 0000000..f0a420b
--- /dev/null
+++ b/aoc-2021-kotlin/src/Utils.kt
@@ -0,0 +1,32 @@
+import java.io.File
+
+fun readInputAsLines(name: String): List<String> = File("src", "$name.txt").readLines()
+
+fun readInputAsString(name: String): String = File("src", "$name.txt").readText()
+
+fun readInputAsNumbers(name: String): List<Int> = readInputAsLines(name).map(String::toInt)
+
+fun readInputAsBitLists(name: String): List<List<Int>> =
+ readInputAsLines(name)
+ .map { binaryString -> binaryString.toList().map { bit -> bit.toString().toInt() } }
+
+data class Pos2D(val x: Int, val y: Int) {
+ companion object {
+ val directions4 = listOf(Pos2D(0, 1), Pos2D(1, 0), Pos2D(0, -1), Pos2D(-1, 0))
+ val directions8 = directions4 + listOf(
+ Pos2D(1, 1),
+ Pos2D(1, -1),
+ Pos2D(-1, -1),
+ Pos2D(-1, 1),
+ )
+ }
+
+ operator fun plus(other: Pos2D) = Pos2D(x + other.x, y + other.y)
+}
+
+fun parseToMap(input: List<String>): Map<Pos2D, Int> =
+ input.flatMapIndexed { y, line ->
+ line.mapIndexed { x, char ->
+ Pos2D(x, y) to char.toString().toInt()
+ }
+ }.toMap()