Sua tarefa é escrever um programa que imprima quatro versos extraídos das letras da música "Hey Jude" dos 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
MAS
A única entrada que você pode usar para construir esses quatro versículos é 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"
Observe que alguns tokens têm um espaço precedido e que aspas não fazem parte dos tokens. Você pode usar qualquer formato para a lista e reorganizar a ordem dos tokens.
Sua saída gerada deve corresponder exatamente aos quatro versículos acima. Observe que \n
é usado para novas linhas e uma nova linha extra é adicionada após cada verso. Você pode usar este arquivo (MD5 :) 4551829c84a370fc5e6eb1d5c854cbec
para verificar sua saída.
Você pode usar o seguinte diagrama ferroviário para entender a estrutura dos versos (cada elemento representa um símbolo):
O menor código em bytes vence. Feliz golfe.
fonte
Respostas:
Geléia , 42 bytes
Experimente online!
Versão codificada.
Entrada:
fonte
JavaScript (ES6), 108 bytes
Experimente online!
Versão alternativa, 114 bytes
Uma compactação um pouco melhor, mas infelizmente arruinada pelo código de descompactação maior.
Experimente online!
fonte
m
sinalizador não é necessário para literais de modelo de várias linhas. Interessante.Ruby +
-p
,177136120118115109 bytes (programa completo)Experimente online!
-41 bytes: alterna do uso de variáveis para o uso de caracteres como índices de matriz
-16 bytes: Alterne para um formato de entrada mais conveniente
-1 byte: não é necessário espaço entre
puts
e"abv...
-1 byte: use
$/
global em vez de?\n
literal-3 bytes: use em
gsub(/./)
vez de.chars.map
-6 bytes: ligue
-p
e utilize$_
. Obrigado Pavel !Cada caractere na sequência mágica representa um índice na matriz de entrada.
Eu preciso da variávelz
para que eu só leia STDIN uma vez.Eu poderia economizar algum custo do IO escrevendo um lambda aceitando uma matriz e retornando uma string. Isso requer um extra
v
no final, porque não está recebendo uma nova linha gratuita-p
.Ruby ,
162110108105 bytes (função)Experimente online!
fonte
String#unpack
para ser mais curto do que.chars
com.ord-97
, mas pode haver um.-p
e$_
Java 8,
241233141140138 bytesExplicação:
Experimente online.
Basicamente, converte os caracteres ASCII
0
(48), através deE
(69) para os índices de 0-indexados0
através21
com ai-48
.fonte
Python 3,
162147144142138 138127 bytesExperimente Online
Agradecimentos especiais a user202729 e Pavel .
fonte
05AB1E ,
142686665 bytesExperimente online!
-74 bytes graças ao EriktheOutgolfer, usando uma string compactada na base 255.
-2 bytes, revertendo a cadeia compactada para evitar a necessidade de concatenar três 0s
-1 byte, graças ao EriktheOutgolfer, alternando dois itens na matriz de entrada para evitar os 0s iniciais e removendo o comando Reverse R.
fonte
Retina 0.8.2 , 115 bytes
Experimente online! Recebe entrada como uma lista de cadeias delimitada por nova linha.
fonte
Stax ,
5958 bytesExecute e depure
A representação ascii correspondente do mesmo programa é essa.
`ORIpY$T&z{m6Y=>mR)_ .VQ)eN70e[:0yO8j$^RN[ Bp{IN/$|"3^;G#^&lv!`
é um literal compactado com um valor de"CDBGBLNOBQRSVWBBCEBHIJBMNPBQRUVWBBCFBHKJBLNOBQRSVWBBCDBGBLNPBQRTUVBB"
. Os caracteres representam índices na tabela de tokens. Este programa adiciona outro token para representar uma nova linha. Não está na entrada, mas foi adicionado durante a execução. O resto do programa funciona assim.fonte
Função C (gcc), 139 bytes
Experimente online!
fonte
printf
dentrofor
Vermelho , 133 bytes
Experimente online!
Ungolfed
t
é um bloco com a lista de tokensfonte
D , 166 bytes
Experimente online!
fonte
Mathematica, 102 bytes
Função pura. Pega uma lista de cadeias como entrada e retorna uma cadeia como saída. Apenas codifica todos os índices de token, da mesma forma que outras respostas.
fonte
Ruby , 97 bytes
Experimente online!
Salvou alguns bytes com uma abordagem diferente da maioria das outras respostas.
O número de tokens possíveis em cada linha é o seguinte
A sequência mágica contém um caractere por linha, que é interpretado como um bitmap, com o qual até 7 tokens disponíveis devem ser impressos para cada uma das 16 linhas da música.
a[i%7-1+i%28/7*5]
itera pelos tokens de cada linha, deslocando-se 5 para cada nova linha e com um deslocamento de 1 para explicar o fato de que a primeira linha possui apenas 4 tokens.Para as linhas 1-3, apenas os bits de 64 a 4 são usados - não usar os bits de 2 e 1 evita a impressão de tokens da próxima linha. para a linha 4, todos os 7 bits de 64 a 1 são usados.
fonte