Sha256: 2d16d5dce695fa3a4b9459908499e796e6895b8a0632a469df54ba4580a3d9ce

Contents?: true

Size: 923 Bytes

Versions: 74

Compression:

Stored size: 923 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(0))
    else {
      fromDigits(0, inputBase, inputDigits) match {
        case None => None
        case x if x.sum == 0 => Some(List(0))
        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

74 entries across 74 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.179 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.178 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.177 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.176 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.175 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.174 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.173 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.172 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.171 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.170 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.169 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.167 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.166 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.165 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.164 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.163 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.162 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.161 tracks/scala/exercises/all-your-base/example.scala
trackler-2.2.1.160 tracks/scala/exercises/all-your-base/example.scala