Travaillez plus dur, améliorez-le

26

Dans ce défi, votre objectif sera de produire les paroles de Harder, Better, Faster, Stronger de Daft Punk . Plus précisément, affichez ce texte:

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

Votre sortie peut avoir un saut de ligne ou un espace de fin.

Les méthodes de compression intégrées ne sont pas autorisées.

C'est le golf de code, donc le code le plus court gagne!

TreFox
la source
1
@feersum Oui, si vous écoutez la chanson, vous pouvez voir qu'il commence à dire Après puis s'arrête. J'ai ajouté le trait d'union pour montrer la rupture et pour rendre les gens furieux. Je peux cependant le supprimer si vous le souhaitez.
TreFox
9
Je suis choqué qu'il n'y ait pas d'esolang comme HQ9+Daft-Punkça qui imprime ça ...
Fatalize
3
Je pense que vous devriez au moins interdire les méthodes de compression intégrées.
flawr
9
Les paroles de "Around the World" auraient été plus faciles. ;)
Reto Koradi
3
Cette chanson est la première depuis un moment qui, dans mon esprit, n'est pas un doublon du rickroll. Je l'ai amené à meta meta.codegolf.stackexchange.com/q/6956/15599
Level River St

Réponses:

11

Rubis, 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]}

Algorithme

Intro de la chanson: prenez 16 jetons et imprimez-les deux fois (le dernier porte une nouvelle ligne supplémentaire)

Versets: Riffle les jetons ensemble pour faire les versets, 4 jetons par ligne, dans l'ordre suivant:

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

Sur certaines lignes, le dernier jeton est omis ou échangé contre Af-. Ces lignes sont notées avec un bit dans le nombre magique 0x744447 = 7619655.

En trois lignes, l'avant-dernier jeton est également omis, ceux où i%51/48==1

La ponctuation au milieu de la ligne peut être l'une des suivantes ' ' ', ' '\n'. Ceux-ci sont codés au numéro 02220010000200100010001001110010001000100010001000100010 (base 3) = "l4yq62lhgnizb0kfu" (base 36.)

Avec commentaires

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

}
Level River St
la source
9

Perl, 316 309 308 307 octets

La source doit être encodée en 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

Explication

Nous commençons avec les paroles originales. Par souci de concision, supposons qu'ils sont

lyrics = "Work Work Harder Harder"

Nous trouvons maintenant des sous-chaînes courtes (≥ 3 caractères) qui se produisent souvent. Dans ce cas, "Work "se produit deux fois. Nous remplaçons chaque occurrence par le caractère 0xE1. Nous nous souvenons également de la chaîne remplacée dans un tableau:

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

La sous-chaîne suivante "Harder",, est remplacée par 0xE0. Le subststableau se développe vers l'avant:

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

Cela continue pour un total de 34 itérations jusqu'à ce que nous arrivions au caractère 0xC0.

Maintenant, nous concaténons l' substsutilisation du caractère b(qui n'apparaît pas dans les paroles) comme séparateur. Dans le code Perl, le subststableau est stocké dans @c(en utilisant le mot simple bpour dire splitoù diviser), les nouvelles paroles brouillées sont dedans $eet le code inverse simplement les 34 substitutions.

Timwi
la source
1
Des explications?
feersum
1
@feersum: Terminé.
Timwi
5

Sprects , 302 octets

: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

Je viens de créer ce langage et j'ai décidé de le tester avec ce challenge. Il génère \ns au lieu de nouvelles lignes car il génère en HTML, mais l'interpréteur est écrit en JavaScript. Pour cette raison, voici une version avec <br>s au lieu 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
DanTheMan
la source
Très intéressant. Nous avons ici une règle selon laquelle le langage / interprète / compilateur doit exister avant le défi. Je ne vois pas de date pour votre interprète, quand a-t-il été publié?
Level River St, du
@steveverrill Je l'ai fait hier. Je suppose que ma réponse est alors invalide.
DanTheMan
3
Le consensus sur Meta est que cela peut toujours être publié mais n'est pas applicable pour gagner. Vous devriez probablement ajouter un avertissement à votre réponse pour informer OP
Downgoat
Pouvez-vous créer erun seul jeton?
Solomon Ucko
4

GolfScript (275 octets)

Celui-ci contient des caractères ASCII non imprimables, voici donc un vidage hexadécimal:

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                                  ](+
Peter Taylor
la source
Comment cela marche-t-il? Pour autant que je sache, il semblerait que je sois le seul à utiliser une stratégie "riffle and omit", ce qui me surprend. Pourtant, cela signifie que je suis en deuxième position derrière cette réponse.
Level River St
Lempel-Ziv codé à la main. Rien d'interessant. Ce qui était à peu près le point que j'ai essayé de faire valoir dans la méta, mais clairement pas de manière suffisamment convaincante.
Peter Taylor
1
Et bien je suis en effet déçu que peu de personnes aient pleinement profité de la structure de la chanson. L'occasion était là, comme en témoigne le fait que je suis en deuxième place à Ruby, à seulement 28 octets derrière vous. J'ai tendance à croire qu'un port de ma réponse dans golfscript viendrait en moins de 275 octets. Pensez-vous autrement?
Level River St
J'ai essayé ma batterie complète de générateurs de grammaire dessus, et j'ai été surpris que LZ soit sorti en tête (bien que le constructeur de grammaire gourmand n'était qu'à un octet derrière). Mais je ne serais pas surpris si l'un des ports de ce GolfScript ou un port de l'approche grammaticale gourmande de 276 octets dans Ruby sortait à moins de 303 octets.
Peter Taylor
2

Ruby - 643 octets

Edit: Golfé de 899 à 830.

Edit2: 830 -> 755.

Edit3: 755 -> 684.

Edit4: 684 -> 670.

Edit5: 670 -> 643.

Je n'ai pas vraiment utilisé de rubis, donc je suis sûr que cela pourrait être joué au golf, ce n'est qu'une tentative:

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
Peter Lenkefi
la source
2

JAVA 518 / 490Bytes

Edit: 7 octets inutiles et ajout d'une version Java 6 avec l'astuce {} statique Edit2: Explication 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]);}}

Merci à @Chris Drost pour l'astuce avec les nombreux "ER" dans le texte. La première chaîne est une table de recherche, la deuxième partie utilise les lettres minuscules (qui sont un bloc séquentiel en ascii) comme index dans la table en soustrayant la valeur magique de a de la valeur.

La deuxième partie se compose de plusieurs chaînes de longueur différente (les courtes sont des parties communes partagées entre plusieurs vers) qui sont assemblées en une longue avant que la boucle à travers les caractères ne se produise

masterX244
la source
Bonne réponse! +1 Et je sais que cela fait environ 1,5 ans, mais vous pouvez jouer au golf deux choses: Supprimer let utiliser la chaîne contenant tous les #directement dans la boucle for-each, et changer la chardans la boucle for-each en int: 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]);Ce qui donne -5 octets / 513 octets .
Kevin Cruijssen
2

JavaScript ES6, 440 octets 438 octets

Il s'agit d'un tas d'optimisations de compression simples. En une ligne:

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(/'))

Cela a été écrit pour être un script exécutable via iojs --harmony_arrow_functions file.js; vous pouvez raser les console.log()frais généraux en fonction de la signification de "sortie des paroles".

Explication

Après avoir effectué l'extérieur .replace(), le code fourni evalest:

// 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() 
)

Gloire

  • @vihan, qui m'a rappelé qu'ES6 a également cette nouvelle .repeatfonction brillante pour les chaînes, économisant 2 octets.
CR Drost
la source
Vous pouvez probablement utiliser à la b.repeat(7)place deb+b+b+b+b+b+b
Downgoat
1

PowerShell, 659 octets

$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''

Crée un tableau de mots $a- clés , puis encode les paroles à l'aide d'une série de chaînes numériques qui sont envoyées en forboucle. La boucle prend des sous-chaînes à deux chiffres, extrait le mot-clé correspondant du $atableau et enfin le -join''concatène tout ensemble.

Je pense que c'est à peu près aussi bon que cette méthode peut être faite, car chaque fois que j'essayais de jouer au golf (par exemple, en remplaçant 040008par une nouvelle variable), cela s'avérait être quelques octets de plus parce que la longueur de la sous-chaîne n'était pas suffisante pour tenir compte de toutes les citations supplémentaires nécessaires. Bien qu'il y ait eu de nouvelles réponses publiées depuis que j'ai commencé qui ont des méthodes légèrement différentes qui semblent être plus courtes dans PowerShell (comme utiliser des caractères ASCII pour coder, plutôt que deux chiffres, peut-être?), Je vais m'en tenir à celui-là.

Modifier - j'ai oublié l'encodage de remplacement que j'ai utilisé:

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-
AdmBorkBork
la source
si vous avez un moyen d'obtenir le code ascii d'un caractère facile à utiliser, cela devrait fonctionner pour raser un tas d'octets
masterX244
1

GolfScript , 251 octets golfés

'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}/

Essayez-le en ligne!

Élimination du []code inutile et simplifié en conséquence. Modifié iet jpour @et ^pour permettre la suppression des espaces blancs. Première occurrence affectée ' 'à la variable |pour éviter de répéter les trois mêmes caractères.

GolfScript , première version de travail 262 octets

'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]}/

Essayez-le en ligne!

Ceci est un portage de ma réponse Ruby dans golfscript en utilisant le même algorithme de base: sortez la liste des jetons deux fois, puis rifflez-les dans les versets et construisez les versets ligne par ligne, en ajustant les particularités de chacun.

Il y a quelques différences. Le nombre pour la ponctuation médiane correcte est en base 81 (commodément, cela fait un caractère ascii imprimable par verset); et le nombre codant s'il faut ou non imprimer le dernier jeton est modifié parce que l'index est à la 55-iplace de i-28(ce dernier s'est avéré causer des problèmes avec des puissances négatives générant des nombres fractionnaires au lieu de tronquer en entier.)

Commenté

'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.
Level River St
la source
252 octets. Utilisez des symboles inutilisés comme noms de variable pour éviter les espaces et stockez space ( " ") dans une variable. Aussi, ne sautez pas après avoir assigné une variable par habitude.
Erik the Outgolfer
@EriktheOutgolfer merci pour les conseils, mais j'ai déjà posté une version de 251 octets incorporant la plupart d'entre eux. Vous avez repéré un espace avant 51que je ne le manque. Je le corrigerai plus tard et je chercherai peut-être d'autres façons de le raccourcir. Ceci est mon premier programme golfscript, et je les trouve très difficiles à lire lorsque des symboles sont utilisés comme variables, donc j'ai également laissé ma première version de travail de 262 octets au moins pour l'instant.
Level River St
Ah vous l'avez apparemment fait, lol.
Erik the Outgolfer
0

Python - 1056 caractères

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

Il y a encore place à l'amélioration avec les noms de variables, mais c'est un début.

Noelkd
la source
2
Cela pourrait-il aider à écrire séparément une liste de tous vos noms de variables afin que vous puissiez facilement voir quelles lettres simples n'ont pas encore été utilisées, puis rechercher-remplacer vos longs noms de variables?
trichoplax
0

Rubis, 486 octets

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
Vasu Adari
la source
0

Rubis, 483 octets

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,' ',',']]

Fonctionne en encodant chaque mot utilisé dans la chanson en une seule lettre, en multipliant quelques strophes, puis en remplaçant les lettres encodées par les paroles réelles. Les virgules, les espaces sont laissés tels quels. uest une nouvelle ligne.

dkudriavtsev
la source
2
Oeuf de Pâques: contient la phrasefuc b gud
dkudriavtsev
0

PHP, 434 octets

$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
"]);

Essayez-le en ligne!

Jörg Hülsermann
la source