ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Mar 03

[Scala]Pancake Sort

by zuqqhi2 at 2013年3月3日
Pocket

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
   }
}

Related Posts

  • 2013年5月20日 [Scala]線形補間でデータのスケーリング やりたいこと Scalaの勉強で簡単なデータ列の加工をしてみる。 データの大きさを合わせる為に、 線形補間を使ってデータ列を0から1の値にスケーリングする。 線形補間の式はこれ 最低値からの差分を出して、最も大きな差分の割合を計算する。 ソースコ […]
  • [Play][Scala]PlayFrameworkでリクエスト駆動のバッチを作る2016年12月21日 [Play][Scala]PlayFrameworkでリクエスト駆動のバッチを作る はじめに この記事はScala Advent Calendar […]
  • 2014年2月26日 [Android][Scala][Windows7]ScalaでAndroidアプリを作る 目的 JavaよりScalaの方が個人的に開発しやすいので ScalaでAndroidアプリを作成できるようにしてみる。 本当はUbuntuでやりたかったけれど、VirtualBoxからUSBで接続したAndroidが認識できなかったためWindowsで。 0. […]
  • 2014年9月7日 [sbt]プラグインの利用方法 目的 Scala Sbt でプラグインを使う方法のメモ。 Googleで検索しても門外漢用の記事がなくて苦労したため、メモしてみた。 環境 OSLinux www4322gi 3.2.0-64-generic #97-Ubuntu SMP […]
  • 2015年3月29日 ScalaとSbtのインストール Scala Sbt インストール Scalaはオブジェクト指向言語と関数型言語の両方の特徴を併せ持つハイブリッドな言語。 SbtはScalaのビルドツール。プロジェクト・パッケージ・ライブラリ管理もしてくれる便利なツール。 環境 OSLinux […]
  • 2013年6月1日 [Scala][Play2]EC2上にインストール なんとなくscalaが使いたくなって入れてみた。 以上。 I would like to use scala, so I installed play framework. That's […]
Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.