Работай усерднее, делай лучше


26

В этой задаче ваша цель будет заключаться в выводе текстов песен Daft Punk's Harder, Better, Faster, 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
Я в шоке, там нет esolang, как HQ9+Daft-Punkэто печатает это ...
Fatalize

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

9
Лирика «Вокруг света» была бы проще. ;)
Рето Коради

3
Эта песня - первая, которая, на мой взгляд, не является дубликатом Рикролла. Я перенес
Уровень Река Сент

Ответы:


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

Источник должен быть закодирован как 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

объяснение

Мы начинаем с оригинальной лирики. Для краткости предположим, что они

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

Sprects , 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, поэтому вот 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                                  ](+

Как это работает? Насколько я могу судить, похоже, что я единственный, кто использует стратегию «разыгрывай и пропускай», что меня удивляет. Тем не менее, это означает, что я на втором месте после этого ответа.
Уровень Река St

Ручная кодировка Лемпель-Зив. Ничего интересного. Это было в значительной степени то, что я пытался сделать в мета, но явно не достаточно убедительно.
Питер Тейлор

1
Что ж, я действительно разочарован тем, что мало кто в полной мере воспользовался структурой песни. Возможность была там, о чем свидетельствует тот факт, что я на втором месте в Ruby, только 28 байтов позади вас. Я склонен полагать, что порт моего ответа в golfscript будет иметь длину менее 275 байт. Вы думаете иначе?
Уровень Река St

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

2

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

Изменить: Гольф от 899 до 830.

Edit2: 830 -> 755.

Edit3: 755 -> 684.

Edit4: 684 -> 670.

Edit5: 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/490 байт

Редактировать: ненужные 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и использовать строку, содержащую все #непосредственно в цикле for-each, и изменить charцикл for for each на 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 в гольф-скрипт, использующий тот же базовый алгоритм: выведите список токенов дважды, затем перетяните их в стихи и постройте стихи построчно, подбирая особенности каждого из них.

Есть пара отличий. Номер для правильной пунктуации в средней строке находится в основании 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 байта. Используйте неиспользуемые символы в качестве имен переменных, чтобы избежать пробелов, и сохраняйте space ( " ") в переменной. Кроме того, не появляйтесь после присвоения переменной по привычке.
Эрик Outgolfer

@EriktheOutgolfer спасибо за советы, но я уже опубликовал 251-байтовую версию, включающую большинство из них. Вы заметили место до 51того, как я пропустил. Я исправлю это позже и, возможно, поищу другие способы, чтобы сократить его. Это моя первая программа для работы со скриптом на гольфе, и мне очень трудно ее читать, когда символы используются в качестве переменных, поэтому я также оставил свою первую рабочую версию размером 262 байта, по крайней мере, на данный момент.
Уровень Река St

Ах, вы, очевидно, сделали, лол.
Эрик Outgolfer

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

Рубин, 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
дкудрявцев

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.