Ваша задача - напечатать следующее ASCII Art:
_ _ _______ _
| | | | (_______) _ | |
| |__ | | ____ ____ ____ _ _ _____ ____ ___| |_ ____ ____| |
| __)| |/ _ | _ \| _ \| | | | | ___) / _ |/___) _)/ _ )/ ___)_|
| | | ( ( | | | | | | | | |_| | | |____( ( | |___ | |_( (/ /| | _
|_| |_|\_||_| ||_/| ||_/ \__ | |_______)_||_(___/ \___)____)_| |_|
|_| |_| (____/
Помните, что это код-гольф , поэтому выигрывает код с наименьшим количеством байтов. Удачи.
code-golf
string
kolmogorov-complexity
Оливер Ни
источник
источник
|()/\_
что приводит к совершенно разным формам сжатия. Раньше у нас были похожие художественные задачи в ASCII, но я хотел бы, чтобы этот вопрос был задан, чтобы посмотреть, не воспользуется ли кто-нибудь геометрией. С другой стороны, это не очень примечательно, и вы правы, нам не нужна пасхальная бирка.Ответы:
Жевательная резинка, 130 байт
Попробуйте онлайн.
Сжатый с помощью
zopfli --deflate --i10000
.источник
JavaScript (ES6),
377373360359345 байтСпасибо @Neil за однобайтовую экономию и @ edc65 за еще 14!
Думал, я бы попробовал. Сжимает общие повторяющиеся узоры в тексте.
_____
(5 подчеркиваний) хранится как_5
5
| | | | |
(5 из|
шаблона) хранится как~5
источник
=>
._
s._
с_
последующим, сколько есть в беге~1
или_2
вряд ли стоит того. (Почему бы не использовать,|2
например?)BinaryFuck ,
565378 байтЭто в основном сохраняет символы, используемые в массиве, затем перемещается по массиву, печатая их соответственно. В настоящее время довольно долго, будет сокращать его.
Вот негольфированный код:
РЕДАКТИРОВАТЬ: изменив порядок символов в ячейках, я сэкономил 186 байт!
источник
1
. Пожалуйста, предоставьте ссылку на интерпретатор и hexdump исходного кода, чтобы ваши результаты могли быть воспроизведены.JavaScript (ES6), 380 байт
Для полноты изложения я пытаюсь использовать другой метод сжатия, хотя, как оказалось, он не так эффективен, как кодирование длин серий. Каждая цифра указывает, что последние N уже сгенерированных символов повторяются. Последующие цифры могут повторять уже повторяющиеся символы, например,
| 23
превращаются в| | |
. Я только хотел бы сжать три символа.источник
C
517427407 байтовUngolfed Попробовать онлайн
источник
JavaScript, 297 байт
Простое кодирование десяти наиболее (насколько я могу судить) распространенных подстрок. Они не в порядке из-за совпадений; мой кодер (ниже) должен видеть, например,
'_ '
и' _'
раньше' '
.Это берет строку и массив подстрок для кодирования и возвращает a) закодированную строку b) список потенциальных следующих сохранений c) количество сохраненных байтов до сих пор.
источник
𝔼𝕊𝕄𝕚𝕟, 72 символа / 209 байтов
Try it here (Firefox only).
Ну, по крайней мере, количество символов велико, но мы не можем использовать пользовательскую кодовую страницу. Это просто декомпрессия LZString. Я также работаю над другим решением - об этом позже.
источник
Perl 5, 286 байт
perl -M5.01 happy.pl
гдеhappy.pl
находится:Спасибо Дому Гастингсу (в комментарии здесь) за идею, которая спасла мне два байта и привела к другой моей идее, которая спасла еще четыре.
источник
L
в качестве сокращения для|_
;-)Python 2,
343,328,316 байт.В этом решении не используются функции распаковки или другие операции импорта.
Читаемая версия:
Использует версию кодирования длины серии с 3 битами для символа из набора "\ n _ | () /". Остальная часть байта - это длина, но я ограничил длину до 10 и изменил ее, чтобы результаты были печатными символами, которые действительны в строке Python без какого-либо экранирования.
Замена строки, соответствующей «|», на один символ в закодированных данных экономит еще несколько байтов.
Я удалил конечные пробелы в строках 1 и 5, которые могут немного нарушать правила, но кажутся практичными.
Эта программа генерирует упакованные данные:
источник
Python 2, 159 байт
Этот источник содержит непечатаемые символы, поэтому он представлен в виде hexdump, который можно декодировать с помощью
xxd -r
.источник
Ракетка,
367364 байтаUngolfed
Исходя из аналогичного вопроса, я ответил .
источник
/// ,
282279 байтУлучшение: я заметил, что
//
в командах замены их слишком много , поэтому я решил также сжать их (доm
), что позволило мне сэкономить 3 байта.Повторно сжимайте наиболее часто встречающуюся подстроку.
Тринадцатое поколение, 282 байта
Попробуйте онлайн!
Первое поколение, 486 байт
Без сжатия. Вырвался
/
и\
.Попробуйте онлайн!
Второе поколение, 402 байта
Сжатые два пробела до
a
. В/a/ /
средства «заменить все вхожденияa
двух пространств».Попробуйте онлайн!
Третье поколение, 369 байт
Сжатый
__
доb
. В/b/__/
начале означает «заменить все вхожденияb
в__
».Попробуйте онлайн!
Четвертое поколение, 339 байт
Сжатый
|
доc
. В/c/ |/
начале означает «заменить все вхожденияc
в|
».Попробуйте онлайн!
Остальные правила сжатия
Итак, список правил сжатия:
a
.__
доb
.|
доc
.aa
доd
.bb
доe
.cc
доf
.dd
доg
.|c
доh
.\/
доi
. И в правилах,\
и/
в в дальнейшем избегаются.b_
доj
.|a
доk
._
доl
.//
доm
.Как видите, есть перекрывающиеся правила сжатия. Например,
g
кодирует,dd
который кодирует,aaaa
который кодирует 8 пробелов.источник
Ваша мама (не конкурирующая), 331 байт
Расшифруйте строку и распакуйте ее, используя компрессор Jelly.
источник
Python 3, 377 байт
аналогично ответу на javascript, используется RLE плюс куча замен для общих подстрок.
Думаю, я немного переиграл замену, возможно, это не сильно помогло, ну да ладно.
источник
JavaScript (ES6), 354 байта
Еще одна попытка. К сожалению, не так эффективно, как длина пробега.
Хранит группу чисел base-36 в первой строке, разделенных
и ,
!
разделителем. Затем заменяет числа (вместе с!
) с представлениями чисел base-4. Заменяет все 0 ', 1, и 2 - й в количестве базового 4 с_
,|
соответственно, и все 3 - х заменены элементами во второй строке последовательно.источник
Python 3, 263 байта
Первоначальный проход с использованием встроенных.
добавлены некоторые дополнительные кавычки и переносы строк, чтобы избежать горизонтальной прокрутки только для отображения (не учитывается в баллах)
источник
repr()
необработанная строка была намного длиннее, чем ascii85CJam, 229
Нет прикольных символов и нет встроенного сжатия :)
Попробуйте онлайн
источник
Lua, 353 байта
Программа:
Спасибо @jrich за сжатие.
источник
Рубин,
271262248 байтПопробуй здесь
источник
Vim ,
374365326319313311 нажатий клавиш9 нажатий клавиш благодаря @Dr Green Eggs и Ham DJ .
Вероятно, можно играть в гольф дальше с помощью
:nn
?источник
<number>a <esc>
много делаете Если вы делаетеyl
на месте, вы можете заменить это на<number>p
. Это должно сэкономить около 8. 2. Вы можете заменитьea
наA
. Возможно, вы бы взяли еще больше, если измените свой подход, но вот быстрые советы, которые я вижу._
и|
т. Д.?:s
заменяет только одну строку. Вы хотите:% s
. Вы также можете сохранить некоторые нажатия клавиш, выполнив:im
(imap) вместо поиска и замены. (Хотя вам может понадобиться использовать ctrl-v или ctrl-q для отображения на пробел):im
я полагаю, что можно использовать только несколько байт для игры в гольф.Javascript (ES6)
464352 байтаПопробуй это здесь!
источник
HTML,
482481475 байтисточник
05AB1E , 171 байт
Попробуйте онлайн.
Объяснение:
Посмотрите этот совет 05AB1E (раздел « Как сжимать большие целые числа?» И « Как сжимать целочисленные списки?» ), Чтобы понять, как работают сжатые целые числа и список Base-8.
источник
C (gcc) ,
280279 байтовПопробуйте онлайн!
Наезжать
Мы определяем алфавит из 8 символов
" _|/\\()\n"
и сжимаем данные, упаковывая по два символа на байт в соответствии с его индексом в алфавите, причем первый символ находится в битах 0..2, а второй - в 3..5. Бит 6 установлен для переноса полученного байта на печатаемую территорию ASCII. Затем выполняется простая RLE для сжатой строки. Если символ в строке встречается более двух раз подряд, он сохраняется в виде пары символов, причем первый содержит длину цикла плюс 32 (установлен бит 5), а второй - сам символ.Попробуйте онлайн!
источник
Javascript ES6, 314 байтов
Содержит непечатаемые байты. Использует черную магию JS для бега. Если
console.log()
необходимо, чтобы этот ответ был действительным, количество байтов будет 327.Это была огромная боль, чтобы получить права, и мне не удалось избавиться от
.slice(0,-2)
:(Завтра отредактирую объяснение, когда я буду менее уставшим.
Заменен каждый байт на соответствующее шестнадцатеричное значение, чтобы фрагмент кода мог запускаться
источник
JavaScript,
294292 байтаЭто ... буквально просто кодировка искусства ... с этим ...
Если
console.log()
требуется, то количество байтов составляет307305 байтов.294-> 292, -2B для кодирования
\n
в7
.источник