バックグラウンド
Cには、コマンドライン引数の解析に役立つ関数がありますgetopt
。
Getoptは、引数カウント(argc
)、引数リスト(argv
)、およびプログラムがとるべきオプションを表す文字列(optstring
)を取ります。
オプション文字列(optstring
)は、1つのコロン(引数が必要なオプションの場合)、2つのコロン(オプションの引数のあるオプションの場合)、または0のコロン(引数のないオプションの場合)が後に続く一連のオプション文字です。
例:会社の新しいウィジェットに次のオプション文字列を使用できます。
"v::x:hy:S:G::dns:f::"
しかし、それは恐ろしく見えます!オプションはすべて混在しています!このオプション文字列は、並べ替えた方がはるかによく見えます。
"f::G::v::S:s:x:y:dhn"
仕様書
入力は正規表現に一致する文字列になります
([A-Za-z]:{0,2})+
入力は文字列または文字のリストとして受け取る必要があります。
以下に詳述する方法でソートされた文字列を出力する必要があります。
空の入力を処理する必要はありません。
同じタイプのオプションを繰り返し使用して入力を処理する必要はありません(
"aa"
は無効ですが、"aa:a::"
有効です)。
ソート方法
ソートされたオプション文字列で:
2つのコロンが後に続く文字が最初に来て、アルファベット順にソートされ、それぞれの小文字の前に大文字が続きます(つまり、「Bab」ではなく「aBb」)。
次に、1つのコロンが付いた文字がアルファベット順にソートされ、それぞれの小文字の前に大文字が続きます。
最後は、コロンのない文字で、アルファベット順にソートされ、それぞれの小文字の前に大文字が続きます。
ルール
- 標準の抜け穴は禁止されています。
得点
これはcode-golfなので、各言語でのバイト単位の最短の回答が優先されます。
例
# "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"
長いテストケース(312文字)
無効な入力(処理する必要はありません):
"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::
地雷を壊した...皮肉。