Entrada
Una cadena codificada no vacía que consta de caracteres ASCII imprimibles (en el rango 32-126), donde se han reemplazado algunas letras faltantes _
.
Salida
Una cadena decodificada de la misma longitud con todas las letras en minúsculas, incluidas las que faltan.
¿Cómo?
Editar: como lo menciona @Deusovi en los comentarios, esta es una variante del cifrado de Bacon .
- Reúna todas las letras en la cadena original y agrúpelas por 5. Se ignoran las letras adicionales que no caben en un grupo completo de 5.
- Convierta cada grupo en binario: minúsculas = 0 , mayúsculas = 1 . Esto lleva a una lista de enteros.
- Use cada valor N en esta lista para reemplazar cada uno
_
en la cadena original con la N -ésima letra del alfabeto (0-indexado), en orden de aparición.
Ejemplo: prOGraMMIng PuZZleS & cOde ____
prOGr --> 00110 --> 6 --> 7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 --> 5 --> 6th letter = 'f'
Al reemplazar las letras que faltan y convertir todo a minúsculas, se revela la cadena original:
programming puzzles & code golf
Este es el resultado esperado.
Aclaraciones y reglas.
- Se garantiza que las letras que faltan aparecerán al final de la cadena. Más formalmente: nunca habrá ninguna letra después de la primera
_
en la cadena de entrada. Sin embargo, puede haber otros caracteres ASCII imprimibles, como espacios y signos de puntuación. - Se garantiza que la entrada no contenga ninguna letra mayúscula inútil : todas las letras mayúsculas son bits establecidos en 1 que se requieren para decodificar las letras que faltan. Todo lo demás está en minúsculas.
- Se garantiza que la cadena de entrada sea válida. Especialmente:
- Siempre contendrá suficientes grupos completos de 5 letras para decodificar los guiones bajos.
- Los enteros codificados en binario están garantizados para estar en el rango [0-25] .
- Es posible que no haya ninguno
_
en la cadena de entrada, en cuyo caso solo debe devolver la entrada. - Este es el código de golf , por lo que gana la respuesta más corta en bytes.
Casos de prueba
Input : hello!
Output: hello!
Input : helLO, worl_!
Output: hello, world!
Input : i aM yoUr faTh__.
Output: i am your father.
Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf
Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?
Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.
Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.
Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.
Algunos casos de prueba adicionales:
Input : BInar_
Output: binary
Input : 12 MonKey_
Output: 12 monkeys
Input : hyPerbolIZ__
Output: hyperbolized
Input : {[One Last Test ca__]}
Output: {[one last test case]}
_
en la cadena de entrada es un caso especial.
The input is guaranteed not to contain any useless capital letter
, en caso de que no haya subrayado, tampoco habrá una letra mayúscula.
[32-126]
. He agregado otro caso de prueba.