Tech Tips

  1. プログラミング
  2. 1053 view

[Scala]Pancake Sort

Image Video of Pancake Sort

Source code of scala

object PancakeSort {
   def main(args: Array[String]) {
      // Prepare input values
      val arr = List(23, 10, 20, 11, 12, 6, 7)
      // Do pancake sort
      val result = pancakeSort((for(x <- 0 to arr.size-1) yield (x, arr(x))).toList, arr.size)
      // Output the result
      println("Input")
      arr.foreach(x => println(x))
      println("Output:")
      result.foreach(x => println(x._2))
   }

   def pancakeSort(arr: List[(Int, Int)], n:Int):List[(Int, Int)] = {
      // Apply flip operator from idx 0th to nth
      if (n <= 0) return arr else return pancakeSort(flips(arr.filter(x => x._1 <= n)) ::: arr.filter(x => x._1 > n), n-1)
   }

   def flips(arr: List[(Int, Int)]):List[(Int, Int)] = {
      // Get index of max value
      val max_index = arr.reduceLeft{ (a,b) => if (a._2 > b._2) (a._1, a._2) else (b._1, b._2) }._1
      // Place max value to tail
      val tmp_arr = (arr.filter(a => a._1 <= max_index).reverse ::: arr.filter(a => a._1 > max_index)).reverse
      // Refine value's index
      return (for (x <- 0 to tmp_arr.size-1) yield (x, tmp_arr(x)._2)).toList
   }
}

プログラミングの最近記事

  1. Udacity Self-Driving Car Engineer Nanodegree …

  2. D3.js v7 で点・線・テキスト・ツールチップ・ズームを設定する方法

  3. ソフトウェアシステムアーキテクチャ構築の原理 第2版を読みました

  4. TF-Agents で独自の環境を利用する方法

  5. Amazon Lex V2 で入力させる内容を分岐する方法

関連記事

PAGE TOP