Scala

"upTo(1,5) => List(1,2,3,4,5)"みたいな関数 upTo を定義しようとして怒られた。Int と BigInt で使えるようにしたかったんだけど。 これは OK。 object UpTo { def upToInt(x:Int,y:Int):List[Int] = { def up(n:Int):List[Int] = if (y==n) List(n) else …

Project Euler: Problem41

前回のやつはスタックオーバーフローするので scala で適当に書き直し。ひどいコードだなぁ。 今回ので"(1 to 5)"とか書けることを知った。 object Problem41 { val digit : Int = 9 val end : Int = List.range(digit,1-1,-1).foldLeft(0)((x,y) => x*10+y)…

Project Euler: Problem38

残念ながら死ぬほど汚いんだけど…。 object Problem38 { def isPandigital(x:String):Boolean = { for (c <- x) if (c=='0') return false var a=0 var b=0 while (a<8) { b = a+1 while (b<9) { if (x(a)==x(b)) return false b += 1 } a += 1 } return tru…

scala で id 関数

Scala の id 関数(というか polymorphic な関数)は以下のように書く。Java っぽい。 scala> def id[T](x:T) : T = x id: [T](T)T scala> id:yoshihiro503 さんに、id(id) ができるかどうかやってみと言われてたので、 scala> id(id) <console>:6: error: missing argu</console>…

Project Euler: Problem34

n桁の数と9!*nを比べて、9!*nが追いつけなくなるnをまず見つける。するとnは7だとわかるので、7桁まで探せば十分。 /* 9!*1 = 362880 9!*2 = 725760 ... 9!*7 = 2540160 (7keta) 9!*8 = 2903040 (7keta) */ object Problem34 { def fact(n:int) : int = if (n…

ScalaCheck と Eclipse

Scala でのテストには、SUnit と ScalaCheck というものがある。SUnit は普通のユニットテストで、ScalaCheck は Haskell の QuickCheck みたいなものである。今日は ScalaCheck を使ってみようとしたんだけど、うまくいかなかった。 まず ScalaCheck をイン…

Project Euler: Problem30

5乗の和の場合には、n桁の数値を考えると 9^5*n までの数値しか作れない。 9^5 * 1 = 59049 9^5 * 2 = 118098 9^5 * 3 = 177147 9^5 * 4 = 236196 9^5 * 5 = 295245 9^5 * 6 = 354294 9^5 * 7 = 413343 ... 5乗の和の側では7桁以上の数値は作れない。なので6…

Project Euler: Problem45

昔書いたやつの BigInt 版。なんか一瞬で解けた。BigInt すごーい。 object Problem45 { class Generator (gen : BigInt => BigInt) extends Iterator[BigInt] { val this.gen = gen; var n = 0; def hasNext : Boolean = true; def next : BigInt = { n += …

Project Euler: Problem92

Scala の練習。 object Problem92 { def step(m : Int) : Int = { var result : Int = 0 var n : Int = m while ( n != 0 ) { result += (n % 10) * (n % 10) n /= 10 } return result } def loop(n: Int) : Boolean = { if ( n==1 ) return false else if (…

Project Euler: Problem45

なんだか Haskell だとうまくいかないので Scala で。実際には eclipse プラグインに scala モードがあるのを知ってなんか書いてみたかっただけなんですが。Haskell 版をそのまま移植した説が濃厚。 イテレータを継承してみたりした。コンストラクタの書き方…

Problem 10

えぇーい、力技じゃい。問題を解く場合にはコンピュータが頑張らなければいけないのであって、人間は頑張ってはいけないのだ!(意味が違う) object Problem10 { def natural = new Iterator[Int] { var num = 1 def hasNext : Boolean = true def next : Int…

Project Euler: Problem 12

Scala で超素直に書いてみた、が、止まらない。ドンマイ。Iterator - うなの日記を参考に Scala でイテレータを使ってみた。 object Problem12 { def divisors(n:Int) : Int = { var c = 1 var result = 0 while ( c <= n/2 ) { if ( n % c == 0 ) result +=…

現実逃避的に書いたので

http://blog.tmorris.net/scala-exercises-for-beginners/ せっかくなので貼っておく。 object Exercise { def succ(n: Int) = n + 1 def pred(n: Int) = n - 1 def add(x:Int, y:Int) : Int = if ( x == 0 ) y else add(pred(x), succ(y)) def sum(xs: List…