Je me demande s'il y a quelque chose que je peux poster sur Qiita. J'ai déterré le script quand j'ai essayé Project Euler il y a plus de 6 ans, donc Écrivez-le (2e)
L'environnement d'exécution est le suivant. ruby 2.6.3p62 macOS Catalina 10.15.6 zsh
・ S'il est pair, divisez par 2. ・ Pour les nombres impairs, multipliez par 3 et ajoutez 1. Une séquence de nombres qui va comme ça. Ce n'est pas parce que le nombre est grand que la séquence de nombres devient longue, ce qui est étrange. Voir ci-dessous pour une explication détaillée et précise. https://ja.wikipedia.org/wiki/コラッツの問題
collatz_number.rb
def get_collatz_next_number(num)
if num.even? then
return num / 2
elsif num == 1 then
return nil
else
return (num * 3) + 1
end
end
def create_collatz_sequence(num)
cltz_ary = Array.new
new_num = num
cltz_ary.push new_num
new_num = get_collatz_next_number(new_num)
while !(new_num.nil?) do
cltz_ary.push new_num
new_num = get_collatz_next_number(new_num)
end
return cltz_ary
end
p create_collatz_sequence (26)
p "===="
p create_collatz_sequence (27)
p "===="
p create_collatz_sequence (28)
p "===="
p create_collatz_sequence (1652)
Le résultat sera le suivant.
% ruby collatz_number.rb
[26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
"===="
[27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
"===="
[28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
"===="
[1652, 826, 413, 1240, 620, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
Séquence de nombres dans laquelle un nombre arbitraire est la somme du nombre qui le précède et du nombre qui le précède. Impression que cela apparaît souvent comme un problème du programme à côté du pétillement et du buzz. Voir ci-dessous pour une explication détaillée et précise. https://ja.wikipedia.org/wiki/フィボナッチ数
fibonacci_sequence.rb
def create_fibonacci_sequence( term1, term2, max_term)
fibo_ary = Array.new
fibo_ary.push term1
fibo_ary.push term2
new_num = 0
i = 2
new_num = fibo_ary[i-1] + fibo_ary[i-2]
while new_num <= max_term do
fibo_ary.push new_num
i += 1
new_num = fibo_ary[i-1] + fibo_ary[i-2]
end
return fibo_ary
end
p create_fibonacci_sequence(0,1,10946)
Le résultat de l'exécution est le suivant.
% ruby fibonacci_sequence.rb
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946]
C'est une suite de nombres qui augmente comme +2, +3, +4, +5, .... En ce qui concerne le nombre de points, il semble être appelé un nombre triangulaire car il est disposé dans un triangle régulier. C'est à la mode. Voir ci-dessous pour une explication détaillée et précise. https://ja.wikipedia.org/wiki/三角数
triangle_number.rb
def create_triangle_number (max_number)
terms = Array.new
i = 0
current_number = 1
while current_number <= max_number do
terms.push current_number
i += 1
current_number = terms[i - 1] + i + 1
end
return terms
end
p create_triangle_number (1000)
Le résultat de l'exécution est le suivant.
ruby triangle_number.rb
[1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990]
c'est tout.
Recommended Posts