Trabalhe mais, melhore


26

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!


1
@feersum Sim, se você ouvir a música, poderá ver que ele começa a dizer Depois e depois faz uma pausa. Eu adicionei o hífen para mostrar o intervalo e enfurecer as pessoas. Eu posso removê-lo, se você quiser.
TreFox 10/09

9
Eu estou chocado que não há esolang como HQ9+Daft-Punkque imprime este ...
Fatalize

3
Eu acho que você deveria pelo menos não permitir métodos de compactação.
flawr

9
A letra de "Around the World" teria sido mais fácil. ;)
Reto Koradi

3
Essa música é a primeira em um tempo que, na minha opinião, não é uma duplicata do rickroll. Eu levei para meta meta.codegolf.stackexchange.com/q/6956/15599
Level River St

Respostas:


11

Ruby, 308 303

puts a='Work It|Make It|Do It|Makes Us|Harder|Better|Faster|Stronger|More Than|Hour|Our|Never|Ever|After|Work Is|Over

'.split(?|),a
56.times{|i|puts a[j=i%4/2*4+i%4*2]+' '+a[j+4]+[[' ',', ','
']["l4yq62lhgnizb0kfu".to_i(36)/3**i%3]+a[j+1]+' ',''][i%51/48]+[a[j+5],['','Af-'][i%44/32]][7619655>>i-28&1]}

Algoritmo

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:

 0  4  1  5
 2  6  3  7
 8 12  9 13
10 14 11 15

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

puts a='Work It|Make It|Do It|Makes Us|Harder|Better|Faster|Stronger|More Than|Hour|Our|Never|Ever|After|Work Is|Over

'.split(?|),a                                                    #Set up array containing all 16 tokens, print it, and print it again (note newlines at end of last token.)

56.times{|i|                                                     #14 verses, 4 lines each

puts a[j=i%4/2*4+i%4*2]+                                         #expression cycles through 0,2,8,10. Print the first token on the line.

' '+a[j+4]+                                                      #print a space, and the second token on the line.

[[' ',', ','
']["l4yq62lhgnizb0kfu".to_i(36)/3**i%3]+a[j+1]+' ',''][i%51/48]+ #if i%51/48==1,print nothing. Otherwise print the 3rd token, followed by a space, and preceded by one of ' ' or ', ' or '\n'

[a[j+5],['','Af-'][i%44/32]][7619655>>i-28&1]                    #if 7619655>>i-28&1==0 print the fourth token. Otherwise print either nothing or Af- depending on the value of i%44/32

}

9

Perl, 316 309 308 307 bytes

A fonte deve ser codificada como Latin-1.

@c=split b,'
Â×
Ô
ÚáÐÙáÒ
ÅOÆÖáEváAftáØ
bÑÏábÝà
bÑÈ-
bÈÇÈÇbHoÆbur
btáÑbÏßËÌÊßÉbHoÜAfbÔ ÒÍbÝà ÐÎber, b Evb× ÙbÓ ÚbBettábOÜØ ÖßbStrongáÛbÕ
ÞàbÝs UsbOvábNevbDoàbÞ IsbFastbHardbMore Thanbur bMakebWorkber b Itber
';$e='ÞàÀÓÀÄÄÄÈÇÏÌÂÎÌÔ
ÛÍÌÅÃÃÃÁËßÊßÅÁÎáÛÍáÁËáÊáÉÇÕ';$f=chr$_+192,$e=~s/$f/$c[$_]/g for 0..34;print$e

Explicação

Começamos com a letra original. Por uma questão de brevidade, vamos assumir que eles são

lyrics = "Work Work Harder Harder"

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:

lyrics = "ááHarder Harder"
substs = ["Work "]

A próxima substring "Harder",, é substituída por 0xE0. A substsmatriz cresce em direção à frente:

lyrics = "ááà à"
substs = ["Harder", "Work "]

Isso continua por um total de 34 iterações até chegarmos ao caractere 0xC0.

Agora concatenamos o substsuso do caractere b(que não ocorre na letra) como separador. No código Perl, a substsmatriz é armazenada @c(usando a palavra bde barra para dizer splitonde dividir), as novas letras desordenadas estão inseridas $ee o código simplesmente inverte as 34 substituições.


1
Alguma explicação?
feersum 12/09/15

1
@feersum: Feito.
Timwi

5

Sprects , 302 bytes

:xxnnnnnnnmW12603 27428 3s59qp wb12604280qpb12603 2742803s59qp0wjb:ncvb:mcQb:WcEb:x1203 204203s50607809q0w0y0i0p0j01l0z00:c1263 27428, 3s59:vqp wj:Qqp, w:Eqp wAf-:b0y1liz00:0\n:1Work :2It :3Make:4Do :5 Us :6Harder :7Better\n:8Faster:9Stronger\n:qMore Than :wHour :yOur :iNever :pEver:jAfter :lIs :zOver

Recentemente, criei esse idioma e decidi testá-lo com esse desafio. Ele gera \ns 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 \ns:

:xxnnnnnnnmW12603 27428 3s59qp wb12604280qpb12603 2742803s59qp0wjb:ncvb:mcQb:WcEb:x1203 204203s50607809q0w0y0i0p0j01l0z00:c1263 27428, 3s59:vqp wj:Qqp, w:Eqp wAf-:b0y1liz00:0<br>:1Work :2It :3Make:4Do :5 Us :6Harder :7Better<br>:8Faster:9Stronger<br>:qMore Than :wHour :yOur :iNever :pEver:jAfter :lIs :zOver

Muito interessante. Temos uma regra aqui que o idioma / intérprete / compilador deve existir antes do desafio. Não vejo uma data em seu intérprete, quando foi publicada?
Level River St

@steveverrill Eu fiz ontem. Acho que minha resposta é inválida então.
DanTheMan

3
O consenso no Meta é que isso ainda pode ser publicado, mas não é aplicável à vitória. Você provavelmente deve adicionar um aviso para a sua resposta para informar OP
Downgoat

Você pode criar erum único token?
Solomon Ucko 22/01

4

GolfScript (275 bytes)

Ele contém caracteres ASCII não imprimíveis, então aqui está um hexdump:

0000000: 3a6b 2757 6f72 6b20 4974 0a4d 616b 6586  :k'Work It.Make.
0000010: 0444 6f8c 0873 2055 730a 4861 7264 6572  .Do..s Us.Harder
0000020: 0a42 6574 7485 0346 6173 8504 5374 726f  .Bett..Fas..Stro
0000030: 6e67 9503 4d6f 7265 2054 6861 6e0a 486f  ng..More Than.Ho
0000040: 7572 0a4f 8203 4e65 76ae 0345 8304 4166  ur.O..Nev..E..Af
0000050: b204 df06 730a 4f96 048c 07ed 7020 d606  ....s.O.....p ..
0000060: 20f4 0720 de07 fb05 20e4 062c 9b05 7320   .. .... ..,..s 
0000070: 5573 20ee 1220 df04 20f3 0420 e406 f903  Us .. .. .. ....
0000080: 20e8 0720 4e65 9b04 eeff eeff eeb6 d206   .. Ne..........
0000090: fe03 e817 df0f 2ce0 05da 5c27 d908 2042  ......,...\'.. B
00000a0: 6574 d303 e017 2053 7472 6f6e 67bd 03e9  et.... Strong...
00000b0: 0ee8 0520 4166 2dec ffec 040a ec1b eb26  ... Af-........&
00000c0: e728 d80c c60f c128 4d61 6b65 d004 4265  .(.....(Make..Be
00000d0: 74c3 04d0 0e9a 0373 2055 7320 5374 726f  t......s Us Stro
00000e0: 6e67 e212 486f e303 4166 fc04 ed16 277b  ng..Ho..Af....'{
00000f0: 6b7b 7b6b 247d 2a30 3a6b 3b7d 7b31 3237  k{{k$}*0:k;}{127
0000100: 2e32 243c 7b2d 3a6b 7d2a 3b7d 6966 7d2f  .2$<{-:k}*;}if}/
0000110: 5d28 2b                                  ](+

Como é que isso funciona? Pelo que sei, parece que sou o único a usar uma estratégia de "omitir", o que me surpreende. Ainda assim, significa que estou em segundo lugar por trás dessa resposta.
Level River St

Lempel-Ziv codificado à mão. Nada interessante. Qual foi o argumento que tentei colocar na meta, mas claramente não de forma convincente o suficiente.
Peter Taylor

1
Bem, eu estou realmente desapontado que poucas pessoas tenham aproveitado ao máximo a estrutura da música. A oportunidade estava lá, como evidenciado pelo fato de eu estar em segundo lugar no Ruby, apenas 28 bytes atrás de você. Estou inclinado a acreditar que uma porta da minha resposta no golfscript chegaria a menos de 275 bytes. Você pensa de outra maneira?
Level River St

Eu experimentei toda a minha bateria de geradores de gramática e fiquei surpreso que o LZ tivesse sido lançado à frente (embora o ganancioso construtor de gramáticas estivesse apenas um byte atrás). Mas eu não ficaria surpreso se uma das portas deste GolfScript ou uma abordagem gramatical gananciosa de 276 bytes para Ruby saísse com menos de 303 bytes.
Peter Taylor

2

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:

l=%w[Work Make Do Harder Better Faster Stronger More Than Hour Our Never Ever After Over Faster,]
i,j,f,u,d=->x{l[x]+' It'},->x,y{l[x]+' It '+l[y]+' '},->a,b,c,d,e{a+' '+b+' '+c+' '+d+' '+e},'s Us ',l[6]
s,q,w,e,r,y,k=f[l[10],l[0],'Is',l[11],l[14]],j[0,3],j[1,4],j[2,15],j[2,5],->d,e{f[l[7],l[8],l[12],d,e]},l[1]+u
t,z,m=e+k,->a{puts q+w,t+d,y[l[9],a],s,''},y['','']
2.times{puts i[0],i[1],i[2],k,l[3],l[4],l[5],d,l[7]+' '+l[8],l[9],l[10],l[11],l[12],l[13],l[0]+' Is',l[14],''}
7.times{z[l[13]]}
puts q+i[1],t,f[l[7],l[8],l[12]+',',l[9],''],s,''
3.times{z['Af-']}
puts q,w,r+k+d,y[l[9],''],s,'',q,r,m,s,'',q,w,r,k+d,m,l[9]+' '+l[13],s

2

JAVA 518 / 490Bytes

Editar: 7 bytes desnecessários e adicionar uma versão Java 6 com o truque estático {} Edit2: Explicação expand

class E{public static void main(String[]_){String l="\n#, #Work#Make#Do#Makes Us#Hard#Bett#Fast#Strong#More#Than#Hour#Our#Nev#Ev#Aft#Af-#Work Is#Ov# #er# It",a="cwadwaewafagvahvaivajvakulamanaovapvaqvasatvaa",z="anusuovutvaa",y="kulupvu",x="cwugv",w="fujva",b=x+"udwuhvuaewuivb"+w,c=b+y+"muqvu"+z,d=x+"bdwaewuivbfakulupvbm"+z,e=b+y+"mur"+z,f=x+"adwuhvaewuivu"+w+y+z+x+"aewuivakulupv"+z+x+"adwuhvaewuiva"+w+"kulupvamuqv"+z,r=a+a+c+c+c+c+c+c+c+d+e+e+e+f;for(char o:r.toCharArray())System.out.print(l.split("#")[o-97]);}}

java6:

class E{static{String l="\n#, #Work#Make#Do#Makes Us#Hard#Bett#Fast#Strong#More#Than#Hour#Our#Nev#Ev#Aft#Af-#Work Is#Ov# #er# It",a="cwadwaewafagvahvaivajvakulamanaovapvaqvasatvaa",z="anusuovutvaa",y="kulupvu",x="cwugv",w="fujva",b=x+"udwuhvuaewuivb"+w,c=b+y+"muqvu"+z,d=x+"bdwaewuivbfakulupvbm"+z,e=b+y+"mur"+z,f=x+"adwuhvaewuivu"+w+y+z+x+"aewuivakulupv"+z+x+"adwuhvaewuiva"+w+"kulupvamuqv"+z,r=a+a+c+c+c+c+c+c+c+d+e+e+e+f;for(char o:r.toCharArray())System.out.print(l.split("#")[o-97]);}}

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


Boa resposta! +1 E eu sei que já se passaram cerca de 1,5 anos, mas você pode jogar duas coisas: remova le use a String que contém todos os itens #diretamente no loop for-each e altere-o charno loop for-each para int: O for(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 .
Kevin Cruijssen

2

JavaScript ES6, 440 bytes 438 bytes

Este é um monte de otimizações de compactação simples. Como uma linha:

eval("a='w_m_d_u_h_b_f_s_M_H_O_N_E_A_W_VX';b='w hTm b_d f,Tu s_M ETH A_O W N VX';c=bRA/,'Y');o={};'wWork It|mMake It|dDo It|uMakes Us|hHard&bBett&fFast&sStrong&MMore Than|HHour|OOur|NNev&EEv&AAft&WWork Is|VOv&X\\n\\n|YAf-|_\\n|T 'R&/g,'er|').split('|').map(x=>o[x[0]]=x.slice(1));console.log((a+a+b.repeat(7)+bR._/g,'_')R,?T/g,',T')+c+c+c+bRT/,'_')R,/,'')+bR,?T. ._/g,'_')+bR,?T/g,'_'))R\\w/g,x=>o[x]).trim())".replace(/R/g,'.replace(/'))

Isso foi escrito para ser um script executável via iojs --harmony_arrow_functions file.js; você pode cortar a console.log()sobrecarga, dependendo do significado de "produzir a letra".

Explicação

Depois de executar o externo .replace(), o código fornecido evalé:

// The first three lines, with each phrase compressed to a single character, newlines
// compressed to _, and block-endings compressed to X. Call this compressed-format.
a = 'w_m_d_u_h_b_f_s_M_H_O_N_E_A_W_VX';

// The compressed-format main block: this is repeated seven times literally but
// every other stanza, besides `a` above, ultimately uses some simple variant
// of this block.
b = 'w hTm b_d f,Tu s_M ETH A_O W N VX';
// The new character T above is a new character we're adding to compressed-format, it is
// a space in the main block but also a hook for some regular expressions later.

// We need one more entry in compressed-format: some blocks, here assigned to
// the variable `c`, shorten "After" to Y = "Af-".
c = b.replace(/A/, 'Y');

// Now we want to build a lookup table for this compressed format above. That is done by
// these lines, which have also been compressed:
o={};
'wWork It|mMake It|dDo It|uMakes Us|hHard&bBett&fFast&sStrong&MMore Than|HHour|OOur|NNev&EEv&AAft&WWork Is|VOv&X\n\n|YAf-|_\n|T '
    .replace(/&/g, 'er|')
    .split('|')
    .map(x => o[x[0]] = x.slice(1));
// The fact that so many fragments end in 'er' allows us to actually shave a couple 
// bytes above, but the compression scheme is fundamentally creating a dict like
//     {a: "Phrase 1", b: "Phrase 2", c: "Phrase 3", d: "Phrase 4"}
// from the string "aPhrase 1|bPhrase 2|cPhrase 3|dPhrase4".

// Now we have the part that actually does the work:
console.log(
    ( // build-string phase
        // first two opening blocks `a`
        a + a + 

        // seven repetitions of `b`
        b.repeat(7) +

        // a version of `b` without final words and with commas before each T.
        b.replace(/._/g, '_').replace(/,?T/g, ',T') + 

        // three repetitions with the 'Af-' suffix.
        c + c + c + 

        // one with the first T converted into a newline and no commas
        b.replace(/T/, '_').replace(/,/, '') + 

        // one with only the first halfs of the three lines
        b.replace(/,?T. ._/g, '_') + 

        // one with no commas and all T's converted to newlines.
        b.replace(/,?T/g, '_')
    ) // end build-string phase
    // Now we convert from compressed-format to actual format
    .replace(/\w/g, x => o[x])
    // We are only told that one trailing newline is allowed; we have two extra:
    .trim() 
)

Kudos

  • @vihan, que me lembrou que o ES6 também tem essa nova .repeatfunção brilhante para strings, economizando 2 bytes.

Provavelmente, você pode usar b.repeat(7)em vez deb+b+b+b+b+b+b
Downgoat

1

PowerShell, 659 bytes

$a=@(" ","`n",",","Stronger","Make It","Do It","Makes Us","Harder","Better","Faster","Work It","More Than","Hour","Our","Never","Ever","After","Work Is","Over","Af-")
$z="1000070"
$y="01130017001400180101"
$x="010500090200060"
$v="00301110015001200"
$b="100104010501060107010801090103011101120113011401150116011701180101"
$c=$z+"0040008$x$v"+"16$y"
$d=$z+"20004$x"+"1110015020012$y"
$e=$z+"0040008$x$v"+"19$y"
$f=$z+"10400080105000900060003011100150012$y"
$g=$z+"105000901110015$y"+"10000701040008010500090106000301110015011200160113001700140018"
$($b,$b,$c,$c,$c,$c,$c,$c,$c,$d,$e,$e,$e,$f,$g|%{for($i=0;$i-lt$_.length;$i+=2){$a[$_.Substring($i,2)]}})-join''

Cria uma matriz de palavras-chave $ae codifica a letra usando uma série de seqüências numéricas que são enviadas para um forloop. O loop pega substrings de dois dígitos, puxa a palavra-chave correspondente da $amatriz 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 040008por 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:

00  <space>
01  `n
02  ,
10  Work It
04  Make It
05  Do It
06  Makes Us
07  Harder
08  Better
09  Faster
03  Stronger
11  More Than
12  Hour
13  Our
14  Never
15  Ever
16  After
17  Work Is
18  Over
19  Af-

se você tem uma maneira de obter o código ASCII de um caráter isso é fácil de usar, em seguida, que deve trabalhar fora para raspar um monte de bytes
masterX244

1

GolfScript , 251 bytes jogados

'Work It
Make It
Do It
Makes Us
Harder
Better
Faster
Stronger
More Than
Hour
Our
Never
Ever
After
Work Is
Over

'2*.n/:a;56,{:@4%.2&+2*:^a=' ':|4^+a='jSRSSS]SSSSSST'81base 3@?/3%[|', 'n]=^)a=+@ 51%48/!*|237118176 2 55@-?/1&@44%32/'Af-'*5^+a=if^9/n*n}/

Experimente online!

Eliminado o []código desnecessário e simplificado em conformidade. Alterado ie jpara @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

'Work It
Make It
Do It
Makes Us
Harder
Better
Faster
Stronger
More Than
Hour
Our
Never
Ever
After
Work Is
Over

'2*.n/:a;56,{:i;[i 4%.2&+2*:j a=' '4j+a='jSRSSS]SSSSSST'81base 3i?/3%[' '', 'n]=j)a=+i 51%48/!*' '237118176 2 55i-?/1&i 44%32/'Af-'*5j+a=if j 9/n*n]}/

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-ivez de i-28(o último causou problemas com potências negativas gerando números fracionários em vez de truncar para um número inteiro).

Comentado

'Work It
Make It
Do It
Makes Us
Harder
Better
Faster
Stronger
More Than
Hour
Our
Never
Ever
After
Work Is
Over

'2*                                               #make a string of all the tokens twice and push on the stack
.n/:a;                                            #duplicate the string, split into tokens at newline to form array. Assign to a
56,{:i;                                           #iterate through i= (0..55) 
  [i 4%.2&+2*:j                                   #calculate j=(i%4+(i%4&2))*2 to cycle through 0 2 8 10.
  a=' '                                           #leave a[j] on stack followed by space (token A)
  4j+a=                                           #leave a[j+4] on stack (token B))
  'jSRSSS]SSSSSST'81base 3i?/3%[' '', 'n]=j)a=+   #leave ' ' ', ' or newline on stack as appropriate followed by a[j+1] (token C)
  i 51%48/!*                                      #multiply the data described in the previous line by  !(i%51/48)  (1 or 0)
  ' '                                             #leave a space on the stack
  237118176 2 55i-?/1&                            #leave 237118176/2**55-i & 1 on stack (true or false indicates token D required)
  i 44%32/'Af-'*5j+a=                             #leave i%44/32= 0 or 1 copies of 'Af-' on the stack. Leave a[j+5] on the stack.  
  if                                              #depending on value of last but one line, select an option from the previous line.
  j 9/n*n]                                        #leave a newline on the stack. if 9/n is 1 or more (last line of verse) leave an additional newline
}/                                                #close the loop
                                                  #printing done by implied stack dump on program exit.

252 bytes. Use símbolos não utilizados como nomes de variáveis ​​para evitar espaços em branco e armazene espaço ( " ") em uma variável. Além disso, não apareça depois de atribuir a uma variável por hábito.
Erik the Outgolfer

@EriktheOutgolfer obrigado pelas dicas, mas eu já postei uma versão de 251 bytes incorporando a maioria delas. Você viu um espaço antes 51que 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.
Level River St

Ah você aparentemente fez, lol.
Erik the Outgolfer

0

Python - 1056 Charaters

a,b,d,s,w,i,t,e,f,h,H,mi,mu,mt,ad,n,o,O="After","Better","Do It ","Stronger","Work ","Is ","It ","Ever ","Faster ","Harder ","Hour ","Make It ","Makes Us ","More Than ","Af-","Never ","Our ","Over"
owinO=o+w+i+n+O
mus=mu+s
df=d+f
dfmu=df[0:-1]+", "+mu
dfmus=df+mus
dfcmus=df[0:-1]+", "+mus
ha=h+a
Ha=H+a
mib=mi+b
mte=mt+e
mteh=mte+H
mtech=mte[0:-1]+", "+H
mtehad=mteh+ad
mteha=mteh+a
wi=w+i
wt=w+t
wth=wt+h
wthmt=wth[0:-1]+", "+mi
wthmib=wth+mi+b
E = ""
l =[wt,mi,d,mu,h,b,f,s,mt,H,o,n,e,a,wi,O,E,wt,mi,d,mu,h,b,f,s,mt,H,o,n,e,a,wi,O,E,wthmib,dfcmus,mteha,owinO,E,wthmib,dfcmus,mteha,owinO,E,wthmib,dfcmus,mteha,owin
O,E,wthmib,dfcmus,mteha,owinO,E,wthmib,dfcmus,mteha,owinO,E,wthmib,dfcmus,mteha,owinO,E,wthmib,dfcmus,mteha,owinO,E,wthmt,dfmu,mtech,owinO,E,wthmib,dfcmus,mteha
d,owinO,E,wthmib,dfcmus,mtehad,owinO,E,wthmib,dfcmus,mtehad,owinO,E,wth,mib,dfmus,mteh,owinO,E,wth,df,mte,owinO,E,wth,mib,df,mus,mte,Ha,owinO]

for ln in l:
    print ln

Ainda há espaço para melhorias com nomes de variáveis, mas é um começo.


2
Pode ajudar escrever separadamente uma lista de todos os seus nomes de variáveis, para que você possa ver facilmente quais letras únicas ainda não foram usadas e, em seguida, substitua seus nomes longos por variáveis ​​de pesquisa?
Trichoplax

0

Ruby, 486 bytes

i=%w(Work\ It Make\ It Do\ It Makes\ Us Harder Better Faster Stronger More\ Than Hour Our Never Ever After Work\ Is Over)
z=i[1]+p+i[5]
y=i[2]+p+i[6]
x=z+n+y
w=i[3]+p+i[7]
v=i[8]+p+i[12]
u=w+n+v
t="Our "+i[14]+" Never Over"
s=i[0]+p+i[4]
r=i[9]+p+i[13]
n="\n"
p=' '
m=', '
a=i.join n
q=n+t
l=s+n
b=s+p+x+m+u+p+r+q
c=s+m+i[1]+n+y+m+i[3]+n+v+m+i[9]+q
d=b.gsub("After","Af-")
e=l+x+p+u+p+i[9]+q
f=l+y+n+v+q
g=l+x+n+u+n+r+q
def o s
s+"

"
end
puts o(a)*2+o(b)*7+o(c)+o(d)*2+o(d)+o(e)+o(f)+g

0

Ruby, 483 bytes

puts "#{'a buc bud bucs eufuguhuiuj kulumuoupuqua rutuu'*2}#{'a b f c b gud b h, cs e iuj k p l qum a r o tuu'*7}a b f, c bud b h, cs euj k p, lum a r o tuu#{'a b f c b gud b h, cs e iuj k p l num a r o tuu'*3}a b fuc b gud b h cs e iuj k p lum a r o tuua b fud b huj k pum a r o tuua b fuc b gud b hucs e iuj k pul qum a r o tu".gsub /./,Hash[[*?a..?u,' ',','].zip %w{Work It Make Do Us Harder Better Faster Stronger More Than Hour Our Af- Never Ever After Is s Over}+[?\n,' ',',']]

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.


2
Easter egg: contém a frasefuc b gud
dkudriavtsev

0

PHP, 434 bytes

$m="Make It";$b="$m Better";$o="Our Work Is Never Over
";$u="Makes Us";$s="$u Stronger";$d="Do It";$f="$d Faster";$e="More Than Ever";$h="Hour";$w="Work It Harder";echo strtr("001111111$w, $m
$f, $u
$e, $h
$o
222$w
$b
$f $s
$e $h
$o
$w
$f
$e
$o
$w
$b
$f
$s
$e
$h After
$o",["Work It
$m
$d
$u
Harder
Better
Faster
Stronger
More Than
$h
Our
Never
Ever
After
Work Is
Over

","$w $b
$f, $s
$e $h After
$o
","$w $b
$f, $s
$e $h Af-
$o
"]);

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.