Petit à petit, sortie de ce que j'ai appris grâce au Codewar récemment lancé
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Finish the solution so that it returns the sum of all the multiples of 3 or 5 below the number passed in. Note: If the number is a multiple of both 3 and 5, only count it once. Also, if a number is negative, return 0(for languages that do have them)
Créez une méthode qui additionne les nombres inférieurs à 10 et est un multiple de 3 et 5 et renvoie cette valeur. Si le nombre est un multiple de 3 et 5 (un multiple de 15), ne comptez qu'une seule fois.
Presque presque la réponse de FizzBuzz. https://qiita.com/Fendo181/items/425293e8e638d7fd7cea
def solution(number)
i = 1
nums_array = []
number -= 1
number.times do
nums_array << i
i += 1
end
sum = 0
nums_array.each do |num|
if num % 3 == 0 && num % 5 == 0
sum += num
elsif num % 3 == 0
sum += num
elsif num % 5 == 0
sum += num
end
end
sum
end
«Je vois» et «Qu'est-ce que c'est?» Sont mélangés.
def solution(number)
(1...number).select {|i| i%3==0 || i%5==0}.inject(:+)
end
(1...number)
Comme vous pouvez le voir dans l'énoncé du problème, je recherche le multiple correspondant avec un nombre inférieur à ** 10, donc je le donne comme «1 ... 10», qui n'inclut pas le dernier nombre. Au fait, si vous voulez inclure le dernier nombre, utilisez «1..10» et deux virgules.
select {|i| i%3==0 || i%5==0}
Chaque élément est évalué par blocs par select, et les éléments multiples de 3 ou 5 sont extraits. Même s'il s'agit d'un multiple de 15, il ne sera pas compté deux fois.
inject(:+)
inject est une méthode qui se répète comme chacun et map. Autrement dit, nous essayons d'ajouter les résultats de l'extraction d'éléments qui sont des multiples de 3 ou 5 dans l'ordre. Il semble que les calculs itératifs soient souvent utilisés.
https://blog.toshimaru.net/ruby-inject/
Objet Array.inject {|valeur initiale,élément|Traitement des blocs}
array = 1..6
array.inject (0){ |sum,num| p sum+=num}
=>1
3
6
10
15
21
#inject(0)0 définit la valeur initiale de la somme.
#Cependant, comme le paramètre par défaut de l'argument inject est 0, il peut être omis comme indiqué ci-dessous.
#num est un élément du tableau
Une méthode pratique qui peut être abrégée comme suit en passant un opérateur sous forme de symbole.
array = 1..10
array.inject {|sum,num| sum+=num}
=> 55
#Même résultat même si omis
array = 1..10
array.inject(:+)
=> 55
J'avais l'habitude d'essayer de calculer dans ce bloc en utilisant la méthode ʻeach`, mais à l'avenir j'utiliserai la méthode inject lors du calcul par traitement itératif! !! !!
Recommended Posts