[RUBY] Studieren bei CodeWar (Rubin) ⑥ injizieren

Über diesen Artikel

Nach und nach wird das ausgegeben, was ich durch den kürzlich gestarteten Codewar gelernt habe

Problem

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.

Meine Antwort

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

beste Übung

"Ich verstehe" und "Was ist das?" Sind gemischt.

def solution(number)
  (1...number).select {|i| i%3==0 || i%5==0}.inject(:+)
end

Also das war's ~

(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.

was ist das?

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.

Grundlegende Verwendung

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

Wer ist das "injizieren (: +)"?

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

Zusammenfassung

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

Studieren bei CodeWar (Rubin) ⑥ injizieren
Studieren bei CodeWar (Rubin) ②
Studieren bei CodeWar
Studieren bei CodeWar (Rubin) ③ Squeeze, gsub
Studieren bei CodeWar (Rubin) ⑤ proc
Studieren bei CodeWar (Ruby) ④ case ~ when
Ruby-Algorithmus (Injizieren, Methodendefinition)
Verwendung der Ruby-Inject-Methode