ラベル Project euler の投稿を表示しています。 すべての投稿を表示
ラベル Project euler の投稿を表示しています。 すべての投稿を表示

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
}

2011年6月10日金曜日

オイラープロジェクトを解く~Project Euler Problem3 素因数分解

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

一発で解けた・・・良かった。
でも、もっと綺麗にかけないものか・・・

【前提】
Scalaで解く!

【問題】
素因数分解の問題
http://projecteuler.net/index.php?section=problems&id=3

【解法】

object  euler3 {
def main(args:Array[String]) :Unit = println(warikire(600851475143L,2))


//割り切れるかどうか繰り返し判定していく関数
def warikire(i:Long,k:Long):Long={
if(i>k) { 
if (i%k==0) 
{
println(k)
warikire(i/k,k)
} else {
warikire(i,k+1)
}
}
else k
}
}

2011年6月9日木曜日

オイラープロジェクトを解く~Project Euler Problem2

クリアーo(´д`)o
You are the 確認し損ねた…th person to have solved this problem.

【前提】
Scalaで解く!

【問題】
http://projecteuler.net/index.php?section=problems&id=2

【解法】

object euler2 {
  def main(args : Array[String]) : Unit =
  {
   println(fibonacci(4000000).map(x=>if(gusu(x)) x else 0).sum)
  }
  def fibonacci(max:Int) :List[Int]= {
   addNext(List(1,2),max)
  }
  /**
   * リストにリストの最後から2番目と最後の数値を足した値を返す。
   */
  def addNext(lst : List[Int],max :Int) :List[Int] =
    if((lst.init.last + lst.last) < max) {addNext(lst :+ (lst.init.last + lst.last),max)} else {lst}
 
  def gusu(i:Int)=i/2==i.toDouble/2
 
}

2011年6月3日金曜日

フィボナッチ数の偶数番目の項の合計値を求める。

Project Euler Problem1 の問題を読み間違えてしまった・・・
もったいないのでメモ



Scalaでフィボナッチ数の偶数番目の項の合計値を求める。
※ほんとは偶数の項の合計を求める・・・o(´д`)o




object euler_2 {
  def main(args : Array[String]) : Unit = 
  {
 println(fibonacciNew(4000000))


 println(fibonacciNew(4000000).sum)
  }
  def fibonacciNew(max:Int):List[Int] = addNextNext(List(2),1,max)
  /**
   * リストに一個飛ばしでフィボナッチ数を追加する。
   */
    def addNextNext(lst : List[Int],before :Int,max :Int) :List[Int] = 
    if((lst.last * 2 + before) < max) {addNextNext(lst :+ (lst.last * 2 + before),lst.last + before ,max)} 
    else {lst}
    
}

2011年5月30日月曜日

オイラープロジェクトを解く~Project Euler Problem1

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


【前提】
Scalaで解く!


【問題】
http://projecteuler.net/index.php?section=problems&id=1


【解法】

object euler_1 {

def main(args : Array[String]) : Unit = 
print((1 to 999).toList.map(x=>check(x)).sum)
def warikire(i:Int,k:Int)=
i/k==i.toDouble/k.toDouble
def check(i:Int):Int=
if (warikire(i,3) || warikire(i,5)) i else 0
}