Scala版も書いてみた

 Scala版も書いてみました。遅延リストでシンプルにする事が出来ています。

 GitHubのリポジトリだと、 https://github.com/kuno-maichi/novels/blob/master/0020_%E4%BD%9C%E4%B8%AD%E3%81%A7%E3%81%AE%E3%83%9C%E3%82%A6%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%83%86%E3%82%AD%E3%83%88%E3%83%BC%E3%81%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%81%9F/episode_0003.scala

 に書いてあります。


ーーーーーーーーーーーーーーーーーーーー

val Skipped = -1

def lazyListOf(data : List[List[Int]]): LazyList[Int] = data match {

  case Nil => LazyList.empty

  case frame::next => frame.filter{_ != Skipped}.to(LazyList) #::: lazyListOf(next)

}

def makeFrames(scores: LazyList[Int]): LazyList[Int] = scores match {

  case 10 #:: (next@(x#::y#::_)) => (10 + x + y) #:: makeFrames(next)

  case a #:: b #:: (next@(x#::_)) if a + b == 10=> (10 + x) #:: makeFrames(next)

  case a #:: b #:: next => (a + b) #:: makeFrames(next)

}


val datum = List(

  List(10, Skipped),

  List(10, Skipped),

  List(10, Skipped),

  List(10, Skipped),

  List(10, Skipped),

  List(10, Skipped),

  List(10, Skipped),

  List(10, Skipped),

  List(10, Skipped),

  List(10, 10, 10)

)


val frames = makeFrames(lazyListOf(datum))

println(frames.take(10).sum)

ーーーーーーーーーーーーーーーーーーーー

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

作中でのボウリングのスコアを計算するためにテキトーにプログラム書いてみた 久野真一 @kuno1234

★で称える

この小説が面白かったら★をつけてください。おすすめレビューも書けます。

カクヨムを、もっと楽しもう

この小説のおすすめレビューを見る

この小説のタグ