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.Respuestas:
Casco , 11 bytes
Pruébalo en línea!
Explicación
fuente
Retina , 47 bytes
Pruébalo en línea!
La parte más complicada fue en realidad ordenar las letras, porque la función "ordenar por" de Retina no tiene una clasificación que no distinga entre mayúsculas y minúsculas (por lo que ordena las letras mayúsculas por delante de todas las letras minúsculas). Para evitar esto, tuve que insertar una copia en minúscula de cada personaje para ordenar y luego deshacerme de él nuevamente.
fuente
tEsTiNgcon el método de clasificación anterior, ordena los pares de letras eneEggiinNsstTtt → EgiNsTtlugar deeEggiinNsstttT → EgiNstT(las letras mayúsculas siempre se colocan antes de las letras minúsculas).Python 2 ,
10090 bytesPruébalo en línea!
fuente
Jalea , 14 bytes
Pruébalo en línea!
Programa completo
fuente
Japt ,
1716 bytes¡Pruébelo en línea!
Cómo funciona
Digamos que la cadena de entrada es
v:vg::G:G::o:. La primera parte del código,f".:*"encuentra todas las coincidencias de la expresión regular/.:*/g, que coincide con un carácter seguido de cualquier número de dos puntos. Esto divide la entrada en[v:, v, g::, G:, G::, o:].El
ñmétodo en una matriz ordena cada matriz como si se aplicaran ciertos cambios, sin aplicarlos realmente (comosorted(array, key=<whatever>)en Python). Entonces necesitamos ordenar:Z{ZiZéJ v}es la forma más corta que pude encontrar para hacer esto:Esto es más fácil de entender con algunos ejemplos:
Los valores originales se ordenan lexicográficamente por estas claves. El resultado es que
::gG::se ordena al frente, luego::gg::, y así sucesivamente, dándonos[G::, g::, G:, o:, v:, v], que luego se uneqy se genera.fuente
JavaScript (ES6), 93 bytes
fuente
Perl 5 , 69 + 1 (
-n) = 70 bytesPruébalo en línea!
fuente
=~/A-Z/a==/A-Z/debería solucionar el problema.Haskell , 124 bytes
Pruébalo en línea!
fuente
Golpetazo,
232213 bytespruébalo en línea
fuente
C # (.NET Core) , 152 bytes
Pruébalo en línea!
Sin golf:
La idea básica es iterar sobre las 156 opciones posibles y verificar su existencia. Si se encuentra, agregue a la salida y elimine de la entrada.
fuente