Skip to content

Instantly share code, notes, and snippets.

@waynejo
Created December 22, 2023 12:40
Show Gist options
  • Save waynejo/753604005c91a574d8a781461e9b0092 to your computer and use it in GitHub Desktop.
Save waynejo/753604005c91a574d8a781461e9b0092 to your computer and use it in GitHub Desktop.
import java.io.FileInputStream
import scala.io.StdIn
def solve1_1(values: Vector[String]): Int =
values.map(x => {
val firstNumber = x.find(_.isDigit).get
val lastNumber = x.findLast(_.isDigit).get
s"$firstNumber$lastNumber".toInt
}).sum
def convertToNumber(s: String, index: Int): Option[Int] =
val numberStrings = Array("one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
if s(index).isDigit then
Some(s(index).toString.toInt)
else
numberStrings.zipWithIndex.collectFirst({
case pair if s.startsWith(pair._1, index) =>
pair._2 + 1
})
def solve1_2(values: Vector[String]): Int =
values.map(x => {
val numbers = x.indices.flatMap(convertToNumber(x, _))
val firstNumber = numbers.head
val lastNumber = numbers.last
firstNumber * 10 + lastNumber
}).sum
@main def solve1(): Unit =
val in = new FileInputStream("example1-2.in")
System.setIn(in)
val inputs = Iterator.continually(StdIn.readLine())
.takeWhile(line => null != line)
.toVector
println(solve1_1(inputs))
println(solve1_2(inputs))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment