2011年6月26日日曜日

オイラープロジェクトを解く~Project Euler Problem4 数字の回文?

クリアーo(´д`)o
You are the 87527th person to have solved this problem.

ミスりまくった。問題良く読もう・・・
にしても、なれればループより書くの早いね!

【前提】
Scalaで解く!

【問題】
素因数分解の問題

【解法】
本当は、x*(100 to 999)をフィルターした結果のmaxをリストにして再度maxにしたかったけど、
空っぽのListにはmaxなどのメソッドは使えないらしく、エラーになる。
まあ、ループしてるわけではないのであまり処理速度は変わらない気がするけど・・・

object  euler4 {


//全部展開するのは無駄すぎるので没にしたソース
// def main(args:Array[String]) :Unit 
//  println((100 to 999).toList.map(x=>(100 to 999).toList.map(y=>x*y)).flatten.filter(x=>checkKaisu(x)).max)
// def chekDigit(lst:List[Char]) :List[Char] = 
//   if(lst.length > 1 && lst.head==lst.last) chekDigit(lst.init.tail) else lst
// def checkKaisu(num:Long) :Boolean =
//      if(chekDigit(num.toString.toCharArray.toList).length < 2) true else false


def main(args:Array[String]) :Unit =
   println((100 to 999).toList.map(x=>(100 to 999).toList.map(y=>x*y).filter(z=>checkKaisu(z))).flatten.max )
def chekDigit(lst:List[Char]) :List[Char] = 
   if(lst.length > 1 && lst.head==lst.last) chekDigit(lst.init.tail) else lst
def checkKaisu(num:Long) :Boolean= 
  if(chekDigit(num.toString.toCharArray.toList).length < 2) true else false
}

0 件のコメント:

コメントを投稿