Neste desafio, seu objetivo será produzir a letra de Harder, Better, Fast, Stronger, do Daft Punk . Especificamente, imprima este texto:
Work It
Make It
Do It
Makes Us
Harder
Better
Faster
Stronger
More Than
Hour
Our
Never
Ever
After
Work Is
Over
Work It
Make It
Do It
Makes Us
Harder
Better
Faster
Stronger
More Than
Hour
Our
Never
Ever
After
Work Is
Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour After
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour After
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour After
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour After
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour After
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour After
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour After
Our Work Is Never Over
Work It Harder, Make It
Do It Faster, Makes Us
More Than Ever, Hour
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour Af-
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour Af-
Our Work Is Never Over
Work It Harder Make It Better
Do It Faster, Makes Us Stronger
More Than Ever Hour Af-
Our Work Is Never Over
Work It Harder
Make It Better
Do It Faster Makes Us Stronger
More Than Ever Hour
Our Work Is Never Over
Work It Harder
Do It Faster
More Than Ever
Our Work Is Never Over
Work It Harder
Make It Better
Do It Faster
Makes Us Stronger
More Than Ever
Hour After
Our Work Is Never Over
Sua saída pode ter uma nova linha à direita ou um espaço em branco à direita.
Métodos de compactação incorporados não são permitidos.
Isso é código de golfe, então o código mais curto vence!
code-golf
kolmogorov-complexity
TreFox
fonte
fonte
HQ9+Daft-Punk
que imprime este ...Respostas:
Ruby,
308303Algoritmo
Introdução à música: pegue 16 fichas e imprima-as duas vezes (a última possui uma nova linha extra)
Versículos: Divida as fichas juntas para formar os versos, 4 fichas por linha, na seguinte ordem:
Em algumas linhas, o último token é omitido ou trocado
Af-
. Essas linhas são anotadas com 1 bit no número mágico 0x744447 = 7619655.Em três linhas, o penúltimo token também é omitido, aqueles em que
i%51/48==1
A pontuação no meio da linha pode ser uma das
' '
', '
'\n'
. Eles são codificados no número 02220010000200100010001001110010001000100010001000100010 (base 3) = "l4yq62lhgnizb0kfu" (base 36.)Com comentários
fonte
Perl,
316309308307 bytesA fonte deve ser codificada como Latin-1.
Explicação
Começamos com a letra original. Por uma questão de brevidade, vamos assumir que eles são
Agora encontramos substrings curtos (≥ 3 caracteres) que ocorrem com frequência. Nesse caso,
"Work "
ocorre duas vezes. Substituímos cada ocorrência pelo caractere 0xE1. Também nos lembramos da string substituída em uma matriz:A próxima substring
"Harder"
,, é substituída por 0xE0. Asubsts
matriz cresce em direção à frente:Isso continua por um total de 34 iterações até chegarmos ao caractere 0xC0.
Agora concatenamos o
substs
uso do caractereb
(que não ocorre na letra) como separador. No código Perl, asubsts
matriz é armazenada@c
(usando a palavrab
de barra para dizersplit
onde dividir), as novas letras desordenadas estão inseridas$e
e o código simplesmente inverte as 34 substituições.fonte
Sprects , 302 bytes
Recentemente, criei esse idioma e decidi testá-lo com esse desafio. Ele gera
\n
s em vez de novas linhas porque em HTML, mas o intérprete é escrito em JavaScript. Por isso, aqui está uma versão com<br>
s em vez de\n
s:fonte
er
um único token?GolfScript (275 bytes)
Ele contém caracteres ASCII não imprimíveis, então aqui está um hexdump:
fonte
Ruby - 643 bytes
Edit: Golfe reduzido de 899 para 830.
Edit2: 830 -> 755.
Edit3: 755 -> 684.
Edit4: 684 -> 670.
Edit5: 670 -> 643.
Eu realmente não usei o ruby, por isso tenho certeza de que isso pode ser resolvido, é apenas uma tentativa:
fonte
JAVA 518 / 490Bytes
Editar: 7 bytes desnecessários e adicionar uma versão Java 6 com o truque estático {} Edit2: Explicação expand
java6:
Agradecemos a Chris Drost pela dica com os muitos "ER" s no texto. First String é uma tabela de pesquisa, a segunda parte usa as letras minúsculas (que são um bloco seqüencial em ascii) como um índice na tabela, subtraindo o valor mágico de a do valor.
A segunda parte consiste em várias seqüências de caracteres de comprimento diferente (as curtas são partes comuns compartilhadas entre vários versos) que são montadas em uma longa antes que o loop pelos caracteres aconteça
fonte
l
e use a String que contém todos os itens#
diretamente no loop for-each e altere-ochar
no loop for-each paraint
: Ofor(int o:r.toCharArray())System.out.print("\n#, #Work#Make#Do#Makes Us#Hard#Bett#Fast#Strong#More#Than#Hour#Our#Nev#Ev#Aft#Af-#Work Is#Ov# #er# It".split("#")[o-97]);
que resulta em -5 bytes / 513 bytes .JavaScript ES6,
440 bytes438 bytesEste é um monte de otimizações de compactação simples. Como uma linha:
Isso foi escrito para ser um script executável via
iojs --harmony_arrow_functions file.js
; você pode cortar aconsole.log()
sobrecarga, dependendo do significado de "produzir a letra".Explicação
Depois de executar o externo
.replace()
, o código fornecidoeval
é:Kudos
.repeat
função brilhante para strings, economizando 2 bytes.fonte
b.repeat(7)
em vez deb+b+b+b+b+b+b
PowerShell, 659 bytes
Cria uma matriz de palavras-chave
$a
e codifica a letra usando uma série de seqüências numéricas que são enviadas para umfor
loop. O loop pega substrings de dois dígitos, puxa a palavra-chave correspondente da$a
matriz e, finalmente,-join''
concatena tudo.Eu acho que isso é tão bom quanto esse método pode ser feito, pois toda vez que eu tentava jogar mais (por exemplo, substituindo
040008
por uma nova variável), era um par de bytes a mais porque o comprimento da substring não era suficiente para conta para todas as cotações extras necessárias. Embora tenha havido algumas novas respostas postadas desde o início, que possuem métodos ligeiramente diferentes que parecem mais curtos no PowerShell (como usar caracteres ASCII para codificar, em vez de dois dígitos, talvez?), Eu vou continuar este.Editar - esqueci a codificação de substituição que usei:
fonte
GolfScript , 251 bytes jogados
Experimente online!
Eliminado o
[]
código desnecessário e simplificado em conformidade. Alteradoi
ej
para@
e^
para permitir a remoção de espaço em branco. Primeira ocorrência atribuída' '
à variável|
para evitar a repetição dos mesmos três caracteres.GolfScript , primeira versão funcional 262 bytes
Experimente online!
Esta é uma porta da minha resposta do Ruby para o golfscript usando o mesmo algoritmo básico: imprima a lista de fichas duas vezes, depois junte-as nos versos e construa os versos linha por linha, ajustando as peculiaridades de cada um.
Existem algumas diferenças. O número para a pontuação correta da linha média está na base 81 (convenientemente, isso torna um caractere ASCII imprimível por verso); e o número que codifica a impressão ou não do último token é modificado porque o índice está em
55-i
vez dei-28
(o último causou problemas com potências negativas gerando números fracionários em vez de truncar para um número inteiro).Comentado
fonte
" "
) em uma variável. Além disso, não apareça depois de atribuir a uma variável por hábito.51
que eu perdi. Vou corrigi-lo mais tarde e, possivelmente, procurar outras maneiras de reduzi-lo. Este é o meu primeiro programa de golfe, e eu os acho muito difíceis de ler quando símbolos são usados como variáveis; portanto, também deixei minha primeira versão de 262 bytes em funcionamento, pelo menos por enquanto.Python - 1056 Charaters
Ainda há espaço para melhorias com nomes de variáveis, mas é um começo.
fonte
Ruby, 486 bytes
fonte
Ruby, 483 bytes
Funciona codificando cada palavra usada na música em uma única letra, multiplicando algumas estrofes e substituindo as letras codificadas pelas letras reais. Vírgulas, os espaços são deixados como estão.
u
é uma nova linha.fonte
fuc b gud
PHP, 434 bytes
Experimente online!
fonte