Sha256: 38ec6b65740178cba7046ed2196da5f5002168d8e431f2551d09ba27d9efc3db

Contents?: true

Size: 747 Bytes

Versions: 65

Compression:

Stored size: 747 Bytes

Contents

case class Luhn(number: Long) {
  lazy val checkDigit: Int = (number % 10).toInt

  lazy val addends: List[Int] = {
    val zippedDigits = digits(number).zipWithIndex.reverse

    zippedDigits.map{case (m, i) => if (isOdd(i)) dbl(m) else m}
  }

  lazy val checksum: Int = addends.sum % 10

  lazy val isValid: Boolean = checksum % 10 == 0

  lazy val create: Long = {
    val m = number * 10
    val luhn = Luhn(m)

    if (luhn.isValid) m else m + (10 - luhn.checksum)
  }

  private def digits(n: Long): List[Int] = n match {
    case 0 => Nil
    case _ => List((n % 10).toInt) ++ digits(n / 10)
  }

  private def dbl(n: Int) = {
    val dbled = n * 2

    if (dbled > 10) dbled - 9 else dbled
  }

  private def isOdd(i: Int) = i % 2 == 1
}

Version data entries

65 entries across 65 versions & 1 rubygems

Version Path
trackler-2.0.6.9 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.8 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.7 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.6 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.5 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.4 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.3 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.2 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.1 tracks/scala/exercises/luhn/example.scala
trackler-2.0.6.0 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.18 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.17 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.16 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.15 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.14 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.13 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.12 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.11 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.10 tracks/scala/exercises/luhn/example.scala
trackler-2.0.5.9 tracks/scala/exercises/luhn/example.scala