2008-04-01から1ヶ月間の記事一覧

Problem 11 (written in Ruby)

頭の中で整理しきれなかったので冗長に記述してしまっている。 table = 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 1…

Problem 10 (written in Ruby)

def prime?(n) return false if n % 2 == 0 lim = Math.sqrt(n).to_i 3.step(lim, 2) do |i| return false if n % i == 0 end return true endtotal = 0 1.upto(2000000) do |n| total += n if prime?(n) endp totalProblem: http://odz.sakura.ne.jp/projec…

Problem 9 (written in Ruby)

馬鹿正直に3重ループでやるとめちゃくちゃ時間がかかる。 ちなみにこれを実行するとa,bが入れ替わった2パターンが出力される。 問題文には"唯一の組み合わせ"とあったので焦った。 (1..1000).each do |a| (1..1000).each do |b| if (1000-a-b)*(1000-a-b) ==…

Problem 8 (written in Ruby)

n = 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 6689664895044524452316173185640…

Problem 7 (written in Ruby)

def prime?(n) return false if n % 2 == 0 lim = Math.sqrt(n).to_i 3.step(lim, 2) do |i| return false if n % i == 0 end return true endprime_numbers = [] i = 2 while prime_numbers.size prime_numbers i += 1 endp prime_numbers.lastProblem: htt…

Problem 6 (written in Ruby)

sigma = (1..100).to_a.inject(0){|r,n|r+=n} puts sigma ** 2 - (1..100).to_a.map{|n|n*n}.inject(0){|r,n|r+=n} Problem: http://odz.sakura.ne.jp/projecteuler/index.php?Problem%206

Problem 5 (written in Ruby)

numbers = (1..20).to_a numbers.delete(1) optimized_numbers = [] numbers.each do |n| bigger = false (n..numbers[-1]).each do |m| if m % n == 0 && n bigger = true break end end optimized_numbers endoptimized_numbers = optimized_numbers.sort.…

Problem 4 (written in Ruby)

max, fa, fb = 0, 0, 0 (100..999).each do |a| (100..999).each do |b| s = (a*b).to_s if s[0..s.length/2] == s[s.length/2..-1].reverse then max = a*b if max fa, fb = a, b end end endputs "#{max} = #{fa} * #{fb}"Problem: http://odz.sakura.ne.j…

Problem 3 (written in Ruby)

# 2で割り切れないことは自明である n = 600851475143 factors = [] i = 0 while true do devided = false 3.step(n, 2) do |i| if n % i == 0 then factors n = n / i devided = true break end end break if not devided endfactors.each{|n|puts n}Proble…

Problem 2 (written in Ruby)

def fib i = 1 p = 0 n = 0 while true do i += 1 n = i + p p = n yield p end endtotal = 0 fib do |n| total += n if n % 2 == 0 if 4000000 total -= n break end endputs totalProblem: http://odz.sakura.ne.jp/projecteuler/index.php?Problem%202

Problem 1 (written in Ruby)

(1..1000).select{|n| n % 3 == 0 || n % 5 == 0}.inject(0){|r,i|r+i}Problem: http://odz.sakura.ne.jp/projecteuler/index.php?Problem%201

Project Euler

Project Eulerが面白いのでしばらくこれをネタにプログラムを晒していこうと思います。 間違っているかもしれないので間違いを見つけたら適当に教えて頂ければ幸いです。 息抜きに楽しくやりたいので, 楽しくかけるRubyで当面は書いていきます。高速化のため…

Problem 14 (written in Ruby)

こちらも計算量がかなり多い様子。 2.18GHz Core Duoで2分ほど。 def create_pattern(n) ret = [] while n != 1 do ret if n & 0x01 == 1 then n = 3*n+1 else n = n / 2 end end ret return ret endlongest_n = 0 longest = 0 (1...999999).each do |n| pat…

Problem 13 (written in Ruby)

numbers = 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 2306758820753934617117198…

Problem 12 (written in Ruby)

こいつは手強かった。 普通にやると計算爆発を起こして数十分単位の時間が必要になります。 三角数の数学的な性質を使うと1分以内に解けるようになりました。 def factors(n) ret = [] 1.upto(n) do |i| ret end return ret endtn = 0 i = 0 prev = [1,2] wh…

はじめまして

学生だったり、プログラマーだったりする者です。 自分が忘れそうなことを書いていきます。