Bekerja lebih keras, lebih baik


26

Dalam tantangan ini, tujuan Anda adalah menampilkan lirik ke Daft Punk's Harder, Better, Faster, Stronger. Secara khusus, tampilkan teks ini:

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

Output Anda mungkin memiliki baris baru atau spasi spasi tambahan.

Metode kompresi bawaan tidak diperbolehkan.

Ini kode golf, jadi kode terpendek menang!


1
@feersum Ya, jika Anda mendengarkan lagu, Anda dapat melihat dia mulai berkata Setelah dan kemudian berhenti. Saya menambahkan tanda hubung untuk menunjukkan waktu istirahat dan membuat marah orang. Saya dapat menghapusnya jika Anda mau.
TreFox

9
Saya kaget tidak ada esolang seperti HQ9+Daft-Punkitu yang mencetak ini ...
Fatalize

3
Saya pikir Anda setidaknya harus melarang built in metode kompresi.
flawr

9
Lirik untuk "Keliling Dunia" akan lebih mudah. ;)
Reto Koradi

3
Lagu ini adalah yang pertama dalam beberapa waktu yang menurut saya, bukan duplikat rickroll. Saya membawanya ke meta meta.codegolf.stackexchange.com/q/6956/15599
Level River St

Jawaban:


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

Algoritma

Intro lagu: Ambil 16 token, dan cetak dua kali (yang terakhir berisi baris baru tambahan)

Ayat: Riffle token bersama-sama untuk membuat ayat, 4 token per baris, dalam urutan berikut:

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

Dalam beberapa baris, token terakhir dihilangkan, atau ditukar dengan Af-. Baris-baris ini dicatat dengan 1 bit pada angka ajaib 0x744447 = 7619655.

Dalam tiga baris, token kedua dari belakang juga dihilangkan, yang mana i%51/48==1

Tanda baca di tengah baris dapat menjadi salah satu ' ' ', ' '\n'. Ini dikodekan dalam angka 02220010000200100010001001110010001000100010001000100010 (basis 3) = "l4yq62lhgnizb0kfu" (base 36.)

Dengan komentar

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 byte

Sumber harus dikodekan sebagai 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

Penjelasan

Kami mulai dengan lirik aslinya. Untuk singkatnya, mari kita asumsikan demikian

lyrics = "Work Work Harder Harder"

Sekarang kami menemukan substring pendek (≥ 3 karakter) yang sering terjadi. Dalam hal ini, "Work "terjadi dua kali. Kami mengganti setiap kemunculan dengan karakter 0xE1. Kami juga mengingat string yang diganti dalam array:

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

Substring berikutnya "Harder",, diganti dengan 0xE0. The substsArray tumbuh ke arah depan:

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

Ini berlanjut untuk total 34 iterasi sampai kita mencapai karakter 0xC0.

Sekarang kita menggabungkan substspenggunaan karakter b(yang tidak muncul dalam lirik) sebagai pemisah. Dalam kode Perl, substsarray disimpan di @c(menggunakan kata kunci buntuk menentukan di splitmana harus membelah), lirik baru campur aduk ada $e, dan kode hanya membalik 34 pengganti.


1
Ada penjelasan?
feersum

1
@feersum: Selesai.
Timwi

5

Sprects , 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

Saya baru saja membuat bahasa ini dan saya memutuskan untuk mengujinya dengan tantangan ini. Ini menghasilkan \nbukan baris baru karena output ke HTML, tetapi penerjemah ditulis dalam JavaScript. Karena itu, inilah versi dengan <br>s bukannya \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

Sangat menarik. Kami memiliki aturan di sini bahwa bahasa / juru bahasa / kompiler harus ada sebelum tantangan. Saya tidak melihat tanggal pada Anda juru bahasa, kapan itu diterbitkan?
Level River St

@steveverrill saya membuatnya kemarin. Saya kira jawaban saya tidak valid.
DanTheMan

3
Konsensus tentang Meta adalah bahwa ini masih dapat diposting tetapi tidak berlaku untuk menang. Anda mungkin harus menambahkan penafian jawaban Anda untuk menginformasikan OP
Downgoat

Bisakah Anda membuat ertoken tunggal?
Solomon Ucko

4

GolfScript (275 byte)

Ini berisi karakter ASCII yang tidak dapat dicetak, jadi inilah 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                                  ](+

Bagaimana cara kerjanya? Sejauh yang saya tahu sepertinya saya adalah satu-satunya yang menggunakan strategi "riffle and omit", yang mengejutkan saya. Tetap saja, itu berarti saya berada di posisi kedua di belakang jawaban ini.
Level River St

Kode tangan Lempel-Ziv. Tidak ada yang menarik. Yang cukup banyak poin yang saya coba buat di meta, tapi jelas tidak cukup meyakinkan
Peter Taylor

1
Yah saya memang kecewa karena beberapa orang mengambil keuntungan penuh dari struktur lagu. Kesempatan ada di sana, sebagaimana dibuktikan oleh fakta bahwa saya di tempat kedua di Ruby, hanya 28 byte di belakang Anda. Saya cenderung percaya bahwa port jawaban saya ke dalam skrip golf akan datang lebih pendek dari 275 byte. Apakah Anda berpikir sebaliknya?
Level River St

Saya mencoba baterai penuh generator tata bahasa saya di atasnya, dan terkejut bahwa LZ keluar di depan (meskipun pembangun tata bahasa serakah hanya satu byte di belakang). Tapi saya tidak akan terkejut jika salah satu port dari GolfScript ini atau port dari pendekatan tata bahasa serakah 276-byte ke Ruby keluar kurang dari 303 byte.
Peter Taylor

2

Ruby - 643 byte

Sunting: Golf turun dari 899 hingga 830.

Sunting2: 830 -> 755.

Sunting3: 755 -> 684.

Sunting4: 684 -> 670.

Sunting5: 670 -> 643.

Saya belum pernah menggunakan ruby, jadi saya yakin ini bisa diturunkan, ini hanya upaya:

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

Edit: tidak diperlukan 7 Bytes dan menambahkan versi Java 6 dengan trik {} trik Edit2: Penjelasan diperluas

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

Terima kasih kepada @Chris Drost untuk petunjuknya dengan banyak "ER" di teks. String Pertama adalah tabel pencarian, bagian kedua menggunakan huruf kecil (yang merupakan blok berurutan dalam ascii) sebagai indeks ke dalam tabel dengan mengurangi nilai ajaib a dari nilai.

Bagian kedua terdiri dari beberapa String dengan panjang yang berbeda (yang pendek adalah bagian umum yang dibagikan di antara banyak ayat) yang dirakit menjadi yang panjang sebelum perulangan melalui karakter terjadi


Jawaban bagus! +1 Dan saya tahu ini sudah sekitar 1,5 tahun, tetapi Anda dapat bermain golf dua hal: Hapus ldan gunakan String yang berisi semua #langsung dalam untuk-setiap loop, dan ubah chardalam untuk-setiap loop ke 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]);Yang menghasilkan -5 byte / 513 byte .
Kevin Cruijssen

2

JavaScript ES6, 440 byte 438 byte

Ini adalah sekelompok optimisasi kompresi sederhana. Sebagai one-liner:

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

Ini ditulis sebagai skrip yang dapat dieksekusi melalui iojs --harmony_arrow_functions file.js; Anda dapat mencukur console.log()overhead tergantung pada arti dari "output lirik".

Penjelasan

Setelah melakukan bagian luar .replace(), kode yang diumpankan ke evaladalah:

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

Pujian

  • @ Vihan, yang mengingatkan saya bahwa ES6 juga memiliki .repeatfungsi baru yang mengkilap ini untuk string, menghemat 2 byte.

Anda mungkin dapat menggunakan b.repeat(7)sebagai gantinyab+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''

Membuat array kata kunci $a, lalu mengkodekan lirik menggunakan serangkaian string numerik yang dikirim ke dalam satu forlingkaran. Pengulangan mengambil dua digit substring, menarik kata kunci yang sesuai dari $aarray, dan akhirnya -join''menggabungkan semuanya.

Saya pikir ini tentang sebagus metode ini dapat dilakukan, karena setiap kali saya mencoba bermain golf lebih lanjut (misalnya, mengganti 040008dengan variabel baru), ternyata menjadi beberapa byte lagi karena panjang substring tidak cukup untuk akun untuk semua kutipan tambahan yang dibutuhkan. Meskipun ada beberapa jawaban baru yang diposting sejak saya mulai yang memiliki metode yang sedikit berbeda yang sepertinya lebih pendek di PowerShell (seperti menggunakan karakter ASCII untuk menyandikan, daripada dua digit, mungkin?), Saya akan tetap menggunakan yang ini.

Edit - lupa pengodean pengganti yang saya gunakan:

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-

jika Anda punya cara untuk mendapatkan kode ascii dari karakter yang mudah digunakan, maka itu akan berhasil memangkas banyak byte
masterX244

1

GolfScript , 251 byte di- 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}/

Cobalah online!

Dihilangkan []kode yang tidak perlu dan disederhanakan sesuai. Berubah idan jke @dan ^untuk mengizinkan penghapusan spasi putih. Penempatan pertama dari ' 'variabel yang ditugaskan |untuk menghindari pengulangan tiga karakter yang sama.

GolfScript , Versi pertama yang bekerja, 262 byte

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

Cobalah online!

Ini adalah port jawaban Ruby saya ke dalam skrip golf menggunakan algoritme dasar yang sama: mengeluarkan daftar token dua kali, lalu mengacaknya menjadi ayat-ayat dan membangun baris demi baris ayat, menyesuaikan kekhasan masing-masing.

Ada beberapa perbedaan. Angka untuk tanda baca garis tengah yang benar ada di basis 81 (mudahnya ini membuat satu karakter ascii dicetak per ayat); dan angka yang mengkode apakah akan mencetak token terakhir atau tidak dimodifikasi karena indeksnya 55-ibukan i-28(yang terakhir ditemukan menyebabkan masalah dengan kekuatan negatif menghasilkan bilangan pecahan bukannya memotong ke bilangan bulat.)

Berkomentar

'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 byte Gunakan simbol yang tidak digunakan sebagai nama variabel untuk menghindari spasi putih, dan menyimpan ruang ( " ") dalam variabel. Juga, jangan muncul setelah menetapkan variabel karena kebiasaan.
Erik the Outgolfer

@EriktheOutgolfer terima kasih atas tipsnya, tapi saya sudah memposting versi 251 byte yang menggabungkan sebagian besar dari mereka. Anda melihat ruang sebelumnya 51yang saya lewatkan. Saya akan memperbaikinya nanti, dan mungkin mencari cara lain untuk mempersingkatnya. Ini adalah program skrip golf pertama saya, dan saya menemukan mereka sangat sulit untuk dibaca ketika simbol digunakan sebagai variabel, maka saya juga meninggalkan versi pertama saya yang bekerja 262-byte setidaknya untuk saat ini.
Level River St

Ah, ternyata Anda melakukannya, 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

Masih ada ruang untuk perbaikan dengan nama variabel, tapi ini awal.


2
Mungkinkah membantu secara terpisah menulis daftar semua nama variabel Anda sehingga Anda dapat dengan mudah melihat huruf tunggal mana yang belum digunakan dan kemudian mencari-ganti nama variabel panjang Anda?
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 byte

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

Bekerja dengan menyandikan setiap kata yang digunakan dalam lagu ke satu huruf, mengalikan beberapa bait, lalu mengganti huruf yang disandikan dengan lirik yang sebenarnya. Koma, spasi dibiarkan apa adanya. uadalah baris baru.


2
Telur Paskah: mengandung frasafuc 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
"]);

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.