Задача: создать следующий вывод, используя как можно меньше символов:
_ _ _ _ _ _ _
| | | | ___| | | ___ __ _____ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Правила и ограничения:
Вы не можете использовать FIGLet или любые другие подобные инструменты. (В противном случае,
figlet Hello, world!
было бы тривиальным и в значительной степени непобедимым решением.)Ваша программа должна состоять полностью из печатных символов ASCII - в частности, кодовые точки 9 (TAB), 10 (LF) и 32 - 126. (Если ваш язык / операционная система требует разрывов строк CRLF, вы можете использовать их вместо простых LF.) Да это, к сожалению, дисквалифицирует любой язык, который требует не-ASCII символов (или нетекстовых данных) как часть его синтаксиса.
Вывод должен выглядеть точно так же, как в примере выше. Однако вы можете добавить лишние пробелы вокруг вывода, если хотите. Вы можете принять 8-символьный интервал между табуляциями (или настройку по умолчанию для выбранной вами платформы, если она соответствует).
Ps. Чтобы установить паритет, я предложил решение Perl с 199 символами. Я пока не буду публиковать это, если кто-то придумает это самостоятельно. (Кроме того, это немного глупо.) Конечно, это не должно отговаривать вас от публикации собственного решения, даже если оно дольше.
Обновление: Теперь, когда Хэн побил его одним символом, вот мое дерзкое решение Perl с 199 символами:
use Compress'Zlib;say uncompress unpack u,'M>-I]BT$*`S$,`^]YQ=R:0,&_Z<DP?8@?WVQJ]E2J"%E$$@)R(/(/MCJ*\U!OM`Z#=5`4Y>6M=L\L%DMP&DB0V.4GQL&OOGB$4:%`4TT4!R8O-Z(^BTZWNV?>F86K:9+""-35*-LNC:T^D:_$#%^`";"DD0'
Это очень похоже на решение DC (и все другие решения на основе zlib / gzip на разных языках), за исключением того, что я использовал uuencoding вместо base64 для сжатого текста и некоторые другие мелкие уловки игры в гольф.
Обновление 2 : я думаю, что пришло время официально признать победителя. Первое место занимает PHP-код konsolenfreddy , поскольку, несмотря на количество символов, он является самым коротким из представленных на данный момент. Фактически, в сочетании с оптимизированным потоком DEFLATE из моего Perl-кода из 199 символов получается еще более короткое решение из 176 символов:
<?=gzinflate(base64_decode("fYtBCgMxDAPvecXcmkDBv+nJMH2IH99savZUqghZRBICciDyD7Y6ivNQbwOg3VQFOXlrXbPLBZLcBpIkNjlJ8bBr754hFGhQFNNFAcmLzeiPotOt7tn3plq2mSwgjU1SjbLo2tPpGvxAxfgA"));
Тем не менее, я думаю, что Хан заслуживает особого почетного упоминания за то, что он так близко подошел без использования каких-либо предварительно написанных инструментов декомпрессии. Поздравляю вас обоих, и с Новым годом всех!
источник
Ответы:
Stax , 137 байт
Запустите и отладьте его
Это работает так.
0
s, сопровождаемые a1
, переводятся в непробельные символы.1
s заменяются пробелами.источник
Perl 5.10 - 195
198202203символовВот запись, которая не требует никаких библиотек, кроме базового соответствия регулярному выражению. Кодированная строка состоит из 131 символа, а код для декодирования и печати занимает 64 символа (при условии отсутствия перевода строки в конце источника). Идея состоит в том, чтобы представлять обычные 3-символьные строки строчными буквами.
Кодировщик намного длиннее и, к сожалению, не очень читаемый прямо сейчас. Основная идея состоит в том, чтобы использовать динамическое программирование для нахождения кратчайшего кодирования для каждой строки, учитывая фиксированный набор подстановок строк. Строка подстановок в последней строке была построена методом проб и ошибок, и вполне возможно, что другая строка подстановок может привести к более короткой программе, чем указанная выше.
Одна хитрость заключается в том, что некоторые подстановки короче 3 символов: из-за того, как
substr
работает perl ,x
он заменяется на '_
' иy
на '_
'. Последнее необходимо, потому что\w
в регулярных выражениях совпадает '_
', который затем заменяется на '(_)
'.источник
print
наsay
say
вам необходимо либо делатьuse 5.010;
или запустить скрипт как однострочник сperl -E 'script here'
. Первый делает код длиннее, а второй не подходит для многострочного скрипта. Я что-то пропустил?-E
Не учитывается в количестве полукокса.s''...'
вместо$_=q!...!
; только не забудьте избежать единственной цитаты. С этим иsay
вместоprint
(и пропуская последний перевод строки) я получаю это до 198 символов.#
длинных пробелов и довел ваше решение до 190 символов. Интересно, возможно ли падение ниже 184 символов - это побьет все решения, сжатые zlib.Brainfuck - 862 персонажа:
источник
[<---->---]
первой строке. (Предположительно, это в конце концов закончилось бы, но я не ждал этого достаточно долго.)Python (2.x), 194 символа
источник
Javascript,
273265264 персонажа:(
источник
return
, -1 символ :)Этот ответ длиннее, чем просто печать строки; однако, просто для удовольствия, вот оно:
Python, 485 символов ☺
Поскольку у меня есть одно из самых коротких ASCII представлений сжатого исходного текста, у меня должна быть самая длинная полоса прокрутки в моем коде! Это победа! :)
источник
PHP,
194189 символовЭто в основном так же, как Python и Perl ответ, немного короче
источник
php -r'=...'
Трюк , кажется, не работает для меня, но вы можете использовать только<?=...
для 184 символов. Кроме того, ваш вывод, кажется, имеет дополнительное пространство, гдеr
иl
встретиться.-r'=..'
. делаетphp -r
не считать? Это включено в мои 189 символов ...-r
Переключатель PHP является чем-то вроде пограничного случая, поскольку, помимо того, что он принимает код в качестве параметра и запускает его, он также немного модифицирует среду анализа по сравнению с запуском кода из файла. Я был бы склонен считать это как 2 дополнительных символа - который случайно помещает это даже с<?
.J
167160 символов (47 + 113)Еще одно подчинение без встроенного сжатия. Использует довольно простое кодирование переменной длины, кодируя каждый символ как последовательность из 1 бита и разделяя символы на 0 бит. Сжатая строка содержит всего 113 символов.
источник
Python (2.7.x), 218 символов
Довольно просто ... не очень доволен этой попыткой.
источник
Баш,
199196193 символовДостаточно близко...
РЕДАКТИРОВАТЬ: до 193!
источник
gzip -d
наzcat
.Баш,
196192источник
Perl, 230 символов
Это в основном так же, как мой ответ Python. Я хотел бы видеть версию из 199 символов ... звучит как волшебство.
источник
Perl,
294290 байт.Только сжатая строка
151130 байтов.Это не коротко, но было действительно весело писать.
источник
Perl, 346 байт
Одна сжатая строка имеет размер 111 байт.
Пытаясь понять, что
key= (0,(1,((((7,5),(6,(8,(11,(9,10))))),(4,3)),2)))
делает Python с , я в итоге сделал очень похожую версию Perl.источник
PHP 590
очевидно, я не пытаюсь победить, просто заинтересовался попыткой использовать другую схему сжатия, хотя она не может даже превзойти более простое 302-простое PHP-решение для простого копирования
работает как растровое изображение на 10 каналах
"Golfed"
удобочитаемый
источник
Pylongolf2, 300 байт
Я не мог найти классные методы кодирования, поэтому я, вероятно, не конкурирую.
источник
Golf-Basic 84, 325
Предполагая, что калькулятор может печатать обратные косые черты, обратные косые черты, одиночные трубы и подчеркивания.
источник
HTML + JS (223 символа Юникода)
Просто для удовольствия:
Примечание: вы должны сохранить его в HTML-файле «UTF-8 с спецификацией».
источник
PowerShell , 220 байт = скрипт: 9 + архив: 211
Попробуйте онлайн!
Скрипт Powershell для создания архива
t
(см. TIO):источник