Arbeite härter und verbessere es


26

In dieser Herausforderung besteht dein Ziel darin, die Texte auf Daft Punks Harder, Better, Faster, Stronger auszugeben . Speziell diesen Text ausgeben:

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

Ihre Ausgabe enthält möglicherweise einen nachgestellten Zeilenumbruch oder ein nachgestelltes Leerzeichen.

Eingebaute Komprimierungsmethoden sind nicht zulässig.

Das ist Codegolf, also gewinnt der kürzeste Code!


1
@feersum Ja, wenn du das Lied hörst, kannst du sehen, dass er anfängt, After zu sagen und dann pausiert. Ich habe den Bindestrich hinzugefügt, um die Pause anzuzeigen und die Leute wütend zu machen. Ich kann es aber entfernen, wenn Sie wollen.
TreFox,

9
Ich bin schockiert, dass es keinen Esolang gibt HQ9+Daft-Punk druckt ...
Fatalize

3
Ich denke, Sie sollten eingebaute Komprimierungsmethoden zumindest nicht zulassen.
Fehler

9
Die Texte zu "Around the World" wären einfacher gewesen. ;)
Reto Koradi

3
Dieser Song ist der erste seit einiger Zeit, der in meinen Augen kein Duplikat der Rickroll ist. Ich habe es zu meta meta.codegolf.stackexchange.com/q/6956/15599
Level River St

Antworten:


11

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

Algorithmus

Song-Intro: Nimm 16 Token und drucke sie zweimal aus (letzterer trägt einen zusätzlichen Zeilenumbruch)

Verse: Riffle die Token in der folgenden Reihenfolge, um die Verse zu erstellen, 4 Token pro Zeile:

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

In einigen Zeilen wird das letzte Token weggelassen oder ausgetauscht Af-. Diese Zeilen sind mit einem 1-Bit in der magischen Nummer 0x744447 = 7619655 vermerkt.

In drei Zeilen wird auch das vorletzte Token weggelassen, die wo i%51/48==1

Die Interpunktion in der Mitte der Zeile kann eine der folgenden sein ' ' ', ' '\n' . Diese sind in der Nummer 02220010000200100010001110010001000100010001000100010 (Basis 3) = "l4yq62lhgnizb0kfu" (Basis 36) codiert.

Mit Kommentaren

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

Die Quelle muss als Latin-1 codiert sein.

@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

Erläuterung

Wir beginnen mit den Originaltexten. Nehmen wir der Kürze halber an, dass dies der Fall ist

lyrics = "Work Work Harder Harder"

Jetzt finden wir kurze Teilzeichenfolgen (≥ 3 Zeichen), die häufig vorkommen. In diesem Fall "Work "tritt zweimal auf. Wir ersetzen jedes Vorkommen durch das Zeichen 0xE1. Wir erinnern uns auch an den ersetzten String in einem Array:

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

Der nächste Teilstring "Harder"wird durch 0xE0 ersetzt. Das substsArray wächst nach vorne:

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

Dies dauert insgesamt 34 Iterationen, bis wir zum Zeichen 0xC0 gelangen.

Jetzt verketten wir substsdas Zeichen b(das im Text nicht vorkommt) als Trennzeichen. Im Perl-Code wird das substsArray in gespeichert @c(mit dem Bareword b, um splitzu bestimmen , wo es aufgeteilt werden soll), die neuen durcheinandergebrachten Texte werden in $eden Code eingefügt und die 34 Ersetzungen werden einfach umgekehrt.


1
Irgendwelche Erklärungen?
Feersum

1
@feersum: Fertig.
Timwi,

5

Korrigiert 302 Byte

: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

Ich habe diese Sprache erst kürzlich gemacht und mich entschlossen, sie mit dieser Herausforderung zu testen. Es gibt \ns anstelle von neuen Zeilen aus, da es in HTML ausgegeben wird, aber der Interpreter ist in JavaScript geschrieben. Aus diesem Grund ist hier eine Version mit <br>s anstelle von \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

Sehr interessant. Wir haben hier die Regel, dass die Sprache / der Interpreter / der Compiler vor der Herausforderung existieren muss. Ich sehe kein Datum auf Ihrem Dolmetscher, wann wurde es veröffentlicht?
Level River St

@steveverrill Ich habe es gestern gemacht. Ich denke meine Antwort ist dann ungültig.
DanTheMan

3
Konsens über Meta ist, dass dies immer noch veröffentlicht werden kann, aber nicht für das Gewinnen gilt. Sie sollten Ihrer Antwort wahrscheinlich einen Haftungsausschluss hinzufügen, um OP
Downgoat

Kannst du ereinen einzigen Token machen?
Solomon Ucko

4

GolfScript (275 Bytes)

Dieser enthält nicht druckbare ASCII-Zeichen. Hier ist ein 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                                  ](+

Wie funktioniert das? Soweit ich das beurteilen kann, bin ich der einzige, der eine "Riffle and Omit" -Strategie anwendet, was mich überrascht. Trotzdem bedeutet dies, dass ich hinter dieser Antwort auf dem zweiten Platz stehe.
Level River St

Handcodiertes Lempel-Ziv. Nichts Interessantes. Das war so ziemlich der Punkt, den ich in Meta versucht habe, aber eindeutig nicht überzeugend genug.
Peter Taylor

1
Nun, ich bin in der Tat enttäuscht, dass nur wenige Leute die Struktur des Songs voll ausgenutzt haben. Die Gelegenheit war da, wie die Tatsache zeigt, dass ich in Ruby auf dem zweiten Platz bin, nur 28 Bytes hinter Ihnen. Ich bin geneigt zu glauben, dass ein Port meiner Antwort in golfscript kürzer als 275 Bytes wäre. Denkst du anders
Level River St

Ich habe meine volle Batterie an Grammatikgeneratoren darauf ausprobiert und war überrascht, dass LZ vorne rauskam (obwohl der gierige Grammatikbauer nur ein Byte dahinter war). Aber ich würde mich nicht wundern, wenn einer der Ports dieses GolfScript oder ein Port des 276-Byte-Ansatzes für gierige Grammatik in Ruby mit weniger als 303 Bytes herauskommen würde.
Peter Taylor

2

Ruby - 643 Bytes

Bearbeiten: Golf von 899 bis 830.

Edit2: 830 -> 755.

Edit3: 755 -> 684.

Edit4: 684 -> 670.

Edit5: 670 -> 643.

Ich habe Rubin nicht wirklich benutzt, also bin ich mir sicher, dass dies heruntergolfen werden könnte. Dies ist nur ein Versuch:

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/490 Bytes

Edit: nicht benötigte 7 Bytes und fügte eine Java 6 Version mit dem statischen {} Trick Edit2: Erklärung expand hinzu

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]);}}

Vielen Dank an @Chris Drost für den Hinweis mit den vielen "ER" s im Text. Der erste String ist eine Nachschlagetabelle, der zweite Teil verwendet die Kleinbuchstaben (die in ASCII ein sequentieller Block sind) als Index in der Tabelle, indem der magische Wert von a vom Wert subtrahiert wird.

Der zweite Teil besteht aus mehreren Saiten unterschiedlicher Länge (kurze sind gemeinsame Teile mehrerer Verse), die zu einer langen zusammengesetzt werden, bevor die Schleife durch die Zeichen erfolgt


Gute Antwort! +1 Und ich weiß, es sind ungefähr 1,5 Jahre vergangen, aber Sie können zwei Dinge golfen: Entfernen lund verwenden Sie die Zeichenfolge, die alle #direkt in der for-each-Schleife enthält, und ändern Sie die Zeichenfolge charin der for-each-Schleife in 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]);Was zu -5 führt Bytes / 513 Bytes .
Kevin Cruijssen

2

JavaScript ES6, 440 Bytes 438 Bytes

Dies ist eine Reihe einfacher Komprimierungsoptimierungen. Als Einzeiler:

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

Dies wurde geschrieben, um ein ausführbares Skript über zu sein iojs --harmony_arrow_functions file.js; Sie können den console.log()Overhead abhängig von der Bedeutung von "Ausgabe der Texte" abschneiden .

Erläuterung

Nach dem Ausführen des Outer lautet .replace()der zugeführte Code 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() 
)

Ein dickes Lob

  • @vihan, der mich daran erinnert hat, dass ES6 auch diese glänzende neue .repeatFunktion für Strings hat, die 2 Bytes spart.

Sie können wahrscheinlich b.repeat(7)anstelle vonb+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''

Erstellt eine Reihe von Schlüsselwörtern $aund codiert dann den Text mit einer Reihe von numerischen Zeichenfolgen, die in einer forSchleife gesendet werden . Die Schleife nimmt zweistellige Teilzeichenfolgen, zieht das entsprechende Schlüsselwort aus dem $aArray und -join''verkettet es schließlich alle zusammen.

Ich denke, das ist ungefähr so ​​gut, wie diese Methode gemacht werden kann, da ich jedes Mal versucht habe, weiter Golf zu spielen (z. B. Ersetzen) 040008 eine neue Variable ), es sich herausstellte, dass es ein paar Bytes länger war, weil die Länge der Teilzeichenfolge nicht ausreichte Konto für alle zusätzlichen Anführungszeichen benötigt. Obwohl einige neue Antworten veröffentlicht wurden, die sich von den in PowerShell verwendeten Methoden unterscheiden und möglicherweise kürzer sind (z. B. Verwenden von ASCII-Zeichen zum Codieren anstelle von zweistelligen Zeichen?), Bleibe ich dabei dieses.

Bearbeiten - habe die von mir verwendete Ersatzkodierung vergessen:

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-

Wenn Sie einen Weg gefunden haben, den ASCII-Code eines Zeichens zu erhalten, das einfach zu verwenden ist, sollte dies ein paar Bytes
abschneiden

1

GolfScript , 251 Bytes Golf

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

Probieren Sie es online!

Unnötigen []und vereinfachten Code entsprechend eliminiert . Geändert iund jzu @und ^, um das Entfernen von Leerzeichen zu ermöglichen. Zugewiesenes erstes Auftreten von ' 'zu Variable| , um zu vermeiden, dass dieselben drei Zeichen wiederholt werden.

GolfScript , Erste Arbeitsversion 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]}/

Probieren Sie es online!

Dies ist eine Portierung meiner Ruby-Antwort in golfscript unter Verwendung desselben grundlegenden Algorithmus: Gib die Liste der Token zweimal aus, riffle sie dann in die Verse und baue die Verse Zeile für Zeile auf, wobei die jeweiligen Besonderheiten berücksichtigt werden.

Es gibt einige Unterschiede. Die Nummer für die korrekte Interpunktion in der Mitte befindet sich in der Basis 81 (günstigerweise macht dies ein druckbares ASCII-Zeichen pro Vers); und die Zahl, die codiert, ob das letzte Token gedruckt werden soll oder nicht, wird geändert, weil der Index 55-ianstelle von steht i-28.

Kommentiert

'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. Verwenden Sie nicht verwendete Symbole als Variablennamen, um Leerzeichen zu vermeiden, und speichern Sie space ( " ") in einer Variablen. Pop auch nicht nach dem Zuweisen zu einer Variablen aus Gewohnheit.
Erik der Outgolfer

@EriktheOutgolfer danke für die Tipps, aber ich habe bereits eine 251-Byte-Version gepostet, die die meisten davon enthält. Du hast ein Leerzeichen entdeckt 51, das ich jedoch verpasst habe. Ich werde es später beheben und möglicherweise nach anderen Möglichkeiten suchen, es zu verkürzen. Dies ist mein erstes Golfscript-Programm, und ich finde es sehr schwer zu lesen, wenn Symbole als Variablen verwendet werden. Daher habe ich zumindest vorerst meine erste 262-Byte-Arbeitsversion offen gelassen.
Level River St

Ah, das hast du anscheinend getan, lol.
Erik der 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

Noch Verbesserungsbedarf bei Variablennamen, aber es ist ein Anfang.


2
Könnte es hilfreich sein, eine Liste aller Variablennamen separat zu schreiben, damit Sie leicht erkennen können, welche einzelnen Buchstaben noch nicht verwendet wurden, und dann Ihre langen Variablennamen durch Suchen und Ersetzen ersetzen?
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,' ',',']]

Codiert jedes im Song verwendete Wort zu einem Buchstaben, multipliziert einige Strophen und ersetzt die codierten Buchstaben durch den eigentlichen Text. Kommas, Leerzeichen bleiben wie sie sind. uist ein Zeilenumbruch.


2
Osterei: enthält die Phrasefuc 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
"]);

Probieren Sie es online!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.