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.