Sha256: 9ca2dfafdd34cff5403997534932f93131a856800eea46084ce0ab460041dc37

Contents?: true

Size: 918 Bytes

Versions: 322

Compression:

Stored size: 918 Bytes

Contents

import scala.annotation.tailrec

object AllYourBase {
  def rebase(inputBase: Int, inputDigits: List[Int], outputBase: Int): Option[List[Int]] = {
    if (inputBase < 2 || outputBase < 2)
      None
    else if (inputDigits.isEmpty)
      Some(List())
    else {
      fromDigits(0, inputBase, inputDigits) match {
        case None => None
        case Some(x) => Some(toDigits(outputBase, x, List()))
      }
    }
  }

  @tailrec
  private def fromDigits(acc: Int, base: Int, digits: List[Int]): Option[Int] = {
    digits match {
      case x::xs => if (x >= 0 && x < base)
                      fromDigits(acc * base + x, base, xs)
                    else
                      None
      case Nil => Option(acc)
    }
  }

  @tailrec
  private def toDigits(base: Int, x: Int, acc: List[Int]): List[Int] = {
    x match {
      case 0 => acc
      case _ => toDigits(base, x / base, x % base :: acc)
    }
  }
}

Version data entries

322 entries across 322 versions & 1 rubygems

Version Path
trackler-2.2.1.104 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.103 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.102 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.101 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.100 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.99 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.98 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.97 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.96 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.95 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.94 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.93 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.92 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.91 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.90 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.89 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.88 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.87 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.86 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.85 tracks/scala/exercises/all-your-base/example.scala