Als Teil des Ruby-Lernens werden wir "Algorithm Practical Test" herausfordern. Wir werden das, was wir beim Lernen gelernt haben, zu diesem Zweck ausgeben. Diesmal aus der 6. Frage (DoubleCamelCase Sort) von "1st Algorithm Practical Test". 1. Frage zum praktischen Test des Algorithmus in der Vergangenheit
Dieses Mal möchte ich zusammenfassen, was ich anhand der hilfreichen Antworten lernen konnte.
Die Zeichenfolge S ist gegeben. Dies ist eine Verkettung eines oder mehrerer Wörter (ohne Leerzeichen dazwischen). Hier hat jedes Wort zwei oder mehr Zeichen, nur das erste und das letzte Zeichen sind obere englische Buchstaben und alle anderen Buchstaben sind untere englische Buchstaben.
Zwang -S ist eine Zeichenkette mit einer Länge von 2 oder mehr und 100.000 oder weniger. -Jeder Buchstabe von S ist ober- oder unteralphabetisch. ・ S ist eine Verkettung von Wörtern, wie in der Problemstellung beschrieben.
Die Eingabe erfolgt in folgender Form.
S
Eingabebeispiel
FisHDoGCaTAAAaAAbCAC
Ausgabebeispiel
=> AAAaAAbCACCaTDoGFisH
Hier ist die Antwort, auf die ich mich diesmal beziehen werde.
puts gets.scan(/[A-Z][a-z]*[A-Z]/).sort_by(&:upcase).join
Ordnen Sie die empfangenen Zeichenfolgen als Elemente für jedes Wort an. Nach dem Sortieren mit der Methode sort_by werden alle Elemente des Arrays mit der Join-Methode verkettet und ausgegeben.
Das Folgende ist eine Zusammenfassung jeder Methode und des Ausdrucks in regulären Ausdrücken.
Das in () angegebene Muster wird wiederholt mit dem Objekt abgeglichen, und der übereinstimmende Teilstring wird als Array zurückgegeben.
p "test".scan(/../)
#=> ["te", "st"]
p "test".scan("t")
#=> ["t"]
p "testet".scan(/te./)
#=> ["tes", "tet"]
Es ist die beste Methode für Fälle wie diesen, die sich mit Wörtern befassen, die mit Kapital beginnen und mit Kapital enden.
Die Wörter, die dieses Mal behandelt werden, werden wie folgt in regulären Ausdrücken ausgedrückt.
/[A-Z][a-z]*[A-Z]/
/ / //で囲むことで正規表現オブジェクトを生成することが出来ます。 Mit anderen Worten, es ist eine Deklaration, dass "das, was in // eingeschlossen ist, ein regulärer Ausdruck ist".
[ ] Der Teil zwischen den eckigen Klammern [] wird als Zeichenklasse bezeichnet. Eine Aufzählung von einem oder mehreren Zeichen, die mit einem Zeichen übereinstimmen (1 von 0-9 oben).
[A-Z] Stellt einen einzelnen Großbuchstaben dar.
[a-z] Stellt einen einzelnen unteren Buchstaben dar.
Es ist ein Metazeichen, das bedeutet, dass der vorherige Ausdruck 0 oder mehrmals wiederholt wird. In diesem Fall bedeutet dies, dass niedrigere Buchstaben mindestens 0 Mal wiederholt werden. Wenn ein englisches Wort mit drei oder mehr Zeichen angezeigt wird, bedeutet dies, dass der untere Teil immer zwischen dem oberen Teil liegt.
Jetzt können Sie das Wort gemäß der Problemspezifikation abgleichen.
Es vergleicht den Inhalt des Arrays, sortiert es und erstellt ein neues Array im sortierten Zustand. In () wird für einen korrekten Vergleich die Großbuchstabenmethode auf jedes Element angewendet, und alle Großbuchstaben werden vor dem Vergleich verwendet.
p ["AA", "AC", "AaA"].sort_by(&:upcase)
#=>["AA", "AaA", "AC"]
Gibt eine Zeichenfolge zurück, in der die Elemente des Arrays mit dem in Klammern () dazwischen angegebenen Trennzeichen verknüpft sind. Wenn () nicht beschrieben wird, wird es ohne Trennzeichen verkettet.
p ["AA", "AaA", "AC"].join(",")
#=>AA,AaA,AC
p ["AA", "AaA", "AC"].join
#=>AAAaAAC
Das Obige ist eine Zusammenfassung der Methoden, die in der sechsten Frage (DoubleCamelCase Sort) des "1st Algorithm Practical Test" gelernt wurden. Ich möchte reguläre Ausdrücke und verschiedene Methoden verwenden, damit ich eine einfache und leicht verständliche Antwort geben kann, wie ich sie dieses Mal erwähnt habe.
Wenn Sie Fehler haben, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten.
Recommended Posts