Ruby
Hashのキーや値の設定の練習
h0 = Hash.new
x = 1
while 2**x < 1000 do
h0[x] = 2**x
x +=1
end
p h0
出力結果
{1=>2, 2=>4, 3=>8, 4=>16, 5=>32, 6=>64, 7=>128, 8=>256, 9=>512}
for i in (2..10) do
h1 = Hash.new
x = 1
while i**x < 1000 do
h1[x] = i**x
x +=1
end
p h1
end
出力結果
{1=>2, 2=>4, 3=>8, 4=>16, 5=>32, 6=>64, 7=>128, 8=>256, 9=>512}
{1=>3, 2=>9, 3=>27, 4=>81, 5=>243, 6=>729}
{1=>4, 2=>16, 3=>64, 4=>256}
{1=>5, 2=>25, 3=>125, 4=>625}
{1=>6, 2=>36, 3=>216}
{1=>7, 2=>49, 3=>343}
{1=>8, 2=>64, 3=>512}
{1=>9, 2=>81, 3=>729}
{1=>10, 2=>100}
2014年3月21日金曜日
140321
Ruby
Stringクラスで用意されているincludeメソッドを使用する問題
「3の倍数と3の付く数字の時だけアホになります」という男がいたとして、
1から1000まで数字を数えた場合、アホになった回数を求めよ。
N=1000
s=0
for i in (1..N) do
if i%3 == 0 || i.to_s.include?('3') then
s += 1
end
end
p s
Stringクラスで用意されているincludeメソッドを使用する問題
「3の倍数と3の付く数字の時だけアホになります」という男がいたとして、
1から1000まで数字を数えた場合、アホになった回数を求めよ。
N=1000
s=0
for i in (1..N) do
if i%3 == 0 || i.to_s.include?('3') then
s += 1
end
end
p s
出力結果
513
2014年3月16日日曜日
140316
Ruby
「数の事典」に
548,834
548,834=5^6+4^6+8^6+8^6+3^6+4^6
と載っていた。
「6桁の数字で各桁の6乗の和が元の数字になるものは、
548,834だけである」
ということを確かめてみる。
for a in 1..9
for b in 0..9
for c in 0..9
for d in 0..9
for e in 0..9
for f in 0..9
x=a**6+b**6+c**6+d**6+e**6+f**6
y=a*10**5+b*10**4+c*10**3+d*10**2+e*10+f
if x == y then
puts "#{x}"
end
end
end
end
end
end
end
出力結果
548834
「数の事典」に
548,834
548,834=5^6+4^6+8^6+8^6+3^6+4^6
と載っていた。
「6桁の数字で各桁の6乗の和が元の数字になるものは、
548,834だけである」
ということを確かめてみる。
for a in 1..9
for b in 0..9
for c in 0..9
for d in 0..9
for e in 0..9
for f in 0..9
x=a**6+b**6+c**6+d**6+e**6+f**6
y=a*10**5+b*10**4+c*10**3+d*10**2+e*10+f
if x == y then
puts "#{x}"
end
end
end
end
end
end
end
出力結果
548834
2014年3月15日土曜日
140315(2)
Ruby
原始ピタゴラス数の思い出
小学生の頃
算数や図工の時間になんとなく使用していたが、証明には至らず。
中学生の頃
ぶっ飛んだ授業(数学)で一般的に
{x,y}={2ab,a^2-b^2},z=a^2+b^2
と表されることを習う。
思い出はこれくらいにして、
1≦x<y<z≦100なる原始ピタゴラス数を求めてみる。
for x in 1..98
for y in x..99
z = Math.sqrt(x**2+y**2)
if z == z.to_i && z < 101 then
z = z.to_i
if x.gcd(y) == 1 && y.gcd(z) == 1 && z.gcd(x) == 1 then
puts "#{x},#{y},#{z}"
end
end
end
end
互いに素の部分がカッコ悪いので、injectメソッドを使うと、
class Array
def gcd
self.inject{|a, b| a.gcd(b)}
end
end
for x in 1..98
for y in x..99
z = Math.sqrt(x**2+y**2)
if z == z.to_i && z < 101 then
z = z.to_i
if [x, y, z].gcd == 1 then
puts "#{x},#{y},#{z}"
end
end
end
end
となりスッキリする。
出力結果
3,4,5
5,12,13
7,24,25
8,15,17
9,40,41
11,60,61
12,35,37
13,84,85
16,63,65
20,21,29
28,45,53
33,56,65
36,77,85
39,80,89
48,55,73
65,72,97
原始ピタゴラス数の思い出
小学生の頃
算数や図工の時間になんとなく使用していたが、証明には至らず。
中学生の頃
ぶっ飛んだ授業(数学)で一般的に
{x,y}={2ab,a^2-b^2},z=a^2+b^2
と表されることを習う。
思い出はこれくらいにして、
1≦x<y<z≦100なる原始ピタゴラス数を求めてみる。
for x in 1..98
for y in x..99
z = Math.sqrt(x**2+y**2)
if z == z.to_i && z < 101 then
z = z.to_i
if x.gcd(y) == 1 && y.gcd(z) == 1 && z.gcd(x) == 1 then
puts "#{x},#{y},#{z}"
end
end
end
end
互いに素の部分がカッコ悪いので、injectメソッドを使うと、
class Array
def gcd
self.inject{|a, b| a.gcd(b)}
end
end
for x in 1..98
for y in x..99
z = Math.sqrt(x**2+y**2)
if z == z.to_i && z < 101 then
z = z.to_i
if [x, y, z].gcd == 1 then
puts "#{x},#{y},#{z}"
end
end
end
end
となりスッキリする。
出力結果
3,4,5
5,12,13
7,24,25
8,15,17
9,40,41
11,60,61
12,35,37
13,84,85
16,63,65
20,21,29
28,45,53
33,56,65
36,77,85
39,80,89
48,55,73
65,72,97
140315
Ruby
他の勉強が全く出来なかったが、「たのしいRuby第4版」を読み終える。
分からないところはネットで調べながらだったが、少なくとも書いてある
内容については、この書籍一冊で理解できた。
【注意点】
書籍とサポートページのプログラムリストに多少の誤植あり。
【スケジュール】
仕事の日は、
「昼食休みにプログラムリスト以外の部分を読み、
帰って、実際に実行して確認」
というやり方で勉強。
2/23 1〜5章 ←挿絵があったのは、最初のページだけだったな…
2/24 6章
2/25 7章
2/26 8章の途中
2/27
2/28
3/ 1 8章の途中〜9章
3/ 2 10〜12章
3/ 3 13章 ←この章の図がとても親切だと感じた。
3/ 4 14章
3/ 5 15章
3/ 6
3/ 7
3/ 8
3/ 9 16〜17章 ←16章(正規表現)は大事。
3/10 18章
3/11 19章
3/12 20章
3/13 21章
3/14
3/15 22〜23章
他の勉強が全く出来なかったが、「たのしいRuby第4版」を読み終える。
分からないところはネットで調べながらだったが、少なくとも書いてある
内容については、この書籍一冊で理解できた。
【注意点】
書籍とサポートページのプログラムリストに多少の誤植あり。
【スケジュール】
仕事の日は、
「昼食休みにプログラムリスト以外の部分を読み、
帰って、実際に実行して確認」
というやり方で勉強。
2/23 1〜5章 ←挿絵があったのは、最初のページだけだったな…
2/24 6章
2/25 7章
2/26 8章の途中
2/27
2/28
3/ 1 8章の途中〜9章
3/ 2 10〜12章
3/ 3 13章 ←この章の図がとても親切だと感じた。
3/ 4 14章
3/ 5 15章
3/ 6
3/ 7
3/ 8
3/ 9 16〜17章 ←16章(正規表現)は大事。
3/10 18章
3/11 19章
3/12 20章
3/13 21章
3/14
3/15 22〜23章
2014年3月10日月曜日
140310
Ruby
Dir.globメソッドを勉強中、ワイルドカードで混乱。
*
空文字列を含む任意の文字列と一致。
**/
Dir.globメソッドを勉強中、ワイルドカードで混乱。
*
空文字列を含む任意の文字列と一致。
*/ の0回以上の繰り返しを意味し、 ディレクトリを
再帰的にたどってマッチを行う。
再帰的にたどってマッチを行う。
例えば、foo/**/ はfoo/bar/、foo/bar/hogeなど、
配下の全サブディレクトリとマッチ。
2014年3月9日日曜日
140309
Ruby
配列から要素の取り出し
140302でも同じことをしたが、もう一度やってみる。
ary=[0,1,1,2,3,5,8,13,21,34,55,89,144]
puts "#{ary}"
puts "#{ary.select{|i| i%2==1 }}"
ary.each_with_index do |i, j|
if i%2==1 then
puts "#{j+1},#{i}"
end
end
出力結果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
[1, 1, 3, 5, 13, 21, 55, 89]
2,1 ←元の配列における順番も出力。
3,1
5,3
6,5
8,13
9,21
11,55
12,89
配列から要素の取り出し
140302でも同じことをしたが、もう一度やってみる。
ary=[0,1,1,2,3,5,8,13,21,34,55,89,144]
puts "#{ary}"
puts "#{ary.select{|i| i%2==1 }}"
ary.each_with_index do |i, j|
if i%2==1 then
puts "#{j+1},#{i}"
end
end
出力結果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
[1, 1, 3, 5, 13, 21, 55, 89]
2,1 ←元の配列における順番も出力。
3,1
5,3
6,5
8,13
9,21
11,55
12,89
2014年3月6日木曜日
140306
Ruby
Array#permutationを用いて、下の覆面算を解いてみる。
SEND
+MORE
-----
MONEY
+MORE
-----
MONEY
(0..9).to_a.permutation(8) do |s, e, n, d, m, o, r, y|
next if s == 0 or m == 0
send = s*1000 + e*100 + n*10 + d
more = m*1000 + o*100 + r*10 + e
money = m*10000 + o*1000 + n*100 + e*10 + y
if send+more == money then
print "#{send} + #{more} = #{money}"
end
end
2014年3月2日日曜日
140302
Ruby
イテレータ
irb(main):001:0> [1,2,3,4,5].map{|i|i*2}
=> [2, 4, 6, 8, 10]
irb(main):002:0> [1,2,3,4,5].map{|i|i%2==1}
=> [true, false, true, false, true]
irb(main):003:0> [1,2,3,4,5].select{|i|i%2==1}
=> [1, 3, 5]
イテレータ
irb(main):001:0> [1,2,3,4,5].map{|i|i*2}
=> [2, 4, 6, 8, 10]
irb(main):002:0> [1,2,3,4,5].map{|i|i%2==1}
=> [true, false, true, false, true]
irb(main):003:0> [1,2,3,4,5].select{|i|i%2==1}
=> [1, 3, 5]
2014年3月1日土曜日
登録:
投稿 (Atom)