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)
ーーーーーーーーーーーーーーーーーーーー
作中でのボウリングのスコアを計算するためにテキトーにプログラム書いてみた 久野真一 @kuno1234
★で称える
この小説が面白かったら★をつけてください。おすすめレビューも書けます。
カクヨムを、もっと楽しもう
カクヨムにユーザー登録すると、この小説を他の読者へ★やレビューでおすすめできます。気になる小説や作者の更新チェックに便利なフォロー機能もお試しください。
新規ユーザー登録(無料)簡単に登録できます
この小説のタグ
関連小説
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます