Hintergrund
In C gibt es eine Funktion zum Parsen von Befehlszeilenargumenten : getopt
.
Getopt verwendet das Argument count ( argc
), die Argumentliste ( argv
) und eine Zeichenfolge, die die Optionen darstellt, die das Programm ausführen soll ( optstring
).
Die Optionszeichenfolge ( optstring
) besteht aus einer Reihe von Optionszeichen, gefolgt von einem Doppelpunkt (für eine Option, für die ein Argument erforderlich ist), zwei Doppelpunkten (für eine Option mit einem optionalen Argument) oder null Doppelpunkten (für eine Option ohne Argument).
Beispiel: Für das neue Widget des Unternehmens kann die folgende Optionszeichenfolge verwendet werden.
"v::x:hy:S:G::dns:f::"
Aber das sieht schrecklich aus! Die Optionen sind alle gemischt! Diese Optionszeichenfolge würde viel besser aussehen, wenn sie sortiert wäre:
"f::G::v::S:s:x:y:dhn"
Spezifikationen
Die Eingabe ist eine Zeichenfolge, die dem regulären Ausdruck entspricht
([A-Za-z]:{0,2})+
Sie sollten die Eingabe als Zeichenfolge oder Liste von Zeichen verwenden.
Sie sollten die Zeichenfolge nach der unten beschriebenen Methode sortiert ausgeben.
Sie müssen keine leeren Eingaben verarbeiten.
Sie müssen Eingaben nicht mit wiederholten Optionen desselben Typs verarbeiten (
"aa"
ist ungültig, aber"aa:a::"
gültig).
Sortiermethode
In der sortierten Optionszeichenfolge:
Die Zeichen, gefolgt von zwei Doppelpunkten, stehen alphabetisch sortiert an erster Stelle mit Großbuchstaben vor den jeweiligen Kleinbuchstaben (dh "aBb", nicht "Bab").
Dann sind die Zeichen mit einem Doppelpunkt, alphabetisch sortiert, mit Großbuchstaben vor ihren jeweiligen Kleinbuchstaben.
Zuletzt sind die Zeichen ohne Doppelpunkt alphabetisch sortiert mit Großbuchstaben vor den jeweiligen Kleinbuchstaben.
Regeln
- Standardlücken sind verboten.
Wertung
Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes in jeder Sprache.
Beispiele
# "input" => "output"
"v::x:hy:S:G::dns:f::" => "f::G::v::S:s:x:y:dhn"
"aa:a::" => "a::a:a"
"B:" => "B:"
"Confusio:n::" => "n::o:Cfinosu"
"Confusio:n:" => "n:o:Cfinosu"
"m:qW:X:xc:vViI" => "c:m:W:X:IiqVvx"
"V:omo:V" => "o:V:moV"
"agg:ra:va::ting::" => "a::g::a:g:aginrtv"
"input" => "inptu"
Langer Testfall (312 Zeichen)
Invaid-Eingaben (müssen Sie nicht verarbeiten):
"gg" (duplicated option)
"" (empty string)
":w:" (first colon isn't after a character)
"x:y:0:fhn" ('0' is not alphabetic)
"A:::" (3 colons is invalid)
agg:ra:va::ting::
brach meine heh ... Ironisch.Antworten:
Schale , 11 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
Netzhaut , 47 Bytes
Probieren Sie es online aus!
Der schwierigste Teil war das Sortieren der Buchstaben, da die Funktion "Sortieren nach" von Retina keine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung enthält (standardmäßig werden also die Großbuchstaben vor allen Kleinbuchstaben sortiert ). Um dies zu umgehen, musste ich von jedem Zeichen eine Kopie in Kleinbuchstaben einfügen, um die Sortierung durchzuführen, und sie dann wieder entfernen.
quelle
tEsTiNg
mit Ihrer obigen Sortiermethode sortieren Sie die Buchstabenpaare nacheEggiinNsstTtt → EgiNsTt
statteEggiinNsstttT → EgiNstT
(die Großbuchstaben werden immer vor den Kleinbuchstaben platziert).Python 2 ,
10090 BytesProbieren Sie es online aus!
quelle
Gelee , 14 Bytes
Probieren Sie es online aus!
Volles Programm.
quelle
Japt ,
1716 BytesTesten Sie es online!
Wie es funktioniert
Angenommen, die Eingabezeichenfolge lautet
v:vg::G:G::o:
. Der erste Teil des Codesf".:*"
findet alle Übereinstimmungen des regulären Ausdrucks/.:*/g
, der einem Zeichen gefolgt von einer beliebigen Anzahl von Doppelpunkten entspricht. Dies teilt die Eingabe in[v:, v, g::, G:, G::, o:].
Die
ñ
Methode in einem Array sortiert jedes Array so, als ob bestimmte Änderungen angewendet würden, ohne sie tatsächlich anzuwenden (wiesorted(array, key=<whatever>)
in Python). Also müssen wir sortieren:Z{ZiZéJ v}
ist der kürzeste Weg, den ich finden könnte, um dies zu tun:Dies ist am einfachsten anhand einiger Beispiele zu verstehen:
Die ursprünglichen Werte werden dann nach diesen Schlüsseln lexikografisch sortiert. Das Ergebnis ist, dass
::gG::
nach vorne sortiert wird::gg::
, und so weiter, was uns gibt[G::, g::, G:, o:, v:, v]
, was dann mit verbundenq
und ausgegeben wird.quelle
JavaScript (ES6), 93 Byte
quelle
Perl 5 , 69 + 1 (
-n
) = 70 BytesProbieren Sie es online aus!
quelle
=~/A-Z/
zu==/A-Z/
sollte das Problem beheben.Haskell , 124 Bytes
Probieren Sie es online aus!
quelle
Bash,
232213 BytesProbieren Sie es online aus
quelle
C # (.NET Core) , 152 Byte
Probieren Sie es online aus!
Ungolfed:
Die Grundidee besteht darin, alle 156 möglichen Optionen zu durchlaufen und ihre Existenz zu überprüfen. Wenn gefunden, an die Ausgabe anhängen und aus der Eingabe entfernen.
quelle