Su tarea es escribir un programa que imprima los siguientes cuatro versículos extraídos de la letra de la canción "Hey Jude" de The Beatles (© Sony / ATV Music Publishing LLC):
Hey Jude, don't make it bad\n
Take a sad song and make it better\n
Remember to let her into your heart\n
Then you can start to make it better\n
\n
Hey Jude, don't be afraid\n
You were made to go out and get her\n
The minute you let her under your skin\n
Then you begin to make it better\n
\n
Hey Jude, don't let me down\n
You have found her, now go and get her\n
Remember to let her into your heart\n
Then you can start to make it better\n
\n
Hey Jude, don't make it bad\n
Take a sad song and make it better\n
Remember to let her under your skin\n
Then you'll begin to make it\n
\n
PERO
La única entrada que puede usar para construir estos cuatro versículos es esta lista de tokens:
"Hey Jude, don't"
" make it bad"
" be afraid"
" let me down"
"Take a sad song and make it better"
"You"
" were made to go out"
" and get her"
" have found her, now go"
"Remember to"
"The minute you"
" let her"
" into your heart"
" under your skin"
"Then"
" you"
" can start"
"'ll"
" begin"
" to make it"
" better"
Tenga en cuenta que algunos tokens tienen un espacio precedido y que las comillas adjuntas no son parte de los tokens. Puede utilizar cualquier formato para la lista y reorganizar el orden de los tokens.
Su salida generada tiene que coincidir exactamente con los cuatro versos anteriores. Tenga en cuenta que \n
se usa para líneas nuevas y se agrega una línea nueva adicional después de cada verso. Puede usar este archivo (MD5:) 4551829c84a370fc5e6eb1d5c854cbec
para verificar su salida.
Puede usar el siguiente diagrama de ferrocarril para comprender la estructura de los versos (cada elemento representa una ficha):
El código más corto en bytes gana. Feliz golf.
fuente
Respuestas:
Jalea , 42 bytes
Pruébalo en línea!
Versión de hardcoding.
Entrada:
fuente
JavaScript (ES6), 108 bytes
Pruébalo en línea!
Versión alternativa, 114 bytes.
Una compresión ligeramente mejor, pero tristemente arruinada por el código de descompresión más grande.
Pruébalo en línea!
fuente
m
indicador no es necesario para los literales de plantilla de varias líneas. Interesante.Rubí +
-p
,177136120118115109 bytes (programa completo)Pruébalo en línea!
-41 bytes: cambie de usar variables a usar caracteres como índices de matriz
-16 bytes: cambia a un formato de entrada más conveniente
-1 byte: no se necesita espacio entre
puts
y"abv...
-1 byte: use
$/
global en lugar de?\n
literal-3 bytes: usar en
gsub(/./)
lugar de.chars.map
-6 bytes: llama
-p
y utiliza$_
. Gracias pavel !Cada carácter en la cadena mágica representa un índice en la matriz de entrada.
Necesito la variablez
para que solo lea de STDIN una vez.Podría ahorrar algunos costos de IO escribiendo una lambda que acepte una matriz y devuelva una cadena. Esto requiere un extra
v
al final, porque no está obteniendo una nueva línea gratuita-p
.Ruby ,
162110108105 bytes (función)Pruébalo en línea!
fuente
String#unpack
para ser más corto que.chars
con.ord-97
, pero podría haber una.-p
y$_
Java 8,
241233141140138 bytesExplicación:
Pruébalo en línea.
Básicamente, convierte los caracteres ASCII
0
(48) a través deE
(69) a los índices 0-indexado0
a través de21
lai-48
.fuente
Python 3,
162147144142138127 bytesPruébalo en línea
Un agradecimiento especial a user202729 y Pavel .
fuente
05AB1E ,
142686665 bytesPruébalo en línea!
-74 bytes gracias a EriktheOutgolfer, utilizando una cadena comprimida base-255.
-2 bytes invirtiendo la cadena comprimida para evitar tener que concatenar tres ceros
-1 byte gracias a EriktheOutgolfer, al cambiar dos elementos en la matriz de entrada para evitar los 0 iniciales, y así eliminar el comando Reverse R.
fuente
Retina 0.8.2 , 115 bytes
Pruébalo en línea! Toma datos como una lista de cadenas delimitada por nueva línea.
fuente
Stax ,
5958 bytesEjecutar y depurarlo
La representación ascii correspondiente del mismo programa es esta.
`ORIpY$T&z{m6Y=>mR)_ .VQ)eN70e[:0yO8j$^RN[ Bp{IN/$|"3^;G#^&lv!`
es un literal comprimido con un valor de"CDBGBLNOBQRSVWBBCEBHIJBMNPBQRUVWBBCFBHKJBLNOBQRSVWBBCDBGBLNPBQRTUVBB"
. Los caracteres representan índices en la tabla de tokens. Este programa agrega otro token para representar una nueva línea. No está en la entrada, sino que se agrega durante la ejecución. El resto del programa funciona así.fuente
Función C (gcc), 139 bytes
Pruébalo en línea!
fuente
printf
enfor
Rojo , 133 bytes
Pruébalo en línea!
Sin golf
t
es un bloque con la lista de tokensfuente
D , 166 bytes
Pruébalo en línea!
fuente
Mathematica, 102 bytes
Pura función. Toma una lista de cadenas como entrada y devuelve una cadena como salida. Simplemente codifica todos los índices de tokens, de manera similar a otras respuestas.
fuente
Ruby , 97 bytes
Pruébalo en línea!
Guardado algunos bytes con un enfoque diferente a la mayoría de las otras respuestas.
El número de tokens posibles en cada línea es el siguiente
La cadena mágica contiene un carácter por línea, que se interpreta como un mapa de bits del cual se imprimirán hasta 7 tokens disponibles para cada una de las 16 líneas de la canción.
a[i%7-1+i%28/7*5]
itera a través de los tokens de cada línea, cambiando 5 por cada nueva línea, y con un desplazamiento de 1 para tener en cuenta el hecho de que la primera línea tiene solo 4 tokens.Para las líneas 1-3, solo se usan los bits de 64 a 4; no usar los bits de 2 y 1 evita imprimir tokens desde la siguiente línea. para la línea 4, se utilizan los 7 bits de 64 a 1.
fuente