Nach und nach wird das ausgegeben, was ich durch den kürzlich gestarteten Codewar gelernt habe
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)
Erstellen Sie eine Methode, die die Zahlen kleiner als 10 summiert und ein Vielfaches von 3 und 5 ist und den Wert zurückgibt. Wenn die Zahl ein Vielfaches von 3 und 5 ist (ein Vielfaches von 15), zählen Sie nur einmal.
Fast die Antwort von 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
"Ich verstehe" und "Was ist das?" Sind gemischt.
def solution(number)
(1...number).select {|i| i%3==0 || i%5==0}.inject(:+)
end
(1...number)
Wie Sie in der Problemstellung sehen können, suche ich nach dem entsprechenden Vielfachen mit einer Zahl kleiner als ** 10, daher gebe ich es als "1 ... 10" an, ohne die letzte Zahl. Übrigens, wenn Sie die letzte Nummer einfügen möchten, verwenden Sie "1..10" und zwei Kommas.
select {|i| i%3==0 || i%5==0}
Jedes Element wird durch Auswahl in Blöcken ausgewertet, und Elemente, die ein Vielfaches von 3 oder 5 sind, werden extrahiert. Selbst wenn dies ein Vielfaches von 15 ist, wird es nicht zweimal gezählt.
inject(:+)
injizieren ist eine Methode, die sich wie jede und jede Karte wiederholt. Das heißt, wir versuchen, die Ergebnisse des Extrahierens von Elementen, die ein Vielfaches von 3 oder 5 sind, nacheinander hinzuzufügen. Es scheint, dass häufig iterative Berechnungen verwendet werden.
https://blog.toshimaru.net/ruby-inject/
Array-Objekt.inject {|Ursprünglicher Wert,Element|Blockverarbeitung}
array = 1..6
array.inject (0){ |sum,num| p sum+=num}
=>1
3
6
10
15
21
#inject(0)0 setzt den Anfangswert der Summe.
#Da die Standardargumenteinstellung von inj jedoch 0 ist, kann sie wie unten gezeigt weggelassen werden.
#num ist ein Element des Arrays
Eine praktische Option, die wie folgt abgekürzt werden kann, indem ein Operator als Symbol übergeben wird.
array = 1..10
array.inject {|sum,num| sum+=num}
=> 55
#Gleiches Ergebnis, auch wenn weggelassen
array = 1..10
array.inject(:+)
=> 55
Früher habe ich versucht, innerhalb dieses Blocks mit der "jeder Methode" zu berechnen, aber in Zukunft werde ich die Inject-Methode verwenden, wenn ich durch iterative Verarbeitung berechne! !! !!
Recommended Posts