Это проблема Луогу О.Ю. Я решил опубликовать это здесь, потому что в Luogu OJ многие люди, включая меня и моего друга, интересуются тем, как решить эту проблему в наименьшем количестве персонажей.
Ваша задача - вывести следующий ASCII-арт:
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
Это код-гольф, поэтому выигрывает самая короткая программа.
code-golf
ascii-art
kolmogorov-complexity
HighlyRadioactive
источник
источник
Ответы:
Brainfuck , 1347 байт
Почему я делаю это для себя
Попробуйте онлайн!
«Читаемая» версия:
источник
T-SQL,
322 298288 байтИспользует сжатие G-Zip, встроенное в SQL 2016 и более поздние версии, наряду с кодировкой Base64, подробности см. В этом сообщении с советами .
В SSMS вам придется либо выводить текст в виде текста после настройки ограничений символов SSMS в настройках, либо просто скопировать и вставить вывод в окно кода:
РЕДАКТИРОВАТЬ : Сохранено 24 байта с лучшей сжатой строкой, благодаря @someone;
CONCAT
благодаря @digscoop сохранено 10 байт с использованием неявного преобразования .источник
H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA=
. Я не могу проверить это, потому что я понятия не имею, как, но вы можете или не сможете опустить=
.=
) и сохраняет 24 байта; думаю, моя процедура кодирования далека от идеальной.DECLARE @ XML='H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA='SELECT CONCAT('',DECOMPRESS(@.value('.','varbinary(max)')))
CONCAT
хитрость, но не переменную XML, так как это добавило бы обратно 3 байта (хотя было бы короче, если бы у меня уже была переменная)PHP ,
176155 байт-21 байт благодаря супер сжатой строке Райана Мура .
Эта версия использует необработанный вывод gzdeflate и содержит непечатаемые двоичные данные, поэтому сам код и ссылка TIO не могут быть размещены здесь, но вот шестнадцатеричный дамп:
Благодаря @dzaima , вот TIO , который использует bash для создания и запуска этого файла: попробуйте онлайн!
Это в основном переворачивает дефлят и печатает результат. Сохраните его как двоичный файл, затем выполните его так:
php mario.php
PHP ,
239216 байт-23 байта благодаря супер сжатой строке Райана Мура .
Попробуйте онлайн!
То же, что и в предыдущей версии, но на выходе используется base64_encode
gzdeflate
, поэтому код доступен для чтения и доступна ссылка TIO . Это в основном переворачивает base64, выкачивает и печатает результат.источник
Жевательная резинка , 138 байт
Попробуйте онлайн!
источник
Желе ,
235213 байтПопробуйте онлайн!
Использует комбинацию кодирования длин серий и замены общих последовательностей длины 2 одной цифрой. Не использует никакую стандартную библиотеку сжатия, такую как gzip. Всего 169 байт сжатых данных и 44 кода.
объяснение
Шаг 1: замените значения в данных между 17 и 39 предварительно сохраненными парами байтов
Шаг 2: Декодирование длины строки и преобразование в строку
источник
LaTeX,
452448 байтСоздан с заменой биграммы (и одной триграммой) вместо программирования цикла для замены нескольких последовательных символов.
LaTeX, 506 байт
Скорее всего, будет более эффективный вариант, но это то, что мне удалось получить вручную (нет встроенных инструментов сжатия в LaTeX ...). Я создал небольшой цикл для замены последовательных последовательностей.
Терминальный выход (обоих кодов):
источник
Bash + coreutils + xz,
243242240 байтисточник
Кег ,
22041012745 байтПопробуйте онлайн!
Сохранено 267 байт благодаря @Sriotchilism O'Zaic
1012-байтовая программа
Попробуйте онлайн!
Это просто кодировка ascii для всей серии, но она реализована в Keg.
Старая программа
Попробуйте онлайн!
Я знаю, что это, вероятно, не выиграет ни одного соревнования, но эй, это выглядит хорошо. Буквально просто избегая каждого персонажа и печатая его. Я имею в виду, это может быть игра в гольф, но разве вы не любите ascii art программы?
источник
JavaScript (Node.js) ,
265264 байтаСохранено 1 байт благодаря @ Night2
Дефлированные.
Попробуйте онлайн!
JavaScript (Node.js) , 318 байт
Последовательные строковые замены.
Попробуйте онлайн!
JavaScript (ES7), 340 байт
Дробленый.
Попробуйте онлайн!
Или здесь:
Показать фрагмент кода
источник
C (gcc) ,
322320318316 байт-2 байта благодаря потолку.
Попробуйте онлайн!
источник
Bash + coreutils,
269262261 байтНемного тривиально - ничего умного здесь не происходит. Я не уверен, что мне разрешено использовать gzip вот так. Если я не буду, я не сомневаюсь, что кто-то будет на меня кричать.
(лучше, если я уберу бессмысленные пробелы / кавычки)
Спасибо @manatwork за сохранение байта
Попробуйте онлайн!
источник
echo
команду и канал, сделав этоbase64 -d<<<...|gunzip
Python3,
921 916 752 751 539 534476 байтА вот и обязательная справедливая версия. Я использовал скрипт для подсчета отдельных символов, должен быть одинаковым:
Попробуйте онлайн!
Предоставлено отличными парнями в комментариях, которые намного лучше меня!
А вот скрипт (python3) для тех, кто хочет сгенерировать некоторый код и слишком ленив / эффективен для подсчета вручную:
Ошибка Python3, 167 байтПоскольку ничего не было сказано о стандартных лазейках, я покажу это здесь, пока могу. TIO по какой-то причине не нравится urllib, если кто-то знает сайт для размещения скрипта, пожалуйста, скажите мне об этом. Очевидно, что укорачиватель ссылок может сэкономить несколько байтов, но я не хотел идти дальше по этой кроличьей норе.
источник
many people, including me and my friend, are interested about how to solve this problem within the fewest characters
, я подумал, что стоит посмеяться; какой вид соответствует теме развлекательного программирования этого поста и частей этого сайта.print(input())
MarioLANG ,
3287 32863285 байтЯ должен был сделать это для темы.
Попробуйте онлайн!
Это ужасно, и мне очень жаль.Циклы могут быть очень дорогими (в байтах) в MarioLANG, если вы не умны с ними, а к тому времени я уже почти потерял желание жить, поэтому Марио буквально бежит по прямой, сначала установка 6 ячеек памяти на правильные значения ASCII, затем переключение между ними для вывода в правильном порядке. Это, безусловно, может быть использовано и дальше, и если вы действительно ненавидите себя, я настоятельно рекомендую вам попробовать.(Сохраняет один байт, удаляя последние равные (символ пола), поскольку Марио попадает в последнюю инструкцию, когда падает даже без нее, и другую, понимая, что он может действительно выполнить две инструкции осенью.)
5413 байт
Попробуйте онлайн!
Это порт ответа случайного парня, использующего конвертер Дениса Brainfuck в MarioLANG, который вносит незначительные изменения, чтобы сэкономить пару байтов. Хотя он, очевидно, намного длиннее, он включает в себя больше возможностей языка и лучше показывает, как работает язык, поэтому я решил включить его.
источник
Pyth , 211 байт
Попробуйте онлайн!
Метод сжатия: Поскольку в нем всего 6 символов, пробел, символ новой строки также
#.-*
заменяют каждый из них буквой изa-f
. После этого, длина цикла кодирует все (aaaaaccc
->5a3c
и т. Д.), Затем сжимает, используя zlib.Сжатая строка
источник
Баш , 486 байт
Попробуйте онлайн!
Зашифрованная строка длины $ S, сгенерированная неигровой программой здесь: попробуйте онлайн!
Затем переменные $ a, $ b, $ c в $ S были заменены на ручную проверку, и в $ S нужно было убрать один обратный тик, чтобы можно было использовать переменные.
источник
Perl,
422396370366365 символовДлина цикла кодируется в 2 этапа: последовательные символы и последовательные шаблоны из нескольких символов.
Попробуйте онлайн!
источник
PHP,
608565557 байтИспользует GMP,
5kJvr...
строка была создана путем использования подстановок для преобразования оригинала в базу56, затем GMP для конвертации в базу 62.Запустить онлайн.
источник
Python3, 557 байт
Длина строки закодирована, затем несколько повторенных подстрок (пробелы, затем три «#», «-», окруженные блоками и т. Д.) Извлекаются вручную. Определенно возможности для улучшения
Python3, 789 байт
Веселье с генераторами случайных чисел. Изображение кодируется по длине серии, а затем разбивается на блоки по 6. Первый блок (индексы для символа для печати) генерируется из генератора псевдослучайных чисел. Второе - это кодировка base64 из 6 чисел.
источник
print(line1,line2,...,sep='\n')
C
114210681044 байтаЭто не очень хорошо, но я сделал это. По сути, я ходил построчно, и в любом месте одна функция плюс два или более вызовов функций были короче исходного текста, я заменял текст функцией.
Это экономит 99 байтов больше, используя просто printf.
Сохранено 69 байт путем удаления спецификаторов int и void и #include <stdio> . Сохранены еще 2 байта, объявив i как глобальный вместо цикла for . Сохранено еще 3 байта, меняющих printf на putchar в двух местах. Удалено еще 21 байт с изменениями , предложенного @Christian Gibbons: деклараций удалены переменными в начале, изменился за цикл , чтобы уменьшающий в то время как контур, изменился «\ п» до 10 в п () функции. Сохранено еще 3 байта, заменяющих putchar (10) на put ("") , любезно предоставленных этим ответом .
1143 байта
Попробуйте это онлайн здесь .
Ungolfed (иш)
источник
s,a,h,d,m,
с самого начала, они будут неявно объявлены какint
s, когда вы инициализируете их сразу после этого.for(;i++>n;)
позволит вам избежать записиi
снова в цикле.putchar('\n')
->putchar(10)
побрить еще пару байтов. Кроме того, похоже , у вас есть посторонний;
в вашейz
функции.i
целом. Вместо цикла, делайтеwhile(n--)
x()
к началу, вы можете иметьc()
иo()
вызывать его, чтобы сохранить несколько байтов.x()
Сам может взятьint*
, так как все указатели, как правило, имеют одинаковый размер, и печатать, используя,printf(c)
чтобы сохранить еще несколько байтов. Две функции могут быть несколько сокращены:n(){p(10,1);}
иp(c,n){while(n--)x(&c);}
(предполагается, что они чередуются). Каждый раз, когда вы вызываете функцию без аргумента, вы можете использовать предыдущий вызов функции в качестве аргумента, например так:c();n();
->n(c());
.Python ,
340378 байтЯ испортил кодировку в исходном ответе, вот она основана на сжатии LZW. Возможно, когда-нибудь вернусь к моему первоначальному ответу.
Попробуйте онлайн!
источник
Чистый JavaScript 419 байт (без lib)
Сжатие (1 шаг: подсчитать каждый символ в шестнадцатеричном коде, например,
**********
дает*a
, 2 шаг: преобразовать два символа как * 1 или # 4 в один символ без кода ascii)Показать фрагмент кода
декомпрессия
Показать фрагмент кода
источник
PowerShell + tar, 265 = 9 + 256 байт
Этот скрипт работает с Windows и Linux. Сценарий извлекает выходные данные из архива tar
t
(256 байт).t
Должны быть размещены в том же каталоге, что и сценарий.Попробуйте онлайн!
Скрипт powershell для создания архива tar
t
:источник
Perl с фильтром: модуль sh, 672 байта
Это долго, но это также довольно нечитабельно, поэтому я подумал, что это квалифицируется как игра в гольф ...
Объяснение: фильтр заменяется
S
на," "
а число наx(num) .
, например,S14
становится" "x14
. В Perl это означает «напечатать пробел 14 раз». Кроме того, существует некоторое ручное сжатие для последовательностей, которые часто происходят с использованием переменных$a
-$h
.источник
s/regex/replace/g
изначально поддерживает синтаксис?e
модификаторе регулярного выражения, который нужен здесь для выполнения оператора x после замены - но теперь я знаю: DSOGL V0.12 , 971 байт
Я просто скопировал всю строку в компрессор. Я понял, что строка не была сильно сжата.
Попробуй здесь!
источник