fundo
Em C, há uma função de argumentos de linha de comando ajuda de análise: getopt.
Getopt pega o argumento count ( argc), a lista de argumentos ( argv) e uma string que representa as opções que o programa deve usar ( optstring).
A opção string ( optstring) é uma série de caracteres de opção, cada um seguido por dois pontos (para uma opção que exige um argumento), dois pontos (para uma opção com argumento opcional) ou zero dois pontos (para uma opção sem argumento).
Por exemplo: pode-se usar a seguinte opção para o novo widget da empresa.
"v::x:hy:S:G::dns:f::"
Mas isso parece horrível! As opções são todas misturadas! Essa sequência de opções ficaria muito melhor se fosse classificada:
"f::G::v::S:s:x:y:dhn"
Especificações
A entrada será uma string que corresponde à expressão regular
([A-Za-z]:{0,2})+Você deve receber a entrada como uma sequência ou lista de caracteres.
Você deve gerar a sequência classificada pelo método detalhado abaixo.
Você não precisa manipular entrada vazia.
Você não precisa manipular entrada com opções repetidas do mesmo tipo (
"aa"não é válido, mas"aa:a::"é válido).
Método de classificação
Na sequência de opções classificada:
Os caracteres seguidos por dois pontos-vírgulas são os primeiros, classificados em ordem alfabética, com letras maiúsculas antes de suas respectivas letras minúsculas (ou seja, "aBb", não "Bab").
Em seguida, são os caracteres com um dois pontos, classificados em ordem alfabética, com letras maiúsculas antes de suas respectivas letras minúsculas.
Por último, os caracteres sem dois pontos, classificados em ordem alfabética, com letras maiúsculas antes de suas respectivas letras minúsculas.
Regras
- As brechas padrão são proibidas.
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes em cada idioma vence.
Exemplos
# "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"
Caso de teste longo (312 caracteres)
Entradas do Invaid (você não precisa lidar com):
"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::quebrou o meu heh ... Irônico.