Ты сегодня мычал?

9

Дистрибутив Debian Linux (и дистрибутивы на основе Debian, такие как Ubuntu, Kali и другие) используют менеджер пакетов, называемый APT. Для установки программы fooвы должны ввести в терминал

sudo apt-get install foo

Одно маленькое пасхальное яйцо APT выглядит следующим образом

apt-get moo

Который после ввода даст следующий вывод

                 (__) 
                 (oo) 
           /------\/ 
          / |    ||   
         *  /\---/\ 
            ~~   ~~   
..."Have you mooed today?"...

Вы должны написать программу, которая производит этот EXACT-вывод в максимально возможном количестве байтов. (включая завершающие пробелы и новую строку)

Вот тот же вывод с \nдобавленным для представления символов новой строки и a *для представления завершающих пробелов

                 (__)*\n
                 (oo)*\n
           /------\/*\n
          / |    ||***\n
         *  /\---/\*\n
            ~~   ~~***\n
..."Have you mooed today?"...\n

Как и просили в комментариях, вот md5sum mooing.

35aa920972944a9cc26899ba50024115  -
Джеймс
источник
1
Я думаю, что это APT, а не способности; У aptitude нет Super Cow Powers
адицу ушел, потому что SE ЗЛО
@aditsu О, наверное, я неправильно понял, что такое способность. Я думал, что aptitude - это имя apt-get.
Джеймс
Для справки, не могли бы вы опубликовать вывод apt-get moo|md5sum?
Адицу ушел, потому что SE злой
25
Bash, 11 байт:: apt-get mooP
Деннис
5
@Dennis Не работает в Arch Linux ... не может воспроизвести результат: P
Otomo

Ответы:

6

Баш, 95 байт

0000000: 7a 63 61 74 3c 3c 27 27 0a 1f 8b 08 01 01 01 01 01  zcat<<''.........
0000011: 02 03 53 40 07 1a f1 f1 9a 0a 5c 98 c2 f9 f9 a8 c2  ..S@......\......
0000022: fa ba 60 10 a3 8f 2c aa af 50 03 a2 6a 40 24 42 58  ..`...,..P..j@$BX
0000033: 0b 28 11 03 54 ab 1f 83 6a 70 5d 1d 8c e0 d2 d3 d3  .(..T...jp]......
0000044: 53 f2 48 2c 4b 55 a8 cc 2f 55 c8 cd cf 4f 4d 51 28  S.H,KU../U...OMQ(
0000055: c9 4f 49 ac b4 57 02 ca 70 01                       .OI..W..p.

Выше приведен обратимый hexdump. Чтобы создать файл, выполните

xxd -r -c 17 > 55918.sh

вставьте hexdump и нажмите Enter, затем Ctrl+ D.

Чтобы запустить созданный файл, выполните

bash 55918.sh 2>&-

Подойдет любое другое имя файла.

Я выбрал зопфли в качестве компрессора, так как он совместим с программой Coreutils zcat и обеспечивает лучшее сжатие, чем gzip, bzip2 и xz.

zcat<<'' будет читать следующие строки (до EOF) и кормить их в качестве ввода для zcat .

Обратите внимание, что zcat выведет предупреждение (поскольку я удалил контрольную сумму сжатого файла), как и bash (поскольку HEREDOC не завершается пустой строкой). Эти предупреждения печатаются в STDERR (подавляется 2>&-), что разрешено по умолчанию для консенсуса в Meta .

Деннис
источник
10

CJam, 96

Это использует много неприятных байтов, поэтому вот шестнадцатеричный дамп:

00000000  22 ee 51 1e 53 41 15 ee  51 20 53 41 15 9a 5f 5a  |".Q.SA..Q SA.._Z|
00000010  b9 5f 41 15 8c 5f 41 f9  38 24 2a 15 7e 55 1c 5f  |._A.._A.8$*.~U._|
00000020  b9 30 5f b9 41 15 a8 26  2a 26 2a 15 36 45 91 c3  |.0_.A..&*&*.6E..|
00000030  ed cb 41 f3 df eb 41 db  20 cb c9 41 e9 df c9 c3  |..A...A. ..A....|
00000040  f3 7f 45 36 15 22 7b 69  32 6d 64 5c 5f 63 5c 37  |..E6."{i2md\_c\7|
00000050  6d 64 22 20 5f 6f 2d 7c  7e 2e 22 3d 2a 3f 7d 2f  |md" _o-|~."=*?}/|

Вы можете запустить файл с помощью интерпретатора Java; может возникнуть необходимость использовать кодировку ISO-8859-1, например:
java -Dfile.encoding=ISO-8859-1 …

Попробуйте онлайн

Эквивалентная (и намного более длинная) версия ASCII:

[238 81 30 83 65 21 238 81 32 83 65 21 154 95 90 185 95 65 21 140 95 65 249 56 36 42 21 126 85 28 95 185 48 95 185 65 21 168 38 42 38 42 21 54 69 145 195 237 203 65 243 223 235 65 219 32 203 201 65 233 223 201 195 243 127 69 54 21]:c
{i2md\_c\7md" _o-|~."=*?}/

Попробуйте онлайн

Объяснение:

Есть 7 символов , которые имеют повторы: _o-|~.. Каждый из них может быть закодирован как число n от 0 до 6. Для каждой повторяющейся последовательности я кодирую как индекс (n) символа, так и количество повторений (k) в одном байте:, 2 * (k * 7 + n)записанный как символ с этим код. И я кодирую любые отдельные символы, как 2 * c + 1, где с код ASCII. Все идет в исходной строке, а остальная часть программы декодирует ее:

{…}/      for each character in the string
  i       convert to integer (extended-ASCII code)
  2md     integer division by 2, obtaining the quotient (q) and remainder (r)
           r decides whether it's a repetition or single character
  \_      swap q and r, and duplicate q
  c\      convert q to character and move it before the other q
           this is for the r=1 case (single character)
  7md     divide q by 7, obtaining the quotient (k) and remainder (n)
  "…"=    get the corresponding character from that string (decoding n)
  *       repeat the character k times
  ?       use the single character or the repetition, depending on r

Старая версия (109):

" H(_2) 
 H(o2) 
 B/-6\/ 
 A/ | 4|2 3
 9* 2/\-3/\ 
 C~2 3~2 3
.6"{_'M,48>&{~*}&}/3/"Have you mooed today?"`*N

Попробуйте онлайн

уйти, потому что SE это зло
источник
6

Пиф, 100

r"17 (__) 
17 (oo) 
11 /6-\/ 
10 / |4 ||3 
9 *  /\\3-/\ 
12 ~~3 ~~3 
3.\"Have you mooed today?\"3."9

Попробуйте онлайн: Демонстрация

r"string"9 run-length-декодирует строку.

редактировать:

Вот решение на 97 символов: Демонстрация . Очень вероятно, что это также 97 байтов (в ISO-8859-1). Но слишком устал для записи байтов и объяснений. Завтра вечером, наверное.

Jakube
источник
4

GolfScript (107 байт)

Это очень простая кодировка: символы новой строки заменяются на ^, а пробелы кодируются по длине строки . Результат содержит некоторые непечатаемые символы, поэтому я представляю его здесь как xxdвывод:

0000000: 2711 285f 5f29 015e 1128 6f6f 2901 5e0b  '.(__).^.(oo).^.
0000010: 2f2d 2d2d 2d2d 2d5c 2f01 5e0a 2f01 7c04  /------\/.^./.|.
0000020: 7c7c 035e 092a 022f 5c2d 2d2d 2f5c 015e  ||.^.*./\---/\.^
0000030: 0c7e 7e03 7e7e 035e 2e2e 2e22 4861 7665  .~~.~~.^..."Have
0000040: 0179 6f75 016d 6f6f 6564 0174 6f64 6179  .you.mooed.today
0000050: 3f22 2e2e 2e27 7b2e 3332 3c7b 2220 222a  ?"...'{.32<{" "*
0000060: 7d2a 7d25 225e 222f 6e2a 0a              }*}%"^"/n*.

Онлайн демо

Обратите внимание, что это на один символ короче соответствующего кода CJam. Компромисс используется 'в качестве разделителя для основной строки (сохраняя два \s для экранирования "), сохраняя a iдля преобразования значений символов в целые числа в цикле декодирования и получая свободную конечную новую строку; vs наличие символьных литералов для замены односимвольных строковых литералов.


Поскольку этот вопрос был кратко помечен Я также сделал версию только с (108) печатными символами:

'Y(__)I
Y(oo)I
S/------\/I
R/I|L||K
Q*J/\---/\I
T~~K~~K
..."HaveIyouImooedItoday?"...'{.82-.*82<{72-' '*}*}%

Вместо того , чтобы кодирующие вводная длину пространств , как символы ^Aдо ^R(и кодирования , ^Jкак ^столкновения во избежание), он оставляет нетронутый и новую строку кодирует вводную длину , как Iк Y.

Кстати, моя универсальная программа GolfScript Kolmogorov производит программу размером 120 байт.

Питер Тейлор
источник
1

Луа, 186 178 байт

8 байтов сэкономлено благодаря предложению @DJ McMayhem

p=print s=" "a=s:rep(17)b=s:rep(9)p(a.."(__) ")p(a.."(oo) ")p(b.."  /------\\/ ")p(b.." / |    ||   ")p(b.."*  /\\---/\\ ")p(b.."   ~~   ~~   ")p"...\"Have you mooed today?\"..."

Ungolfed:

p=print --Save the print function for later use
s=" " --Space character
a=s:rep(17) --string.rep(string, times) repeats the given string
b=s:rep(9)
p(a.."(__) ") --print out the lines
p(a.."(oo) ")
p(b.."  /------\\/ ")
p(b.." / |    ||   ")
p(b.."*  /\\---/\\ ")
p(b.."   ~~   ~~   ")
p"...\"Have you mooed today?\"..."
Nikolai97
источник
Вы можете сэкономить 5 байтов, заменив строку 2 наa=repeat(" ",17)
Джеймс
Ах, спасибо :) я пытался выяснить, могу ли я сделать что-то подобное ...
Nikolai97
1

> <> , 217 байт

!v"                 (__) "a"                 (oo) "a"           /------\/ "a"          / |    ||   "a"         *  /\---/\ "a"            ~~   ~~   "a"..."c3*2-"Have you mooed today?"c3*2-"..."a!
 >r>l0)?v;
    ^   o<

К сожалению, это довольно скучный ответ. Он начинается с чтения строки, которая вытягивает всю корову, с символами новой строки, добавляемыми в стек к значению 10 (a). Затем он входит в петлю, которая просто вытягивает корову.

Первоначально я сделал цикл для добавления набора пробелов, но на самом деле это было дороже, чем просто вставлять пробелы.

РЕДАКТИРОВАТЬ: Забыл, что рыба написана как "> <>"

Блейк Доерен
источник
1

PowerShell, 144 байта

$a="        "
"$a$a (__) "
"$a$a (oo) "
"$a   /------\/ "
"$a  / |    ||   "
"$a *  /\---/\ "
"$a    ~~   ~~   "
'..."Have you mooed today?"...'

Приведенный выше код будет работать правильно в средах, которые печатают символы новой строки в стиле Unix ( \n). Он производит правильный вывод, например, с помощью Pash в Linux.

С математической точки зрения для PowerShell $aоптимальным является наличие 8 пробелов для переменной, так как меньше означает слишком много дополнительных пробелов между переменной и коровой, чтобы иметь $bсмысл, а больше означает, что мы не можем удвоить первые две строки для глава.

AdmBorkBork
источник
4
Я бы сказал, что «символ новой строки» зависит от локали / платформы, что делает ваш вывод таким же подходящим, как и любой другой.
Sleblanc
1. Нет такой вещи как «символ новой строки». \rвозврат каретки, \nперевод строки. Вместе \r\nобразует новую строку в Windows. 2. PowerShell не только для Windows. Я проверил ваш код с помощью Pash (реализация Windows PowerShell для Mono с открытым исходным кодом), и на выходе есть соответствующий хэш MD5. 3. Из-за вышеизложенного я позволил себе опубликовать ваш пост. Если вы не согласны с этим, пожалуйста, заново вики.
Деннис
Очень интересно, @Dennis ... Я знаю о различиях между \r\nи \n, но, как я уже сказал, я не могу получить правильный MD5 на Windows без чего-то вопиющего. Спасибо за это редактирование, хотя. Сначала я тоже услышал о Паше, так что спасибо за это. Интересно, как сложно это было бы построить под Cygwin ... ;-)
AdmBorkBork
0

Молекула , 145 байт

"   "_____:a"  (__) 
";a____"  (oo) 
";a__"  /------\\/ 
";a__" / |    ||   
";a__"*  /\\---/\\ 
";a____"~~"b"~~
...\"Have you mooed today?\"..."

Я впервые пытаюсь сжать ASCII art: P


источник