Antecedentes
En C, hay una función de ayuda de análisis sintáctico argumentos de línea de comandos: getopt
.
Getopt toma el recuento de argumentos ( argc
), la lista de argumentos ( argv
) y una cadena que representa las opciones que el programa debe tomar ( optstring
).
La cadena de opción ( optstring
) es una serie de caracteres de opción seguidos de dos puntos (para una opción que requiere un argumento), dos puntos (para una opción con un argumento opcional) o cero puntos (para una opción sin argumento).
Por ejemplo: uno podría usar la siguiente cadena de opciones para el nuevo widget de su compañía.
"v::x:hy:S:G::dns:f::"
¡Pero eso se ve horrible! ¡Las opciones se mezclan todas juntas! Esta cadena de opciones se vería mucho mejor si se ordenara:
"f::G::v::S:s:x:y:dhn"
Especificaciones
La entrada será una cadena que coincida con la expresión regular
([A-Za-z]:{0,2})+
Debe tomar la entrada como una cadena o lista de caracteres.
Debe generar la cadena ordenada por el método detallado a continuación.
No necesita manejar entradas vacías.
No necesita manejar la entrada con opciones repetidas del mismo tipo (
"aa"
no es válido, pero"aa:a::"
es válido).
Método de clasificación
En la cadena de opción ordenada:
Los caracteres seguidos por dos puntos son los primeros, ordenados alfabéticamente, con letras mayúsculas antes de sus respectivas letras minúsculas (es decir, "aBb", no "Bab").
Luego están los caracteres con dos puntos, ordenados alfabéticamente, con letras mayúsculas antes de sus respectivas letras minúsculas.
Los últimos son los caracteres sin dos puntos, ordenados alfabéticamente, con letras mayúsculas antes de sus respectivas letras minúsculas.
Reglas
- Las lagunas estándar están prohibidas.
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta en bytes en cada idioma.
Ejemplos
# "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 prueba largo (312 caracteres)
Entradas no válidas (no tiene que manejar):
"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::
rompió la mía je ... Irónico.