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.