読者です 読者をやめる 読者になる 読者になる

毛のはえたようなもの

インターネット的なものをつらつらとかきつらねる。

Ruby

Problem 25

フィボナッチ数列において1000桁になる最初の項の番号を答えよ. Problem 25 - PukiWiki limit = 10**999 a = [1,2] num = 3 while a.last < limit num += 1 a =[a[1], a[0]+a[1]] end p num 答え:4782

Problem 20

n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。100! の各桁の数字の合計を求めよ。 Problem 20 - PukiWiki def make_array(num) array = [] while num > 0 num,tmp = num.divmod(10) array.unshift(tmp) end return array end sum = 1 (2..100).each{|n| sum…

Problem 67

no18と同じ。ただし100行。 Problem 67 - PukiWiki 答え:7273

Problem 18

以下の三角形の頂点から下まで移動するとき、その数値の合計の最大値は23になる。 3 7 5 2 4 6 8 5 9 3この例では 3 + 7 + 4 + 9 = 23以下の三角形を頂点から下まで移動するとき、その最大の合計値を求めよ。(省略) Problem 18 - PukiWiki triangle = [[75],…

Problem 16

215 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。 同様にして、21000 の各数字の合計を求めよ。 Problem 16 - PukiWiki def make_array(num) array = [] while num > 0 num,tmp = num.divmod(10) array.unshift(tmp) end return a…

Problem 15

2 × 2 のマス目の左上からスタートした場合、引き返しなしで右下にいくルートは 6 つある。 では、20 × 20 のマス目ではいくつのルートがあるか。 Problem 15 - PukiWiki こりゃ高校数学だな。(これとか。) def fact(n) return 1 if n ==1 or n ==0 ans =1…

Problem 14

正の整数に以下の式で繰り返し生成する数列を定義する。 n → n/2 (n が偶数) n → 3n + 1 (n が奇数) 13からはじめるとこの数列は以下のようになる。 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 13から1まで10個の項になる。この数列はどのような数字からは…

Problem 13

以下の50桁の数字100個の総和の上位10桁を求めよ。 Problem 13 - PukiWiki def make_array(num) array = [] while num > 0 num,tmp = num.divmod(10) array.unshift(tmp) end return array end array =[ 37107287533902102798797998220837590246510135740250…

Problem 12

三角数の数列は自然数の和で表わされ、7番目の三角数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 である。 7番目の三角数である28は5つ以上の約数をもつ。 では、501 個以上の約数をもつ最初の三角数はいくらか。 Problem 12 - PukiWiki 素数の流用がおおいっす。 de…

Problem 11

上の 20 × 20 の数字のなか、赤くマークされた数字の積は 26 × 63 × 78 × 14 = 1788696 となる。 上下左右斜めのいずれかの方向で連続する4つの数字の積のうち最大のものを求めよ。 Problem 11 - PukiWiki def horizontal_max(mat) ans = mat[0][0]*mat[0][1…

Problem 10

0以下の素数の和は2 + 3 + 5 + 7 = 17である. 200万以下の全ての素数の和を計算しなさい. Problem 10 - PukiWiki include Math def prime_number?(num,pl) return false if num < 2 return true if num==2 || num==3|| num==5|| num==7|| num==11|| num==13|…

Problem 9

ピタゴラスの三つ組(ピタゴラスの定理を満たす整数)とはa Problem 9 - PukiWiki sum =1000 (1..(sum/3).to_i).each{|a| ((a+1)..((sum-a)/2).to_i).each{|b| c = sum -a -b p a*b*c and return if (a**2 + b**2 == c ** 2) } } 答え:31875000

Problem 8

以下の1000桁の数字から5つの連続する数字を取り出してその積を計算する。そのような積の中で最大のものの値はいくらか Problem 8 - PukiWiki def make_array(num) array = [] while num > 0 num,tmp = num.divmod(10) array.unshift(tmp) end return array …

Problem 7

素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり、6番目の素数は 13 である。 10001 番目の素数を求めよ。 Problem 7 - PukiWiki $p_list =[] limit =10001 def prime_number?(num) return false if num < 2 k = true (3..num).each{|i| $p_list.e…

Problem 6

最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。 1² + 2² + ... + 10² = 385 (1 + 2 + ... + 10)² = 3025これらの数の差は 3025 - 385 = 2640 となる。同様にして、最初の100個の自然数について和の二乗と二乗の和の差を求めよ。 Pro…

Problem 5

2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。 では、1 から 20 までの整数全てで割り切れる数字の中で最小の値はいくらになるか。 Problem 5 - PukiWiki まず範囲内各数字の因数のリストを作って、…

Problem 4

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。 では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。 Problem 4 - PukiWiki a+b=一定のときaとbの値が…

Problem 3

13195 の素因数は 5、7、13、29 である。 600851475143 の素因数のうち最大のものを求めよ。 Problem 3 - PukiWiki 処理が重すぎて600851475143では途中で止まってしまう模様。当たり前だよねえ。 limit =13195 max = 0 (2..limit).each{|i| if limit%i == 0…

Problem 2

フィボナッチ数列の項は前の2つの項の和である。最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...数列の項が400万を超えない範囲で、偶数の項の総和を求めよ。 Problem 2 - PukiWiki 数列の項の値が400万…

Problem 1

10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、これらの合計は 23 になる。 同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。 Problem 1 - PukiWiki sum = 0 limit =999 (1..limit).ea…

再びHit and Blow(数当てゲーム)

id:takkan_mさんが私のコードを書き直してくださったようです。 ついかっとなった - takkan_mのNo planな日常主に私がzip,inject,配列の操作がなれていないのがよく分かりました。うう。 Ruby特有のメソッドをきちんとかけるようになるまでが長そうだ…。どう…

Hit and Blow(数当てゲーム)

書いても誰も得しないソース公開所ゴミ箱ことこのサイト。 今日は数当てゲームです。 ルール 超有名ですが一応説明を。 互いに相異なる4つ数を当てるゲーム。用意された答えにたいしてユーザが数を入力する。その際、種類のみ合っていた(Blow)数と、場所…

制約プログラミング

トラバ先から。 制約論理型言語は、問題の解き方(アルゴリズム)を記述するのではなく、解に求められる制約を静的、宣言的に記述して、コンピュータに探索させて解を求めるというもの。Wikipediaの制約プログラミング説明、がなかなかいいな。 http://www.i…

N-queens問題(エイトクイーンズ問題)

帰省したり旅行にいったりと2週間ほどUbuntu氏がネットにつながらない状況にあり、結局のところRuby(とこのブログ)を放置していたのでした。リハビリをかねて昔むかし解いたN-queens問題をRubyで書き直してみました。うむ、リハビリというほどRuby書いていな…

再びN-queens問題(エイトクイーンズ問題)

勘違い id:ujihisa兄さんのレスにしたがって書いてみましたが動きません。どしてかなぁ なんだかどえらい間違いをしている気がします。あほの子 class Queens 中略 def calc(i=0) @answer = 0 calc(0) end def calc(i) if i == @boardSize # print(" show_an…

ライフゲーム

86世代の方たちがテスト期間中にライフゲームの実装をしていたのでたのしそーだなーと指をくわえてみていました。暇になったのでRubyでやってみよーの巻。詳しい問題設定などは下記 どう書く:どう書く?org Wikipedia:ライフゲーム - Wikipedia 実装 なんだ…

どうでもいい私の進捗状況

昨日:たのしいRuby14〜17章練習問題を解いた 今日:昔C/C++/Pythonで書いたプログラムをRubyで書き直し、ブログの過去記事群に追加してみた。 半年前のコードが汚く見えた。しかしこれは本当にゴミだな。 ちなみにこのブログのidの由来は「ゴミのような私の…

Rubyはじめました/ふぃぼなち。

たのしいRuby 第2版 Rubyではじめる気軽なプログラミング作者: 高橋征義,後藤裕蔵出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/08/05メディア: 単行本購入: 11人 クリック: 350回この商品を含むブログ (264件) を見る某id:hayamizにRubyかPerl…

範囲に収まる数字の数(Rubyの場合)

number = Array.new File.open("../data_d.txt","r"){|f| f.each{|line| (line.to_i != 0) && (number << line.to_i) } } width = number.shift number.sort! maxTimes =0 number.size.times{|i| tmpTimes = 0 i.upto(number.size){|j| if (number[j].to_i -…

相異なる文の種類の数(Rubyの場合)

ary = Array.new File.open("../data_c.txt","r"){|f| f.each{|line| line.chomp! !="" && ary << line } } p (ary|ary).size Rubyみじかっ

重複する数字を表示(Rubyの場合)

number = Array.new File.open("../data_a.txt","r"){|f| f.each{|line| (line.to_i != 0) && (number << line.to_i) } } number.sort! 1.upto(number.size-1){|i| (number[i-1] == number[i]) && (p number[i])}

k番目に大きい数(Rubyの場合)

flag = 0 k,n = 0, 0 number = Array.new File.open("../data_d.txt","r"){|f| f.each{|line| if flag == 0 n,k = line.split.collect{|i| i.to_i} flag = 1 elsif flag && number.size < n number << line.to_i end } } p number.sort_by{|i| -i}[k-1]

右側折り返し(Rubyの場合)

maxlength = 72 File.open("../data_c.txt","r"){|f| f.each{|line| line.chomp! (line.size/maxlength).times{|i| line[maxlength*(i+1)+i,0] = "\n" } print line+"\n" } }

精度を要する割り算(Rubyの場合)

File.open("../data_b.txt","r"){|f| f.each{|line| item = line.split.collect{|i| i.to_i} if item[0] !=0 && item[1] !=0 printf("%0.10f\n",item[0].to_f/item[1]) end } }

標準入力から一行づつ読み込み最大値を表示(Rubyの場合)

ar = Array.new File.open("../data_a.txt","r"){|f| f.each{|num| ar << num.chomp!.to_i } } p ar.max