import java.io.File fun main(args: Array) { part2() } fun part2() { val data = File("input_2.txt").readLines() val map = hashMapOf( Pair("one", "1"), Pair("two", "2"), Pair("three", "3"), Pair("four", "4"), Pair("five", "5"), Pair("six", "6"), Pair("seven", "7"), Pair("eight", "8"), Pair("nine", "9"), ) var sum = 0 data.forEach { line -> var convertedString: String = line for (value in listOf("one", "two", "three", "four", "five", "six", "seven", "eight", "nine")) { Regex(value).findAll(line).map { it.range }.forEach { range -> convertedString = convertedString.replaceRange(range.first, range.first + 1, map[value].toString()) } } println(convertedString) val filteredString = convertedString.filter {c: Char -> c.isDigit()} println(filteredString) sum += if (filteredString.length < 2) { //println("${numbers[0]}${numbers[0]}") "${filteredString[0]}${filteredString[0]}".toInt() } else { //println("${numbers[0]}${numbers[numbers.length - 1]}") "${filteredString[0]}${filteredString[filteredString.length - 1]}".toInt() } /*val ranges = Regex("one").findAll(line).map { it.range }//.joinToString("|") if (ranges.any()) { println(line.replaceRange(ranges.elementAt(0).first..ranges.elementAt(0).first, "1")) } else { println(line) }*/ } println("Sum: $sum") } fun part1() { val data = File("input.txt").readLines() var sum = 0 data.forEach { line -> val numbers = line.filter { c: Char -> c.isDigit() } sum += if (numbers.length < 2) { //println("${numbers[0]}${numbers[0]}") "${numbers[0]}${numbers[0]}".toInt() } else { //println("${numbers[0]}${numbers[numbers.length - 1]}") "${numbers[0]}${numbers[numbers.length - 1]}".toInt() } } print(sum) }