aoc2023/src/day01.scala

47 lines
1.2 KiB
Scala
Raw Normal View History

2023-12-04 08:02:51 +01:00
package aoc
package day01
2023-12-04 08:33:25 +01:00
import scala.annotation.tailrec
val dayNumber = "01"
2023-12-04 08:02:51 +01:00
@main def part1: Unit =
2023-12-04 08:33:25 +01:00
println(part1(loadInput(dayNumber)))
@main def part2: Unit =
println(part2(loadInput(dayNumber)))
def part1(input: String): String =
input
.split("\n")
.map(line =>
line.find(_.isDigit).get.toString + line.findLast(_.isDigit).get.toString
)
.map(_.toInt)
.sum
.toString
def part2(input: String): String =
val digitsList = (1 to 9).map(_.toString)
val digitsMap =
List("one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
.zip(digitsList)
.prependedAll(digitsList.zip(digitsList))
@tailrec def findFistDigit(line: String): String =
digitsMap.find((key, _) => line.startsWith(key)) match
case Some((_, digit)) => digit
case None => findFistDigit(line.substring(1))
@tailrec def findLastDigit(line: String): String =
digitsMap.find((key, _) => line.endsWith(key)) match
case Some((_, digit)) => digit
case None => findLastDigit(line.substring(0, line.length - 1))
input
.split("\n")
.map(line => findFistDigit(line) + findLastDigit(line))
.map(_.toInt)
.sum
.toString