Day 1 Scala

This commit is contained in:
Paul-Henri Froidmont 2023-12-04 08:33:25 +01:00
parent 13a8e74189
commit 069a9e35f6
Signed by: phfroidmont
GPG key ID: BE948AFD7E7873BE
3 changed files with 1043 additions and 3 deletions

View file

@ -4,4 +4,4 @@ import scala.io.Source
import scala.util.Using
def loadInput(dayNumber: String) =
Using.resource(Source.fromFile(s"input/day$dayNumber"))(_.mkString)
Using.resource(Source.fromFile(s"input/day$dayNumber"))(_.mkString.trim)

View file

@ -1,5 +1,46 @@
package aoc
package day01
import scala.annotation.tailrec
val dayNumber = "01"
@main def part1: Unit =
println(loadInput("01"))
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