Sha256: a99a0ba59aa4153a7829a2104307566533f64f46d49a565570acf267a6ba3021

Contents?: true

Size: 675 Bytes

Versions: 396

Compression:

Stored size: 675 Bytes

Contents

import scala.annotation.tailrec

object Grains {
  type Grains = BigInt
  type ChessboardSquare = Int

  private val ChessboardSquares = 64

  def square(cbSquare: ChessboardSquare): Option[Grains] = {
    def isValidChessboardSquare(n: Int) =
      1 <= n && n <= ChessboardSquares

    def powerOfTwo(n: Int): BigInt = {
      @tailrec
      def loop(n: Int, acc: BigInt): BigInt =
        if (n == 0) acc
        else loop(n - 1, acc * 2)

      loop(n, 1)
    }

    val pred = (_:Int) - 1

    Option(cbSquare) filter isValidChessboardSquare map pred.andThen(powerOfTwo)
  }

  def total: Grains =
    (1 to ChessboardSquares) flatMap (square _).andThen(_.toList) sum
}

Version data entries

396 entries across 396 versions & 1 rubygems

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