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.Respuestas:
05AB1E , 18 bytes
Código:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación:
fuente
Python 2 , 113 bytes
Pruébalo en línea!
fuente
Perl 5
-pF -MList::Util=sum
, 75 bytesPruébalo en línea!
Explicación:
-pF
lee una línea de entrada en la variable$_
y, dividida en caracteres, en la matriz@F
.@a=grep!/\W|\d/,@F
establece la matriz@a
igual a aquellos miembros@F
que no satisfacen la expresión regular\W|\d
.\W
es cualquier cosa menos letras, números y_
;\d
son los números Así\W|\d
es cualquier cosa menos letras y_
, y@a
tiene todas las letras y_
caracteres. Terminaremos nunca examinando a los_
personajes@a
. (Tenga en cuenta que esto solo funciona porque la entrada está garantizada ASCII).map{a gt shift@a&&16/2**$_}0..4
hace lo siguiente para 0 a 4: quita el siguiente elemento@a
, lo acorta y evalúa sia
es asciibéticamente mayor que ese elemento (es decir, si ese elemento es mayúscula). Si es así,&&
no está en cortocircuito, entonces obtenemos 16 dividido por 2 para obtener la potencia del valor de entrada (0 a 4). De&&
lo contrario, se cortocircuita y obtenemos 0.map
devuelve la lista de cinco númerossum
, que los agrega.a..z
, y eso es de lo que obtenemos(a..z)[…]
.s!_!…!eg
convierte cada_
en$_
, a su vez, a la letra apropiada.$_=lc
convierte$_
a la versión en minúsculas de sí mismo e-p
imprime.fuente
J ,
6261 bytesPruébalo en línea!
fuente
Jalea ,
28 2726 bytes-1 gracias a Erik the Outgolfer & dylnan
¡No es un desafío muy amigable para las gelatinas!
Un enlace monádico que acepta y devuelve listas de caracteres.
Pruébalo en línea!
¿Cómo?
fuente
Retina ,
9190 bytesPruébalo en línea! Explicación:
Traduce letras minúsculas
a
y mayúsculas aA
, eliminando todo lo demás.Divide la
Aa
s en grupos de 5.Convierta de binario a unario, tratándolo
A
como 1 ya
como 0. Dado que originalmente había 5Aa
s, quedan 5a
s, más un número deA
s dependiendo de la posición deseada en el alfabeto.Incremente el último de
a
acuerdo con el número deA
s siguientes .Anteponer la entrada original.
Reemplace cualquier
_
s con la siguiente letra decodificada.Elimine las letras decodificadas de repuesto.
Todo en minúscula.
Retina 0.8.2 , 117 bytes
Pruébalo en línea! Explicación:
Duplicar la entrada.
Minúscula la primera copia.
Traduzca letras minúsculas a
a
en la segunda copia.Traducir letras mayúsculas a
A
. Estos deben estar en la segunda copia porque la primera copia ya estaba en minúscula.Eliminar todo lo demás en la segunda copia.
Divida la segunda copia (ahora solo
Aa
s) en grupos de 5.Decodifique las letras e insértelas como antes.
fuente
APL (Dyalog Unicode) , 46 bytes SBCS
Lambda anónima, se supone
⎕IO
(origen del índice) para ser0
.Pruébalo en línea!
{
...⋄
... función de}
dos enunciados;⍵
es el argumento,⋄
separa las declaraciones⊢
argumento (función no operativa)'_'=
donde igual a un guión bajo (es decir, una función de mapeo booleano)_←
asigna esa función a_
A[
...]@_⍵
coloque los siguientes caracteresA
en las posiciones de guiones bajos en el argumento⎕A
el alfabeto en mayúscula A loA←
asigna aA
819⌶
minúsculas ( 819 ≈ BIg , sin argumento a la izquierda significa que no es grande, es decir, minúsculas)A,
anteponer el alfabeto en mayúsculas; esto nos da todas las letras de⍵∩
intersección del argumento y eso; solo las letras del argumentoA∊⍨
cuáles de esos son miembros del alfabeto en mayúsculas; mayúscula pedacitos(
...)5⍴
r eshape que al siguiente número de filas y cinco columnas:_⍵
la máscara de subrayados en el argumento+/
suma que; cantidad de guiones bajos⍉
transponer (para tratar cada fila como un número en lugar de como una posición de bit)2⊥
evaluar como819⌶
todo en minúsculas base-2fuente
Scala , 189 bytes
Pruébalo en línea!
Explicación:
fuente
JavaScript (Node.js) ,
125124 bytesPruébalo en línea!
fuente
Jalea , 26 bytes
Pruébalo en línea!
Enfoque diferente al de Jonathan Allan. EDITAR: Entonces, aparentemente pensé en la misma reducción de bytes que Jonathan Allan, por lo que no hace daño mencionar su nombre nuevamente.
fuente
CJam , 43 bytes
Pruébalo en línea!
fuente
Limpio ,
180... 150 bytesPruébalo en línea!
Define la función
$ :: [Char] -> [Char]
con@ :: [Char] [Char] -> [Char]
como ayudante para reemplazar guiones bajos y? :: [Char] -> [Char]
como ayudante para generar los caracteres de reemplazo.fuente
i<-:""
pieza? ¿Los caracteres se convierten implícitamente en números al sumarlos o agregarlos?JavaScript (Node.js) , 100 bytes
Pruébalo en línea!
Gracias a @Arnauld, ahorra 2 bytes.
fuente
/[a-z]/gi
ahora.R ,
153135113 bytesPruébalo en línea!
Emite algunas advertencias con el uso de,
matrix
pero eso no debería afectar el resultado. También emite advertencias ya que la[<-
asignación eliminará los objetos asignados extraños por defecto.40 (!) Bytes abajo gracias a las mejoras de JayCe
fuente
,length(L)%/%5
[<-
arrojará elementos más allá de la longitud de los índices ...intToUtf8
C (gcc) ,
111109101100 bytesEditar: Se agregaron minúsculas por el comentario de @ FrownyFrog; ¡Gracias a Lynn, Christoph y user5329483 por sus sugerencias!
Pruébalo en línea!
fuente
i+=i+(*s<97)
.j
introduciendo un bit marcadori
y reescribiendo el segundo por asfor(i=1;i<32;s++)
. Y compensar los 32 adicionales en el exterior. Como un novato aquí cuento un repuesto de siete bytes.for(i=3;i<96;s++)
reduce el 65 a un número de un solo dígito, también conocido como1
.Ir,
219217192210209156 bytes¡Ahorró 25 bytes gracias a @Lynn! Guardado 53 bytes gracias a @ovs!
Tuve que perder 18 bytes debido a un error con cadenas sin guiones bajos :(
Pruébalo en línea!
fuente
Stax , 22 bytes
Ejecutar y depurarlo
El enfoque general es un reemplazo de expresión regular del
"_"
uso de una función de devolución de llamada que corta letras de las entradas para calcular cada carácter de reemplazo.Ejecute este
fuente
Rojo , 247 bytes
Pruébalo en línea!
Más legible:
fuente
Java 10, 186 bytes
Pruébalo en línea.
Explicación:
fuente
Rubí ,
107106103 bytesPruébalo en línea!
fuente
Japt, 25 bytes
Intentalo
Explicación
fuente
Pyth, 36 bytes
Pruébalo aquí
Explicación
fuente
Python 3.5 , 296 bytes
Pruébalo en línea
Primer código de golf :)
(Sé que no es pequeño en bytes, me estaba divirtiendo haciendo un código de 1 línea)
Aquí está la explicación:
Entrada del usuario
Encuentra el índice del primer _ en la cadena y lo almacena
elimina la cadena de todos los caracteres no alfa
Divide la cadena alfa en una matriz con cada elemento que consta de 5 caracteres
Ex. ['THeqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']
Luego convierte los caracteres en minúsculas a 0 y los caracteres en mayúsculas a 1
Ex. ['11001', '11000', '00011', '01110', '00110', '00000']
y convierte la cadena binaria en un número entero, agrega 65 y lo convierte en un carácter
Ex. ['z', 'y', 'd', 'o', 'g', 'a']
encuentra todos los caracteres después del primer _ y los empuja a la matriz z en sus ubicaciones respectivas (definidas anteriormente)
Ex. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']
dividir nuestra cadena en una lista de caracteres
divida nuestra cadena desde el primer _ hasta el final de la lista y reemplácela con la matriz z. También tuve que cortar la matriz z a la longitud de la cadena dividida desde el primer _ hasta el final porque obtuve un carácter adicional en el ejemplo de perro perezoso (la "a" al final de los ejemplos anteriores)
* imprime la respuesta *
fuente
o.islower()
yelse
, y creo que'1'
yfor
. Además, puede cambiarif d!="_"
aif"_"!=d
, pero el comentario anterior ya lo hace.Haskell , 165 bytes
Pruébalo en línea! Ejemplo de uso:
g"" "BInar_"
rendimientos"binary"
.fuente
PowerShell , 121 bytes
Pruébalo en línea!
Menos golfizado:
fuente
Perl 5
-p
, 78 bytesPruébalo en línea!
fuente