Давайте попробуем сыграть в гольф в этом произведении ascii-art, представляющем человека, играющего в гольф
'\. , |> 18 >> \. '. | О >> 'о | \. | / \. | / /. ' | JGS ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^
Источник: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm
Правила:
- Вход не разрешен
- Внешние ресурсы запрещены
- Выходными данными должен быть именно этот текст, отображаемый моноширинным шрифтом (консоль ОС, консоль JS, тег HTML <pre>, ...), включая начальный и конечный разрыв строки.
- Допускаются окружающие или двойные кавычки (консоль JS добавляет двойные кавычки при выводе строки, это нормально)
Лучшим ответом будет тот, который использует меньше символов на любом языке.
Повеселись!
Ответы:
CJam, 62 символа
Попробуйте онлайн.
Тестовый забег
Как это работает
2G#b
преобразует предыдущую строку в целое число, считая его числом base-65536.128b:c
преобразует это целое число обратно в строку ( 110 байт ), считая его числом base-128, которое~
затем выполняет:(каретная запись)
разбивает строку на пары по два символа и выполняет следующие действия для каждой пары: выталкивает второй символ строки, преобразует его в целое число и повторяет строку
" "
много раз.Например,
".("
становится". "
, потому что код символа ASCII(
равен 40.В заключение,
толкает строку
"jgs"
, символ^
повторяется 7 раз,`
символ^
повторяется 51 раз и перевод строки.источник
Руби, 107
Я подумал, что на самом деле попытался бы «сгенерировать» изображение в коде (вместо использования какой-либо существующей функции сжатия):
В этом массиве есть непечатаемые символы.
Вот шестнадцатеричное представление файла, чтобы показать также непечатаемые символы:
Спасибо Ventero за некоторые значительные улучшения! (Он в основном сократил код на 50%.)
источник
6.times{|i|S[i+1]=' '*55+?|}
сохранить 2 символа.i
будет не раз. Хороший улов!S.fill{' '*55+?|}
вместо экономит несколько символов (вы должны будете определить ,S
как['']*7
, изменить ,puts
чтобыputs p,S,p
и вычесть 1 из всех у координат , хотя). Затем, используя varargs в f (def f(*p,c)
), вы можете сохранить[]
вызовы функций. Ох, и вы можете бросить()
вокругy,x
.S
одномерный, вы можете сохранить еще 55 символов;) Вот код, если вы не хотите делать это самостоятельно.bash + iconv + машинный код DosBox / x86 (
104979695 символов)Я предлагаю поместить это в скрипт в пустой директории, почти гарантировано, что копирование в терминале все сломает; еще лучше, вы можете взять готовый скрипт здесь .
Ожидаемый результат:
Как это работает
Часть bash - это просто средство запуска, которое использует
iconv
для «распаковки».com
файл из символов сценария UTF-8 и запускает его с помощью DosBox.Обратите внимание, что это накладывает некоторые ограничения на содержание, так как не все входные последовательности могут быть интерпретированы как UCS-2
iconv
без жалоб; например, по какой-то причине многие операции, связанные сbx
регистром, приводили к хаосу в зависимости от того, где я их использовал, поэтому мне приходилось обходить эту проблему несколько раз.Теперь Unicode просто использует преимущества правил «подсчета символов»; Фактический размер (в байтах) скрипта намного больше исходного
.COM
файла.Извлеченный
.com
файли имеет длину 108 байт. Источник NASM для этого:
Все это просто декомпрессор
compressed.dat
, формат которого выглядит следующим образом:compressed.dat
в свою очередь генерируется с использованием скрипта Python из исходного текста.Все это можно найти здесь .
источник
Питон, 156
Это использует форматирование строки с пробелом для некоторого базового сжатия.
источник
PHP, 147
Это выполняется в командной строке и выводится непосредственно на консоль:
источник
Perl - 127
129130132135137145Спасибо Ventero и m.buettner за помощь в оптимизации RegEx .
источник
s/\d+(?!8?>)/%$&s/rg
/\d++(?!>)/
GCC C - 203 байта
Я решил повеселиться с этим. Это компилирует мою версию MinGW и выводит ожидаемый текст.
Пробелы добавлены для ясности.
Ни один из сайтов для онлайн-вставки кода не позволяет использовать однобайтовые символы вне диапазона ASCII, поэтому мне пришлось избегать их для загруженного примера. Это в остальном идентично, хотя. http://codepad.org/nQrxTBlX
Вы также всегда можете проверить это с помощью собственного компилятора.
источник
LOLCODE, 590 символов
Потому что LOLCODE iz perfik language 4 golfin: iz easy 2 полностью запутан и не многословен.
Я уверен, что не знаю, но у меня есть LOLCODE интерпретатор, а http://repl.it кажется 2 не похожим на funcshuns.
(Tranzlashun великодушно предоставлен роботами http://speaklolcat.com , потому что я говорю spell lolcat)
Версия кода с отступом, пробелами и комментариями (комментарии LOLCODE начинаются с BTW):
источник
Питон -
205203197Строка
i
перемежает символы в ascii art с их мультипликатами, представленными как символы, все в обратном порядке. Кроме того, я экономлю немного места, используя '!' вместо 'G',i
а затем просто заменить его.источник
Питон (145)
Не очень оригинально, я знаю.
источник
Javascript ( ES6 )
193175 байтРедактировать: Модифицированный RegPack v3 для поддержки новых строк, использования
for in
цикла для сохранения 3 байтов и удаления eval для неявного вывода на консоль.Использование сжатия xem в Unicode: 133 символа
источник
ES6, 155 символов
Просто пробую другой подход:
Запустите это в консоли Firefox JS.
Каждый символ Юникода имеет следующую форму: \ uD8 [ascii charcode] \ uDC [количество повторений].
(Строка Unicode сделана с помощью: http://jsfiddle.net/LeaS9/ )
источник
.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
PHP
Способ 1, более простой (139 байт):
Использование предварительно спущенной строки.
Метод 2, кодирование серий пробелов в буквы алфавита (192 байта):
источник
PowerShell,
192188119Часть выше содержит несколько не символов. Шестнадцатеричный дамп:
Схема кодирования - RLE с длиной, закодированной выше 7 младших битов, которые являются символом для отображения.
источник
Питон - 236
источник
JS (190b) / ES6 (146b) / ES6 упакованы (118 знаков)
Запустите это в консоли JS:
JS:
ES6:
ES6 упакован: ( http://xem.github.io/obfuscatweet/ )
Благодаря @nderscore!
источник
"\n6'\\19.2.24|>18>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs^^^^^^^`".replace(/\d+/g,a=>18-a?' '.repeat(a):a)+"^".repeat(50)+"\n"
"\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)
(stackexchange добавляет невидимые символы разрыва строки после 41 | \ )ES6, 163b / 127 символов
Еще один подход, благодаря @nderscore.
Выполните это в консоли Firefox
JS (163b):
Упаковано (127c):
источник
Питон, 70 символов UTF-16
Конечно, вам, вероятно, придется использовать шестнадцатеричную версию:
или версия base64:
Первая «строка» программы объявляет кодировку UTF-16. Весь файл - UTF16, но интерпретатор Python всегда интерпретирует строку кода в ASCII (так и есть
#coding:UTF-16BE
). После новой строки начинается текст UTF-16. Это просто означает,print'<data>'.decode('zlib')
где текст является дефлированной версией целевого изображения ASCII. Некоторое внимание было уделено тому, чтобы в потоке не было суррогатов (что могло бы испортить декодирование).источник
zip
вместо того, чтобыzlib
сохранить один символ.zlib
а неzip
очень целенаправленный.zlib
четное количество символов.C # -
354332Немного в гольф:
источник
string[] args
.Main
не нужно иметь никаких аргументов, он все равно будет компилироваться (в отличие от Java). Удаление этого и встраиваниеx
приводит к этому уже 333. Вы можете сохранить другой байт, удалив пробел между аргументами вDeflateStream
ctor. Вы можете использовать приведение для члена enum:,(CompressionMode)0
что приводит нас к 324. Так что я бы сказал, что это еще не самый короткий вариант ;-)bzip2, 116
Увидев ответ CJAM, я решил, что этот тоже должен быть квалифицирован.
Я сомневаюсь, что требуется дальнейшее объяснение. :)
источник
C (gcc) , 190 байт
Попробуйте онлайн!
источник
Vim, 99 нажатий клавиш
вероятно гольф
Объяснение:
источник