Pracuj ciężej, popraw to


26

W tym wyzwaniu Twoim celem będzie dostarczenie tekstów do Daft Punk's Harder, Better, Faster, Stronger. W szczególności wyślij ten tekst:

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

Twój wynik może mieć końcowy znak nowej linii lub końcowy biały znak.

Wbudowane metody kompresji nie są dozwolone.

To jest golf golfowy, więc wygrywa najkrótszy kod!


1
@feersum Tak, jeśli posłuchasz piosenki, zobaczysz, że zaczyna mówić Po, a potem zatrzymuje się. Dodałem łącznik, aby pokazać przerwę i rozwścieczyć ludzi. Mogę go jednak usunąć, jeśli chcesz.
TreFox,

9
Jestem zszokowany, że nie ma takiego esolanga, HQ9+Daft-Punkktóry to drukuje ...
Fatalize

3
Myślę, że powinieneś przynajmniej zabronić wbudowanych metod kompresji.
flawr

9
Tekst do „Around the World” byłby łatwiejszy. ;)
Reto Koradi,

3
Ta piosenka jest pierwszą od dłuższego czasu, która moim zdaniem nie jest duplikatem rickrolla. Wziąłem to do meta.codegolf.stackexchange.com/q/6956/15599
Level River St

Odpowiedzi:


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

Algorytm

Wprowadzenie do piosenki: weź 16 żetonów i wydrukuj je dwa razy (ostatni zawiera dodatkową nową linię)

Wersety: Riffuj tokeny razem, aby utworzyć wersety, 4 tokeny w wierszu, w następującej kolejności:

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

W niektórych liniach ostatni token jest pomijany lub zamieniany na Af-. Linie te są oznaczone 1-bitowym magicznym numerem 0x744447 = 7619655.

W trzech wierszach pominięto również przedostatni token, tam gdzie i%51/48==1

Interpunkcja na środku linii może być jedną z ' ' ', ' '\n'. Są one zakodowane w numerze 02220010000200100010001001110010001000100010001000100010 (podstawa 3) = „l4yq62lhgnizb0kfu” (podstawa 36.)

Z komentarzami

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 bajtów

Źródło musi być zakodowane jako 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

Wyjaśnienie

Zaczynamy od oryginalnych tekstów. Dla zwięzłości załóżmy, że tak

lyrics = "Work Work Harder Harder"

Teraz znajdujemy krótkie podciągi (≥ 3 znaki), które występują często. W takim przypadku "Work "występuje dwukrotnie. Każde wystąpienie zastępujemy znakiem 0xE1. Pamiętamy również zastąpiony ciąg w tablicy:

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

Następny podciąg "Harder"zastępuje się 0xE0. substsTablica rośnie w kierunku do przodu:

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

Trwa to łącznie 34 iteracji, aż dojdziemy do znaku 0xC0.

Teraz łączymy substsużycie postaci b(która nie występuje w tekstach) jako separatora. W kodzie Perla subststablica jest przechowywana w @c(używając słowa kluczowego, baby powiedzieć, splitgdzie podzielić), znajdują się nowe pomieszane teksty $e, a kod po prostu odwraca 34 podstawienia.


1
Jakieś wyjaśnienia?
feersum

1
@feersum: Gotowe.
Timwi

5

Szpule , 302 bajty

: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

Niedawno stworzyłem ten język i postanowiłem przetestować go z tym wyzwaniem. Wypisuje \ns zamiast nowych wierszy, ponieważ wyprowadza do HTML, ale interpreter jest napisany w JavaScript. Z tego powodu oto wersja z <br>s zamiast \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

Bardzo interesujące. Mamy tutaj zasadę, że język / tłumacz / kompilator musi istnieć przed wyzwaniem. Nie widzę daty na twoim tłumaczu, kiedy został opublikowany?
Level River St

@steveverrill Zrobiłem to wczoraj. Myślę, że wtedy moja odpowiedź jest nieprawidłowa.
DanTheMan

3
Konsensus w sprawie Meta jest taki, że można to nadal opublikować, ale nie dotyczy wygranej. Prawdopodobnie powinieneś dodać zastrzeżenie do swojej odpowiedzi, aby poinformować OP
Downgoat

Czy potrafisz zrobić erpojedynczy token?
Solomon Ucko

4

GolfScript (275 bajtów)

Zawiera on niedrukowalne znaki ASCII, więc oto zrzut heksowy:

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                                  ](+

Jak to działa? O ile wiem, wydaje mi się, że jestem jedyną osobą, która stosuje strategię „riffle and omate”, która mnie zaskakuje. Mimo to oznacza, że ​​jestem na drugim miejscu za tą odpowiedzią.
Level River St

Ręcznie kodowany Lempel-Ziv. Nic interesującego. Właśnie o to starałem się mówić w meta, ale najwyraźniej niewystarczająco przekonująco.
Peter Taylor

1
Naprawdę jestem rozczarowany, że niewiele osób w pełni skorzystało ze struktury utworu. Okazja się pojawiła, o czym świadczy fakt, że jestem na drugim miejscu w Ruby, tylko 28 bajtów za tobą. Jestem skłonny wierzyć, że część mojej odpowiedzi na skrypt golfowy miałaby mniej niż 275 bajtów. Czy myślisz inaczej?
Level River St

Wypróbowałem na nim całą baterię generatorów gramatyki i byłem zaskoczony, że LZ wyszedł na przód (chociaż chciwy konstruktor gramatyki był tylko o jeden bajt za). Ale nie zdziwiłbym się, gdyby jeden z portów tego GolfScript lub 276-bajtowego chciwego gramatyki w Ruby pojawił się z mniej niż 303 bajtami.
Peter Taylor

2

Ruby - 643 bajty

Edycja: Zmniejszono golfa z 899 do 830.

Edycja2: 830 -> 755.

Edycja3: 755 -> 684.

Edycja4: 684 -> 670.

Edycja5: 670 -> 643.

Tak naprawdę nie używałem rubinu, więc jestem pewien, że można go zagrać w golfa, to tylko próba:

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

Edycja: niepotrzebne 7 bajtów i dodano wersję Java 6 ze statyczną sztuczką {} Edit2: Objaśnienie rozwiń

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

Dzięki @Chris Drost za podpowiedź z wieloma „ER” w tekście. Pierwszy ciąg to tablica przeglądowa, druga część wykorzystuje małe litery (które są sekwencyjnym blokiem w ascii) jako indeks do tabeli, odejmując magiczną wartość a od wartości.

Druga część składa się z wielu ciągów o różnej długości (krótkie są wspólnymi częściami dzielonymi przez wiele wersetów), które łączą się w długi przed zapętleniem znaków


Niezła odpowiedź! +1 I wiem, że minęło około 1,5 roku, ale możesz zagrać w golfa dwie rzeczy: Usuń li użyj ciągu zawierającego wszystkie #bezpośrednio w pętli dla każdego i zmień charw pętli dla każdego na 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]);co daje -5 bajtów / 513 bajtów .
Kevin Cruijssen

2

JavaScript ES6, 440 bajtów 438 bajtów

Jest to kilka prostych optymalizacji kompresji. Jako jedna linijka:

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

Został napisany jako skrypt wykonywalny za pośrednictwem iojs --harmony_arrow_functions file.js; możesz zgolić console.log()koszty ogólne w zależności od znaczenia „wypisz tekst”.

Wyjaśnienie

Po wykonaniu zewnętrznego .replace()kodu, do którego evaljest wysyłany, jest:

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

Sława

  • @vihan, który przypomniał mi, że ES6 ma również tę błyszczącą nową .repeatfunkcję dla ciągów, oszczędzając 2 bajty.

Prawdopodobnie możesz użyć b.repeat(7)zamiastb+b+b+b+b+b+b
Downgoat

1

PowerShell, 659 bajtów

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

Tworzy tablicę słów kluczowych $a, a następnie koduje słowa przy użyciu szeregu ciągów liczbowych, które są wysyłane do forpętli. Pętla pobiera dwucyfrowe podciągi, pobiera odpowiednie słowo kluczowe z $atablicy i na koniec -join''łączy je wszystkie razem.

Myślę, że jest to tak dobre, jak ta metoda może być wykonana, ponieważ za każdym razem, gdy próbowałem dalej grać w golfa (np. Zastępując 040008nową zmienną), okazało się, że jest ona o kilka bajtów dłuższa, ponieważ długość podciągu nie była wystarczająca, aby uwzględnij wszystkie dodatkowe potrzebne cytaty. Chociaż od czasu, gdy zacząłem, pojawiły się nowe odpowiedzi, które mają nieco inne metody, które wyglądają, jakby były krótsze w PowerShell (np. Używając znaków ASCII do kodowania, a nie dwucyfrowych?), Zamierzam pozostać przy ten.

Edycja - zapomniałem używane kodowanie zastępcze:

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-

jeśli masz sposób na uzyskanie kodu ascii dla postaci, która jest łatwa w użyciu, to powinno się wypracować, aby zgolić kilka bajtów
masterX244

1

GolfScript , 251 bajtów golfowych

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

Wypróbuj online!

Odpowiednio wyeliminowano niepotrzebny []i uproszczony kod. Zmieniono ii jna @i ^pozwala na usunięcie spacji. Przypisane pierwsze wystąpienie ' 'zmiennej, |aby uniknąć powtarzania tych samych trzech znaków.

GolfScript , pierwsza działająca wersja 262 bajtów

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

Wypróbuj online!

To jest część mojej Ruby odpowiedzi na skrypt golfowy przy użyciu tego samego podstawowego algorytmu: wypisz listę tokenów dwa razy, a następnie przejrzyj je w wierszach i buduj wiersze wiersz po wierszu, dostosowując się do osobliwości każdego z nich.

Istnieje kilka różnic. Numer poprawnej interpunkcji w linii środkowej znajduje się w bazie 81 (dogodnie jest to jeden znak ascii do wydruku na wiersz); a liczba kodująca, czy wydrukować ostatni token, jest modyfikowana, ponieważ 55-izamiast tego indeks i-28(ten drugi powoduje problemy z mocami ujemnymi generującymi liczby ułamkowe zamiast obcinania do liczby całkowitej).

Skomentował

'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 bajty. Użyj nieużywanych symboli jako nazw zmiennych, aby uniknąć białych znaków i przechowuj przestrzeń ( " ") w zmiennej. Nie wyskakuj też po przypisaniu do zmiennej z przyzwyczajenia.
Erik the Outgolfer

@EriktheOutgolfer dziękuję za wskazówki, ale już opublikowałem wersję 251 bajtów zawierającą większość z nich. 51Zauważyłeś wcześniej miejsce, za którym tęskniłem. Naprawię to później i ewentualnie będę szukał innych sposobów na jego skrócenie. To jest mój pierwszy program do gry w golfa i bardzo trudno mi je odczytać, gdy symbole są używane jako zmienne, dlatego przynajmniej na razie zostawiłem moją pierwszą działającą wersję 262 bajtów.
Level River St

Ach najwyraźniej zrobiłeś, 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

Nadal jest miejsce na ulepszenia dzięki nazwom zmiennych, ale to dopiero początek.


2
Czy pomocne może być osobne spisanie listy wszystkich nazw zmiennych, aby łatwo zobaczyć, które pojedyncze litery nie zostały jeszcze użyte, a następnie wyszukać i zastąpić swoje długie nazwy zmiennych?
trichoplax

0

Rubin, 486 bajtów

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

Rubinowy, 483 bajtów

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

Działa poprzez zakodowanie każdego słowa użytego w piosence do jednej litery, pomnożenie niektórych zwrotek, a następnie zastąpienie zakodowanych liter faktycznymi tekstami. Przecinki, spacje pozostają bez zmian. uto nowa linia.


2
Pisanka: zawiera frazęfuc b gud
dkudriavtsev

0

PHP, 434 bajtów

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

Wypróbuj online!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.