diff options
Diffstat (limited to 'aoc-2021-kotlin/src/Utils.kt')
-rw-r--r-- | aoc-2021-kotlin/src/Utils.kt | 32 |
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() |