Працюйте важче, зробіть це краще


26

У цьому виклику вашою метою буде виведення пісень на текст Hard Daft Punk Harder, Better, Fastter, Stronger. Зокрема, виведіть цей текст:

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

Можливо, у вашому виході є нижній проміжок або пробіл.

Вбудовані методи стиснення заборонені.

Це кодовий гольф, тому найкоротший код виграє!


1
@feersum Так, якщо ви слухаєте пісню, ви бачите, що він починає говорити Після, а потім робить паузу. Я додав дефіс, щоб показати перерву та розлютити людей. Я можу його видалити, якщо хочете.
TreFox

9
Я вражений, що немає езолангу, як HQ9+Daft-Punkце друкує це ...
Завершити

3
Я думаю, вам слід хоча б заборонити вбудовані методи стиснення.
flawr

9
Тексти до "Навколо світу" були б легшими. ;)
Рето Коради

3
Ця пісня є першою за часом, яка, на мою думку, не є дублікатом риклінгу. Я взяв його до meta meta.codegolf.stackexchange.com/q/6956/15599
Level River St

Відповіді:


11

Рубі, 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]}

Алгоритм

Вступ до пісні: візьміть 16 жетонів і надрукуйте їх двічі (останній містить додатковий новий рядок)

Вірші: Складіть лексеми разом, щоб скласти вірші, 4 лексеми на рядок, у такому порядку:

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

У деяких рядках останній маркер опущено або замінено на Af-. Ці рядки відзначаються 1 бітом у магічному числі 0x744447 = 7619655.

У трьох рядках передостаннє лексема також опущено, ті, де i%51/48==1

Пунктуація в середині рядка може бути однією з ' ' ', ' '\n'. Вони закодовані у номері 02220010000200100010001001110010001000100010001000100010 (основа 3) = "l4yq62lhgnizb0kfu" (база 36.)

З коментарями

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 байт

Джерело має бути закодовано як латинська-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

Пояснення

Ми починаємо з оригінальної лірики. Для стислості припустимо, що вони є

lyrics = "Work Work Harder Harder"

Тепер ми знаходимо короткі підрядки (≥ 3 символи), які трапляються часто. У цьому випадку "Work "виникає двічі. Кожне виникнення замінюємо символом 0xE1. Ми також пам'ятаємо замінений рядок у масиві:

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

Наступну підрядку, "Harder"замінено на 0xE0. substsМасив зростає до фронту:

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

Це триває в цілому 34 ітерації, поки ми не перейдемо до символу 0xC0.

Тепер ми поєднуємо substsвикористання символу b(який не зустрічається в тексті пісень) як роздільника. У коді Perl substsмасив зберігається в @c(за допомогою баревору, bщоб сказати, splitкуди поділити), є нова текстова грамота $e, і код просто оберне 34 заміни.


1
Будь-які пояснення?
feersum

1
@feersum: Готово.
Тімві

5

Розкидає , 302 байти

: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

Я нещодавно виголосив цю мову і вирішив перевірити її цим завданням. Він виводить \ns замість нових рядків, оскільки він виводить у HTML, але інтерпретатор написаний на JavaScript. Через це ось версія з <br>s замість \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

Дуже цікаво. Тут у нас є правило, що мова / перекладач / компілятор повинен існувати перед викликом. Я не бачу дати Вашого перекладача, коли він був опублікований?
Річка Рівня Св.

@steveverrill Я зробив це вчора. Я думаю, моя відповідь тоді недійсна.
DanTheMan

3
Консенсус щодо мета полягає в тому, що це все ще може бути розміщено, але не застосовується для виграшу. Вам, мабуть, слід додати у відповідь відмову, щоб повідомити OP
Downgoat

Чи можете ви зробити erодин маркер?
Соломон Учко

4

GolfScript (275 байт)

Він містить символи ASCII, які не можна роздрукувати, ось ось шістнадцятка:

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

Як це працює? Наскільки я можу сказати, здається, що я єдиний, хто використовує стратегію "рушниця і пропуск", яка мене дивує. Тим не менш, це означає, що я на другому місці за цією відповіддю.
Рівень р. Св.

Ручне кодування Lempel-Ziv. Нічого цікавого. Що було в значній мірі я намагався зробити мета, але явно недостатньо переконливо.
Пітер Тейлор

1
Ну я справді розчарований, що мало хто повністю скористався структурою пісні. Можливість була там, про що свідчить той факт, що я на другому місці в Рубі, лише 28 байт позаду вас. Я схильний вважати, що порт моєї відповіді в гольфскрипті матиме менше 275 байт. Ви думаєте інакше?
Рівень р. Св.

Я спробував свою повну батарею генераторів граматики на ній, і був здивований, що LZ вийшов попереду (хоча жадібний будівельник граматики був лише на один байт позаду). Але я не був би здивований, якби один з портів цього GolfScript або порт 27-байтового жадібного граматичного підходу в Ruby вийшов менше ніж 303 байти.
Пітер Тейлор

2

Рубін - 643 байти

Редагувати: Поле з 899 до 830.

Edit2: 830 -> 755.

Правка3: 755 -> 684.

Редагувати4: 684 -> 670.

Редагувати5: 670 -> 643.

Я насправді не використовував рубін, тому впевнений, що це могло бути загране в гольф, це лише спроба:

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

Редагувати: непотрібні 7 байт та додано версію Java 6 зі статичним {} трюком Edit2: Роз'яснення розгорнути

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

Дякуємо @Chris Drost за підказку з багатьма "ER" в тексті. Перший рядок - це таблиця пошуку, друга частина використовує малі літери (які є послідовним блоком в ascii) як індекс у таблицю, віднімаючи магічне значення a зі значення.

Друга частина складається з декількох рядків різної довжини (короткі - це спільні частини, що поділяються між декількома віршами), які збираються на довгі до того, як пройде цикл через символи


Гарна відповідь! +1 І я знаю, що минуло близько 1,5 років, але ви можете пограти в дві речі: видаліть lі використовуйте рядок, що містить все #безпосередньо в циклі "для кожного", і змініть " charцикл" для кожного циклу на 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]);результаті чого -5 байт / 513 байт .
Кевін Кройсейсен

2

JavaScript ES6, 440 байт 438 байт

Це купа простих оптимізацій стиснення. Як однолінійний:

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

Це було написано як виконуваний сценарій через iojs --harmony_arrow_functions file.js; Ви можете голити console.log()накладні, залежно від значення "вивести текст".

Пояснення

Після виконання зовнішнього .replace()коду, який подається, 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() 
)

Кудос

  • @vihan, який нагадав мені, що ES6 також має цю блискучу нову .repeatфункцію для рядків, економлячи 2 байти.

Можливо, ви можете використовувати b.repeat(7)замістьb+b+b+b+b+b+b
Downgoat

1

PowerShell, 659 байт

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

Створює масив ключових слів $a, а потім кодує тексти пісень, використовуючи ряд числових рядків, які надсилаються у forцикл. Цикл бере двозначні підрядки, витягує відповідне ключове слово з $aмасиву і, нарешті, -join''об'єднує його все разом.

Я думаю, що це приблизно так добре, як цей метод можна зробити, тому що кожен раз, коли я намагався займатися гольфом далі (наприклад, замінюючи 040008новою змінною), це виявилося на пару байт довше, оскільки довжина підрядки була недостатньою для враховуйте всі необхідні додаткові котирування. Хоча з мого початку з'явилися нові відповіді, які мають дещо інші методи, схожі на те, що вони можуть бути коротшими в PowerShell (як, наприклад, використання символів ASCII для кодування, а не двозначні, можливо?), Я збираюся дотримуватися цей.

Редагувати - забув кодування заміни, яке я використав:

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-

якщо у вас є спосіб отримати код ascii символу, який простий у користуванні, тоді це повинно вийти, щоб обстригти купу байтів
masterX244

1

GolfScript , 251 байт в гольф

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

Спробуйте в Інтернеті!

Відповідно видалено непотрібний []та спрощений код. Змінено iі jдо, @і ^дозволить видалити пробіл. Призначається перше виникнення ' 'змінної, |щоб уникнути повторення цих же трьох символів.

GolfScript , перша робоча версія 262 байти

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

Спробуйте в Інтернеті!

Це порт моєї відповіді Ruby в golfscript, використовуючи той самий основний алгоритм: виведіть список жетонів двічі, потім розкажіть їх у вірші та побудуйте вірші по рядку, підлаштовуючи під особливості кожного.

Існує пара відмінностей. Число правильних розділових знаків середнього рядка знаходиться в базі 81 (зручно це робить один друкований символ ascii на вірш); а число, що кодує, чи слід друкувати останній маркер, модифіковане тому, що 55-iзамість цього індексу i-28(останній виявив, що спричиняє проблеми з негативними повноваженнями, що генерують дробові числа замість скорочення до цілого числа).

Прокоментував

'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 байти. Використовуйте невикористані символи як імена змінних, щоб уникнути пробілів, і зберігайте простір ( " ") у змінній. Крім того, не з'являйтеся після присвоєння змінної за звичкою.
Ерік Аутгольфер

@EriktheOutgolfer дякую за підказки, але я вже опублікував 251 байт версію, що включає більшість з них. Ви помітили пробіл до 51цього, я хоч і пропустив. Я виправлю це пізніше і, можливо, шукатиму інші способи його скоротити. Це моя перша гольфскриптова програма, і мені їх важко читати, коли символи використовуються як змінні, отже, я також залишив свою 262-байтну першу робочу версію, принаймні поки що.
Рівень р. Св

Ах ти, мабуть, зробив, хаха.
Ерік Аутгольфер

0

Пітон - 1056 символів

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

Ще є можливість вдосконалення зі змінними назвами, але це початок.


2
Може допомогти окремо виписати список усіх ваших імен змінних, щоб ви могли легко побачити, які одні букви ще не використовувались, а потім шукати-замінювати свої довгі імена змінних?
трихоплакс

0

Рубі, 486 байт

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 байти

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

Працює, кодуючи кожне слово, що використовується в пісні, на одну букву, множуючи деякі строфи, замінюючи закодовані літери фактичною лірикою. Коми, пробіли залишаються як є. u- це новий рядок.


2
Пасхальне яйце: містить фразуfuc b gud
dkudriavtsev

0

PHP, 434 байт

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

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.