Hatena::Grouptopcoder

Gus@topcoder

topcoderのid:gusmachineの記録です。普段の日記は揺動散逸日記をどうぞ。

2012-10-21scalaをcodeforcesで練習してみる。

Scalaの練習をしてみました。

Programming In Scalaを去年買って、さらにいつだったかの勉強会で物理本も頂いたのにも関わらず

Scalaを全く書いていませんでした。その反省として適当に書いてみます。

まずはScalaが動くCodeforcesで過去問をときます。目標はdiv-2レベルをすぐに書ける程度。

基本

先駆者がいるので参考にします。

まず実行可能ファイルを書く方法から。

object Main1 {
  def main(args: Array[String]) = {
    // impl
  }
}

singleton object (日本語だと特異オブジェクト)を作って、main(args: Array[String])を定義するだけです。

あるいは、上のリンク先のように

object Main2 extends App {
   // impl
}

とするだけです。

その他は次のようにすれば簡単なプログラムは書けます。

  • 読み込みはjava.util.Scannerを使います。
  • 書き込みはprintlnになんでも渡せます。あるいは"%07d".format(n)等。printfも使えます。

Scala文字列メモを参考にしました。

解答例

一番最初の練習問題、A. Theatre Square を解いてみました。一回IntでオーバーフローによるWAを食らったりしましたが完成。

import java.util.Scanner
object A extends App {
  val sc = new Scanner(System.in)

  val m = sc.nextLong
  val n = sc.nextLong
  val a = sc.nextLong
  println(((m + a - 1) / a) * ((n + a - 1) / a))
}

App? Application?

ところで、手元にあるProgramming in Scala 2nd ed. ではAppではなくApplicationを使っています。この差は一体?

scala.Applicationを継承したクラスは、mainメソッドを書かなくても、クラス起動後に処理が実行される。

尚、起動時に渡したパラメータは利用できない。

Scala2.9で導入されるscala.Appでは利用できるという噂あり。

via. scala.Application | Scalaの標準ライブラリを使ってみる | mwSoft

つまりAppは新しいということですね。これかな: scala.App

ゲスト



トラックバック - http://topcoder.g.hatena.ne.jp/gusmachine/20121021