Космический вызов является сообщение , отправленное в космос в 1999 и 2003 годах он сделан из 23 127 * 127px монохромные растровые изображения, как подробно здесь .
Ваша миссия - написать программу, которая отображает все сообщение размером 127 * 2921 пикселей в виде текста (из нулей, единиц и разрывов строк) или в виде изображения (нарисованного на экране или сохраненного на диске). Будут две категории победителей: одна для вывода текста и одна для вывода изображения.
Разрешены все хитрости, кроме обычных лазеек.
Разрешается выводить 23 страницы отдельно.
Разрешается писать до 23 программ (например, по одной на каждую страницу) и суммировать их размер, чтобы определить свой счет.
Разрешено использовать до 23 двоичных файлов вместе с вашей программой (программами). Их вес засчитывается в ваш счет.
Самый короткий код (в байтах) выигрывает.
При 1 бите на пиксель изображение содержит 127 * 127 * 23/8 = 46370 байт + 7 бит данных. (предупреждение: не допускается вывод дополнительного нуля, если вы сохраняете значения пикселей в 46371 байт)
Конечный символ новой строки / пробела разрешен для вывода текста.
Визуальный вывод не может содержать черный пиксель, кроме черных пикселей космического вызова. Он может быть нарисован в одном столбце (упорядочен правильно), разбит на 23 изображения или анимирован (как в формате gif), также упорядочен правильно.
Вложение: вывод текста и вывод изображения для воспроизведения:
0
, пустые Улитки программа печатает1
, и пустая GolfScript программа печатает строку , Кто-то может отправить 0-байтный ответ из 373888 программ :)Ответы:
GIF, 27386 байт
Вот страницы оригинальной передачи, разделенные на отдельные GIF-кадры, оказалось, что они не такие маленькие, как 1 PNG из них :(
источник
HTML, 16012b
Я сжал изображение в PNG8, открыл его в текстовом редакторе, добавил
<svg onload="document.body.innerHTML='<img src=#>'">
в конце и вуаля:
Демо: http://xem.github.io/miniCosmicCall/
NB: добавление
<img src=#>
тоже работает, но оно позволяет увидеть много мусора, поэтому я предпочитаю этого не делать.PS: для удовольствия я также поместил все сообщение в один исполняемый твит (вы можете скопировать и вставить его в консоль браузера, и изображение появится):
https://twitter.com/MaximeEuziere/status/742440423994580992
источник
Python 2.7 -
109718077 байтОбновить:
LZMA на самом деле почему-то не работает для меня, поэтому я вернулся к Deflate.
Я нашел онлайн-инструмент для сжатия PNG еще больше (говорят, что они используют сжатие с потерями, но массив остается неизменным)
__main__.py
сценарий немного больше ...Большинство алгоритмов сжатия рассматривают данные как одномерный массив и поэтому не могут захватывать повторяющиеся двумерные символы, отображаемые в космическом вызове (IMO также затрудняет понимание инопланетянами: P).
Сначала я выбрал каждый символ в виде массива 7 * 5 и составил список всех уникальных символов (101, если я помню). Затем я перебрал изображение, и когда символ был найден, положение и индекс этого символа (в списке символов) были записаны.
Эти позиции могут быть представлены одним int, однако с более чем 2K найденными символами, а позиции в диапазоне от 0-370966 (форма divmod) требуют до 3 байтов каждая. Однако я собрал позиции символов по порядку, поэтому вместо этого преобразовал абсолютную позицию в позицию смещения, сделав большинство чисел менее 1 байта. Я закодировал этот список в utf-8, чтобы учесть несколько чисел, которые были больше 1 байта
После записи и удаления всех совпавших символов я сохранил png с максимальным сжатием. Затем я упаковал скрипт реконструкции Python (обратный процесс), png, шаблон chatacter и список позиций персонажей в zip-файл, чтобы воспользоваться тем фактом, что python может использовать папку или zip-файл в качестве аргумента, и он начнет выполнение в любом файле верхнего уровня с именем
__main__.py
. Я немного поиграл с 7z, чтобы получить лучшее сжатие, которое оказалось LZMA с 1M dict и 32-битными словами.вот сценарий декодера (игра в гольф, но с комментариями до сих пор)
ссылка на скачивание для zip-файла ...источник
Gzipbzip2
в оболочке,20914 18965байтСоздайте файл выходных данных с текстом, предоставленным в вопросе,
bzip2
переименуйте файл вs
. Это тогда позволяет:сделать работу. Таким образом, он добавляет до 18958 байт данных и 7-байтовую команду.
источник
Pyth, 46381 байт
По понятным причинам это не может быть отправлено здесь.
Образец.
Вставьте в hexdump программы.
источник
jc.BC""127"
).Bash + WebP бинарный, 11 + 15330 = 15341 байт
Как говорится в правилах:
и
… Я не удержался, чтобы опубликовать что-то тупо простое.
Программа находится в bash и выводит изображение, сохраняя его на диске.
Он использует 1 двоичный файл, который также является файлом изображения (да, WebP - это формат изображения), поэтому программа может сделать всего лишь ... сделать копию этого файла.
Итак, код (11 байт):
Предполагая, что сопутствующий двоичный файл называется «b», код записывает файл образа на диск с правильным расширением («a.webp»).
Я не вижу особых причин загружать бинарный файл, потому что он тривиально создается
это производит файл с 15330 байтами. Если кто-то хочет, я могу загрузить его куда-нибудь.
Примечание:
-z
опцияcwebp
активирует режим сжатия без потерь.9
максимальная прочность на сжатие.источник
Python 3, 64513 байт
Используйте только ASCII!
http://pastebin.com/PMLb4Xti
Старая версия, 64529 байт: http://pastebin.com/nteYkUtM
источник
import lzma,base64,os