DEV Community

Discussion on: Daily Challenge #55 - Building a Pile of Cubes

Collapse
 
lprakashv profile image
Lalit Vatsal • Edited

Recursive, functional approach using lazy streams in Scala:

  import scala.annotation.tailrec

  def calculate(m: Long): Int = {
    val cubes = Stream.from(1).map(_.toLong).map(i => i * i * i)

    def sumOfFirstXCubes(x: Int): Long = cubes.take(x).sum

    @tailrec
    def rec(i: Int, predicate: Long => Boolean): (Int, Long) = {
      val t = sumOfFirstXCubes(i)
      if (predicate(t)) rec(i + 1, predicate) else (i, t)
    }

    rec(1, _ < m) match {
      case (i, x) if x == m => i
      case _ => 0
    }
  }