Sha256: 21efe468b04e84a5e9b08bc3c7033b7d30cf4637b890a735dd50b6699ba8c91f

Contents?: true

Size: 1.36 KB

Versions: 97

Compression:

Stored size: 1.36 KB

Contents

object FoodChain {
  private lazy val parts = Vector(("fly", ""),
    ("spider", "It wriggled and jiggled and tickled inside her.\n"),
    ("bird", "How absurd to swallow a bird!\n"),
    ("cat", "Imagine that, to swallow a cat!\n"),
    ("dog", "What a hog, to swallow a dog!\n"),
    ("goat", "Just opened her throat and swallowed a goat!\n"),
    ("cow", "I don't know how she swallowed a cow!\n"),
    ("horse", "She's dead, of course!\n\n"))

  private def animal(i: Int) = parts(i)._1
  private def result(i: Int) = parts(i)._2
  private def finalVerse(i: Int) = i == parts.length - 1

  private def verseInternal(n: Int) = {
    "I know an old lady who swallowed a %s.\n".format(animal(n)) +
      (if (finalVerse(n)) result(n)
       else {
        result(n) +
          (for {
            i <- List.range(0, n).reverse
          } yield {
            if ("bird".equals(animal(i + 1)))
              "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"
            else
              "She swallowed the %s to catch the %s.\n".format(animal(i + 1), animal(i))
          }).mkString +
          result(0) + "I don't know why she swallowed the fly. Perhaps she'll die.\n\n"
      })
  }

  def verse(n: Int): String = verseInternal(n - 1)

  def verse(n: Int, m: Int): String = (for {i <- List.range(n - 1, m)} yield {verseInternal(i)}).mkString
}

Version data entries

97 entries across 97 versions & 1 rubygems

Version Path
trackler-2.2.1.107 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.106 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.105 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.104 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.103 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.102 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.101 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.100 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.99 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.98 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.97 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.96 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.95 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.94 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.93 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.92 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.91 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.90 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.89 tracks/scala/exercises/food-chain/example.scala
trackler-2.2.1.88 tracks/scala/exercises/food-chain/example.scala