fun main() { val map = CharGrid.read("day10.txt").map { it.digitToInt() } val part1 = map.findCoordinatesOf(0) .fold(0) { acc, start -> acc + map.pathsToTop(start).size } println("Part 1: $part1") } fun Grid.findCoordinatesOf(value: T) = sequence { for (y in 0...pathsToTop(coordinate: Grid.Coordinate): Set { val height = get(coordinate) if (height == 9) { return setOf(coordinate) } return Direction.entries .map { coordinate.step(it) } .filter { it in this && this[it] == height + 1 } .fold(emptySet()) { acc, next -> acc + pathsToTop(next) } }