Lernen Sie Ruby mit AtCoder Anfänger Auswahl [Einige Summen] Erhöhen Sie die Methoden, die verwendet werden können

Einführung

Wir werden "Competition Programming (Competition Pro)" als Teil des Lernens von Ruby herausfordern. Wir werden das, was wir beim Lernen gelernt haben, zu diesem Zweck ausgeben. Diesmal aus der sechsten Frage (Einige Summen) von "At Coder Beginners Selection". https://atcoder.jp/contests/abs

Problem

Von ganzen Zahlen zwischen 1 und N. Suchen Sie die Summe derjenigen, die größer oder gleich A und kleiner oder gleich B in Dezimalschreibweise sind.

Zwang 1 ≤ N ≤ 10,000 1 ≤ A ≤ B ≤ 36 Alle Eingaben sind ganze Zahlen

Die Eingabe erfolgt in folgender Form.

N A B

#Beispiel
20 2 5
Ausgabebeispiel
#Im Fall des obigen Beispiels
=> 84

Von den ganzen Zahlen von 20 oder weniger beträgt die Summe jeder Ziffer 2 oder mehr und 5 oder weniger Es ist 2,3,4,5,11,12,13,14,20. Ausgänge 84, das ist die Summe davon.

Antwort ①

Zunächst aus meiner Antwort.

n, a, b = gets.split(" ").map(&:to_i)
r = 0
(1..n).each do |i|
  r += i if i.to_s.split("").map(&:to_i).inject(:+).between?(a, b)
end
print r

Die Methoden, die ich bei der Beantwortung dieser Frage gelernt habe, sind unten zusammengefasst.

Split-Methode

Ich habe es verwendet, als ich Eingaben erhielt. Indem ich es diesmal in jeder Anweisung verwendete, konnte ich es wieder als Methode der String-Klasse erkennen. Die Antwort besteht darin, es einmal in einen String-Typ zu konvertieren, die Split-Methode zu verwenden und dann in den Integer-Typ zurückzukehren.

#Beispiel
print "1234".split("")
=> ["1", "2", "3", "4"]

zwischen? Methode

self.between?(min, max)
#Selbst ist zwischen min und max (min,Gibt true zurück, wenn (einschließlich max)

#Beispiel
print 6.between?(1, 5) 
=> false

Mit dieser Methode, die den Minimal- und Maximalwert angibt und true zurückgibt, wenn self innerhalb dieses Bereichs liegt, Es wird beurteilt, ob die Summe jeder Ziffer im Bereich von a oder mehr und b oder weniger liegt.

Antwort ②

Lassen Sie uns die Antwort der anderen Person sehen.

n, a, b = gets.split.map(&:to_i)
puts (1..n).select{|e|(a..b).include?(e.to_s.chars.map(&:to_i).inject(&:+))}.inject(&:+)

Bis zum Empfang der Eingabe entspricht dies fast der Antwort ①. Betrachtet man den Fluss danach, (1) Verwenden Sie die include? -Methode, um zu bestimmen, ob die Summe jeder Ziffer der Ganzzahl größer oder gleich a und kleiner als oder gleich b ist. (2) Verwenden Sie für übergebene Ganzzahlen (1) die select-Methode, um ein neues Array zu erstellen und es hinzuzufügen. (3) Wenn alle Ganzzahlen verfügbar sind, die die Bedingungen erfüllen, verwenden Sie am Ende die Injektionsmethode, um die Summe der Ganzzahlen zu ermitteln und auszugeben.

Hier ist eine kurze Zusammenfassung der hier verwendeten Methoden.

include? method (Bereichsklasse)

Gibt true zurück, wenn sich das Objekt innerhalb des Bereichs befindet.

#Beispiel
print (1..5).include?(4)
=> true

Methode auswählen

Ruft die Elemente ab, die den Kriterien entsprechen, und gibt sie als neues Array zurück.

#Beispiel
print [1,2,3,4,5].select { |num| num > 3 }
=> [4, 5]

Schließlich

Bisher habe ich die Methoden vorgestellt, die ich beim Lösen von AtCoder Beginners Selection [Some Sums] gelernt habe.

Wenn Sie Fehler haben, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten.

Recommended Posts

Lernen Sie Ruby mit AtCoder Anfänger Auswahl [Einige Summen] Erhöhen Sie die Methoden, die verwendet werden können
Organisieren Sie Methoden, die mit StringUtils verwendet werden können
Ruby-Array-Methoden, die mit Rails verwendet werden können (außer jedem)
Ruby on Rails 5 - Kurzanleitung zum Lernen, die im Feld Zusammenfassung verwendet werden kann
[Rails] "Pry-Rails", die beim Speichern mit der create-Methode verwendet werden können
Bereich, in dem Variablen mit Ruby verwendet werden können [Scope]
Über die Sache, dass hidden_field wahnsinnig benutzt werden kann
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Firebase-Realtime-Datenbank für Android, die mit Kopie verwendet werden kann
Vier Reihen mit Schwerkraft, die auf der Konsole gespielt werden können
Lernen Sie Ruby mit AtCoder Anfänger Auswahl [Münzen] Antworten Sie mit Funktionscode
SwiftUI-Ansicht, die in Kombination mit anderen Frameworks verwendet werden kann
Ruby mit AtCoder lernen 11 So erhalten Sie häufig verwendete Standardeingaben
Ruby mit AtCoder 6 lernen [Contest 168 Daher]
Stellen Sie die Zugriffslast ein, die mit JMeter grafisch geändert werden kann (Teil 2).
Ich habe versucht, Java mit einer Reihe zu lernen, die Anfänger klar verstehen können
Einfache Implementierung eines Spielautomaten, die mit Kopie verwendet werden kann
Stellen Sie die Zugriffslast ein, die mit JMeter grafisch geändert werden kann (Teil 1).
Tools zur Leistungsanalyse und Fehlerdiagnose, die mit OpenJDK verwendet werden können
Bis Rubin in Fenstern verwendet werden kann ...
Über den Fall, dass ("b" .. "aa") nicht in Ruby Range verwendet werden konnte
Die Geschichte, dass der Port im Spring-Boot-Beispielprogramm unbrauchbar wird