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 ersten Frage (daher) von "At Coder Beginners Contest 168". https://atcoder.jp/contests/abc168/tasks/abc168_a
Ich werde es basierend auf der von mir verwendeten Lösung und dem vom Beamten veröffentlichten Kommentar zusammenfassen.
Beim Zählen von Stiften auf Japanisch wird "Buch" als Hilfsnummer nach der Nummer hinzugefügt. Die Anzeige dieser Hilfsnummer hängt davon ab, an welche Nummer sie angehängt ist. Für ganze Zahlen von 999 oder weniger, wie man "Buch" liest, wenn man "N Bücher" sagt
・ Wenn der 1. Platz von N "2,4,5,7,9" ist, wird "hon" ・ Wenn der 1. Platz von N "0,1,6,8" ist, wird 'pon' ・ Wenn der 1. Platz von N "3" ist, ist es "schwarz".
Bei N drucken Sie die entsprechende "Buch" -Lesung aus.
Zwang N ist eine positive ganze Zahl kleiner oder gleich 999
Die Eingabe erfolgt in folgender Form.
N
#Beispiel
16
Im obigen Beispiel kann es bis zu 2 Mal geteilt werden.
Ausgabebeispiel
#Im Fall des obigen Beispiels
=> pon
Zuerst ist der Code, den ich zuerst geschrieben habe.
a = gets.to_i.modulo(10)
if [2,4,5,7,9].include?(a)
print "hon"
elsif [0,1,6,8].include?(a)
print "pon"
else
print "bon"
end
Verwenden Sie die Modulo-Methode, um nur die eine Ziffer von der Eingabe zu empfangen Die Beurteilung erfolgt nach der if-Anweisung und der include-Methode. einschließen? Was die Methode betrifft, habe ich einmal über den folgenden Artikel geschrieben [Ruby mit AtCoder-Anfängerauswahl lernen [Einige Summen] Erhöhen Sie die Methoden, die verwendet werden können](https://qiita.com/jag_507/items/cd3ad74d77ad933897b7#include%E3%83%A1%E3%82%BD%E3%83%83] % E3% 83% 89Range% E3% 82% AF% E3% 83% A9% E3% 82% B9) Hier werde ich auf die Modulo-Methode eingehen.
Gibt den Rest geteilt durch die angegebene Zahl zurück. In der Antwort wird die Einerstelle als Rest herausgenommen, indem die ganze Zahl durch 10 geteilt wird.
#Beispiel
13.modulo(4)
=> 1
42.modulo(10)
=> 2
In dem nach dem Wettbewerb verteilten Kommentar Eine intuitivere Art der Beschreibung mit einer Fallbeschreibung wird vorgestellt.
Im Folgenden werden wir die case-Anweisung nach Beantwortung mit der case-Anweisung einführen.
n = gets.to_i.modulo(10)
case n
when 2,4,5,7,9
print 'hon'
when 0,1,6,8
print 'pon'
else
print 'bon'
end
In der ersten Antwort habe ich die Bedingung in ein Array eingefügt und mit der include? -Methode ein Urteil abgegeben. Mit der case-Anweisung können Sie den Code so schreiben, als würden Sie denken "Wenn der erste Platz 2,4,5,7,9 ... ist". Sicher scheint dieser besser zu sein.
Dies ist nützlich, wenn Sie nach einer Übereinstimmung von mehreren Kandidaten für einen einzelnen Wert suchen. Der Operator "===" bestimmt, ob er mit dem übereinstimmt, was in wann angegeben ist.
case object
when value1
# object ===Anweisung, die ausgeführt werden soll, wenn value1
when value2
# object ===Anweisung, die ausgeführt werden soll, wenn value2
else
#Anweisung, die ausgeführt werden soll, wenn nicht alle übereinstimmen
end
Der hier angezeigte Operator "===" ist Wenn es sich bei dem oben genannten Objekt um eine Zeichenfolge oder einen numerischen Wert handelt, setzen Sie es auf "==". Verwenden Sie für reguläre Ausdrücke "= ~" Im Fall eines Bereichs scheint es zu beurteilen, ob der Wert darin enthalten ist, wie include? Es scheint flexibel und einfach zu bedienen zu sein.
Bisher haben wir die Methoden vorgestellt, die aus der ersten Frage (daher) des "AtCoder Beginners Contest 168" gelernt wurden.
Wenn Sie Fehler haben, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten.
Recommended Posts