object DigitIncrementer {
def incrementByOne(digits: List[Int]): List[Int] = {
val reversed = digits.reverse
val (result, carry) = reversed.foldLeft((List[Int](), 1)) {
case ((acc, carry), digit) =>
val sum = digit + carry
if (sum == 10) (0 :: acc, 1)
else (sum :: acc, 0)
}
if (carry == 1) 1 :: result else result
}
def main(args: Array[String]): Unit = {
val digits = List(9, 9, 9)
val incremented = incrementByOne(digits)
print("Result: ")
println(incremented.mkString(" "))
}
}
/*
run:
Result: 1 0 0 0
*/