это я!
Задача сегодняшнего дня проста: написать программу или функцию, которая отображает небольшой простой спрайт Mario из Super Mario Bros в NES на синем фоне.
Любая запись действительна, если она отображает эти 12 * 16 пикселей в любом месте экрана / окна / браузера.
(РЕДАКТИРОВАТЬ: отображаемое изображение можно увеличить, если ваш язык не может создавать пиксельные рисунки. Вы также можете выводить изображения в формате ASCII или HTML, но используя правильные цвета.)
Изображение (увеличено на 400%):
Вы должны использовать следующие цвета:
- синий: # 6B8CFF
- красный: # B13425
- зеленый / коричневый: # 6A6B04
- оранжевый: # E39D25
Самая короткая программа (по количеству символов) побеждает!
Применяются стандартные лазейки (особенно, не допускается подключение к сети), но разрешено жесткое кодирование и отображение файла изображения в вашей программе. (записи, использующие этот трюк, будут оцениваться отдельно)
Вот так!
Текущий список лидеров
Кратчайший ответ только с использованием кода:
- Mathematica, 141. https://codegolf.stackexchange.com/a/39916/10732 (автор Мартин Бюттнер)
- Баш, 158. https://codegolf.stackexchange.com/a/40002/10732 (автор hpsMouse)
- ...
Кратчайший ответ, используя какое-то жестко закодированное изображение:
- HTML, 102b. https://codegolf.stackexchange.com/a/39923/10732 (автор xem и NiettheDarkAbsol)
- PHP, 131b. https://codegolf.stackexchange.com/a/39926/10732 (автор NiettheDarkAbsol)
- ...
Ответы:
HTML / JS,
206158153102102
Используемый трюк: сохраните сжатый файл GIF как файл HTML и добавьте в конце <img src = #>
Благодаря этой записи: https://codegolf.stackexchange.com/a/39926/10732 от @NiettheDarkAbsol
Демо: http://meuziere.free.fr/mario/gif.html
Старые версии:
153
Используемый трюк: сохраните сжатый файл PNG как файл HTML и добавьте <img src = #> в конце
158
Используемый трюк: установка усеченного dataURI сжатого PNG в качестве SRC тега IMG и упаковка всего этого в символы Unicode.
Выполните это в вашей консоли JS:
206
Без упаковки (206b):
демонстрация
Используемые инструменты:
источник
Mathematica,
412292252212163148143141 символовПри этом используется
^A
символ каретки для управляющего символа в кодовой точке1
. В Mathematica я могу буквально встраивать персонажа, хотя это приводит к всевозможным уродствам при копировании. В любом случае, вышеприведенное на 2 символа короче, чем в моей предыдущей версии, и я получил эти символы из символов, используя base-4 вместо base-5 для кодирования индексов цветовой палитры. Прямо сейчас я не могу потрудиться исправить объяснение и снимок экрана ниже, поэтому я оставляю вас здесь с оригинальной версией моего базового 5 ответа:Я кодирую пиксели в Unicode-символах (yay для подсчета по символам!).
Вот как это выглядит в Mathematica:
Вот как это работает:
Сначала мы определяем функцию,
f
которая превращает строки Unicode (переданные в качестве первого аргумента#
) в списки целых чисел. Сначала мы получаем коды символов. Они могут быть интерпретированы как цифры базового номера 65536. И затем мы конвертируем это число в другую базу, передаваемую как второй аргумент#2
.Теперь давайте сделаем это для более длинной строки Unicode.
ToCharacterCode
дает этот список:Рассматривая это как базу 65536:
И преобразование в базу 5:
Это индексы цвета пикселей: синий, красный, зеленый, оранжевый. Мы используем их для индексации в этом списке номеров, который является цветовой палитрой.
Теперь о цветовой палитре. Это
"넴╫賿橫ӣ鴥"
. Мы используем вышеупомянутые индексы, чтобы выбрать правильную строку. Затем мы снова применяем нашу функцию, но с использованием базы 256. Это дает список из 12 целых чисел:Мы используем
;;
индексирование диапазона, чтобы вытащить соответствующий срез для текущего цвета.Наконец, мы просто используем,
Partition
чтобы разделить это на ряды12
и передать егоImage
. Вуаля!Редактировать: с упаковкой Unicode RLE больше не стоил того. Удаление его спасло 50 символов.
Изменить: Конечно, без RLE, также нет необходимости идти на базу 16.
Изменить: И в то время как мы на это, почему бы не Unicode-пакет цветовой палитры тоже? (У меня есть предчувствие, что я могу сэкономить немного больше, сделав всю цветовую палитру также одной строкой и используя ее
Partition
там. Я попробую это позже.)Изменить: Да, это сбрило еще 5 байтов.
источник
Ява:
398377Просто рисует спрайт, распаковывая int для каждого столбца. Показано в полной программе:
Обязательный скриншот:
источник
import java.awt.*
.Машинный код x86, 102 байта
Как это работает: изображение сохраняется как 2-битное изображение с использованием палитры. Каждая строка изображения сохраняется в виде 3 байтов, за которыми следует один 1 байт цветовой палитры. Это позволяет загружать данные как один DWORD. Двенадцать пикселей выводятся путем маскировки 2 младших битов значения, записи их в видеопамять, а затем смещения вправо всего значения на два бита. Как только пиксели для строки выведены, байт палитры записывается в палитру VGA. Когда изображение закончено рисование, программа входит в бесконечный цикл.
Сборочный код для генерации двоичного файла:
Двоичный файл в кодировке Base-64, сохраните его как Mario.com для запуска:
Образец вывода:
источник
GIF - 93 байта
Жесткое кодирование изображения теперь вполне нормально, так что ... ага? : D
Как видно в Notepad ++
Как PHP - 131 байт
источник
Bash + ImageMagick:
350331321 символов(Palette бессовестно украдены у Мартина Büttner «S ответ .)
Образец вывода:
Чтобы проверить это, легко добавьте
-scale 120
кconvert
параметрам, чтобы получить 10-кратную версию:источник
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/
;s/do/{/
;s/done/}/
{
..}
. Спасибо, @ Grawity.Octo / XO-Chip , 70 байтов
Octo - это язык ассемблера высокого уровня, который компилируется в инструкции с байт-кодом для виртуальной машины CHIP-8 . Octo предоставляет несколько пользовательских расширений, называемых «XO-Chip» для базового байт-кода CHIP-8, включая возможность рисования 4-цветных растровых изображений с помощью наложенных битовых плоскостей.
Скомпилированные байты выглядят следующим образом:
Запустите его здесь в своем браузере: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f
Вероятно, более полезно увидеть язык ассемблера Octo, который производит этот байт-код:
Основная программа - три двухбайтовые инструкции. Установите регистр индекса памяти
i
на начало сегмента данных, выберите плоскость рисования 3 (3 - битовая маска; это означает, что вы хотите рисовать в 4-цветном режиме с обеими битовыми плоскостями), а затем нарисуйте спрайт в положениях x и y, заданных как регистрv0
(инициализируется в ноль). Последний 0 указывает размер спрайта, который в наборах команд SuperChip и XO-Chip будет рисовать спрайт 16x16. В 4-цветном режиме за битовой картой для первой плоскости сразу же следует битовая карта для второй плоскости.Чтобы увидеть, как работают плоскости, рассмотрим эту модифицированную программу, которая прокручивает одну плоскость вправо после рисования Марио:
Если вам нравится это, вам может понравиться одно из моих других решений, написанных с Octo. На самом деле вокруг этого инструмента идет игровой джем в октябре.
источник
Groovy
417386Весело как черт, но с ужасным количеством символов. GroovyFX нужен
ungolfed:
источник
grep()
вместоtoList()
HTML / JS,
427408264256239226 символовObfuscatweet,
271270264256239226 символовИспользуя obfuscatweet, удалось сократить это до <250: D
Код ниже, из чего он состоит.
Используемый трюк: преобразование изображения в base4 Строка цветных плиток, преобразованная в шестнадцатеричную строку. Индекс основания 4 обозначает цвет (0 = синий, 1 = КРАСНЫЙ и т. Д.). CSS со встроенным p используется для того, чтобы элементам div нужно содержимое для расширения (также p короче). Поскольку CSS должен начинаться с буквы, перед тегами CSS ставится «A».
Отступ от CSS дает пиксели. Ничто из этого не использует символы Юникода, с которыми я в любом случае не слишком знаком, хотя в этом случае он, вероятно, будет меньше 300. Относительное преимущество использования отступов состоит в том, что вы можете, как в этом случае, увеличить изображение до любого размера, который вы хотите, чтобы каждый пиксель был. Я использовал 9 пикселей, но если вы потратите дополнительный символ, вы можете получить до 99 пикселей на каждый представленный пиксель.
CSS,
127119118114100130 символовПереключение с
p
наrp
устраняет необходимостьdisplay:inline
, стоимость +1 символ, -15! символы!Убрал все цвета и поместил его в массив в JS -87 символов. Тогда я просто удалил все CSS
JS,
300289280275329325 символовЯ пытался вырезать как можно больше из этого простого JS, обрабатывающего шестнадцатеричную строку, но, учитывая, что это моя первая попытка, это то, как далеко я получил, используя только то, что знаю. Написание HTML было сокращено функцией, которая добавляет теги, и классы используют базовое значение 4, чтобы определить цвет для отображения.
Используя дополнительное сокращение, заменили charAt скобками [], удалили класс A0 и установите синий цвет в качестве цвета по умолчанию для p, сохранив дополнительные 10 символов. Дополнительные затраты на использование
rp
тегов компенсируются огромными потерями в CSS.Дополнительное смещение от удаления панели цикла while до простого добавления '000' для варианта использования и выделения -12 из него.
Добавлены дополнительные JS для цветов, затем поместите туда отступы. Заметил ошибку с отступом, которая требует 2 дополнительных символа для исправления. Уплотненная связка петель
HTML-файл,
430429419399366342 символадемонстрация
источник
MATLAB,
194193 байтаКод:
И вывод:
По сути, я преобразовал изображение Марио так, чтобы каждый пиксель представлял собой 2-битное число. Затем я закодировал это в базе 32, которая является строкой, показанной в коде. Эта строка сначала преобразуется в 5 x 16 (каждая строка (12 пикселей) из 2-битных чисел была закодирована в базу 32), затем преобразована обратно в базу 10. Результат снова конвертируется, на этот раз в базу 4, получая массив 12x16 2-х разрядные числа. Эти числа построены с использованием
imagesc()
. Затем цвета назначаютсяcolormap()
с помощью пользовательской карты цветов с необходимыми шестнадцатеричными значениями.Забавно, что треть от числа используемых байтов предназначена только для того, чтобы MATLAB установил правильные цвета после его построения. Цветовой код почти такое же количество байтов, как вся строка base32 !.
Без корректировки цвета (удаления
colormap()
вызова) он составляет 135 байт, и это вывод для цветовой карты по умолчанию на MATLAB R2013a:источник
JavaScript /
CSS/ HTML446430407353328316Я играл в гольф столько, сколько мог, и в итоге получил немного грязного HTML / JS, но что угодно ... это работает.
Редактировать : Вот и все ... Я сделал.
Редактировать Серьезно сделано на этот раз.
JavaScript
JSFiddle
источник
*{line-height:1}
помог бы.<div></div>
корочеdocument.createElement('div')
. И JSFiddle не нравитсяdocument.write
i%12?"":"<br>"
.Matlab -
449/332305 байтчастичное сжатие + использование нижней симметрии изображения:
- Частично сжатая версия (332 байта):
Полностью несжатый вариант (449 байт):
Вывод в обоих случаях (очевидно, увеличенный на экране, реальный 12x16pix):
источник
C 4999 байт
Это абсолютно не может конкурировать с некоторыми из ответов здесь, но я думал, что я бы дал ответ C на выстрел. Код представляет собой одну длинную строку, поэтому здесь есть ссылка для вставки. Если вы предпочитаете, вот кодировка Base64 GZIP-кода:
H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==
Примечательно, что для работы не требуются внешние библиотеки.
Требуется терминал xterm, Konsole или GNOME, поскольку он использует расширение RGB для кодов выхода цвета ANSI для вывода правильных цветов (ANSI не определяет оранжевый цвет). По понятным причинам ideone не будет работать. Он может быть запущен в Windows под Cygwin, который использует xterm (на самом деле, именно так я и тестировал). MSYS может работать; Я не уверен.
Вывод на мою машину (xterm):
источник
Excel VBA,
310307295 байтФункция анонимного окна VBE Immediates, которая выводит Mario в объект Activesheet в ячейках
A1:L16
Помощник
Sub
РутинаБезголовая версия
-3 байта для удаления пробелов -12 байтов для использования
[...]
нотации надRange(...)
нотацией; переход от шестнадцатеричных цветов к цветам intВыход
источник
Баш 346
чистый bash с VT100, как escape-последовательности (извините, нет оранжевого в этой палитре)
источник
Pyth, 83 байта
Отказ от ответственности: это не победивший кандидат, потому что некоторые языковые функции были созданы после публикации вопроса.
Вот шестнадцатеричный дамп:
Вы также можете скачать программу здесь и запустить ее с
Это создает файл
o.png
:Объяснение:
Есть только 4 разных цвета, поэтому мне нужно всего 2 бита, чтобы сохранить цвет каждого пикселя.
источник
Обработка 2 - 359 символов
Я увидел этот вызов и сразу подумал о функции pixel [] Processing. Я надеялся, что это будет короче, но я все еще довольно доволен результатом, учитывая, что это моя первая попытка код-гольфа.
ungolfed:
Вы можете скачать обработку здесь
источник
Javascript 515
только что заработал, все равно придется идти и играть в гольф
источник
div
s, составляющие строки, на встроенный тег по умолчанию. Я не проверял это, но использованиеa
должно работать. Вы также можете использоватьbackground
вместоbackground-color
.Perl - Ungolfed 927
Я буду играть в гольф позже. Первый раз пробую
Image::Magick
.Я уверен, что у нас их много, но вот мой:
источник
Bash для печати:
179158 байтВдохновлен ответом пользователя 2485710 .
Вы должны настроить свой терминал, чтобы точно соответствовать цветам.
источник
-D
для декодирования и-d
для отладки .Tcl 298
Это изображение размером 2 бита на пиксель в базе 64. Пиксели сопоставляются с escape-кодами ANSI.
источник
JavaScript - 256 символов (161 обфус-а-твит)
Метод:
Чтобы определить оптимальный порядок цветового цикла, я запустил алгоритм сжатия по необработанным данным для каждой из 24 перестановок [R, G, B, O] и выбрал одну, дающую наименьший выходной сигнал (126 был лучшим, наименее оптимальным был около 150 с чем-то)
ETA обнаружил это только после прочтения других ответов, используя obfusca-твит ...
Дальнейшие идеи. - Попробуйте 3-битный диапазон данных 0-6, с редкими 7,8,9, получающими дополнительно 4 каждый: 60000N. - Проверяйте перестановки цветового цикла во всех направлениях и на скоростях, отличных от горизонтального, по одному пикселю за раз. Попробуйте несколько проходов рендеринга, чтобы цвета могли быть наслоены.
источник
Javascript,
253240238236Obfuscatweet ed источник -
253240238236Необъяснимый -
395370365361Спасибо @compass за
<p>
трюки с тегами и @xem за 2 (5) символов.демонстрация
Он преобразует данные из базы 36 и преобразует в базу 4.
источник
padding:9
делает что-либо без юнита после него. Вы также можете использовать однобуквенный элемент типаa
или,q
который неявно встроен, вместоp
.document.write
переменную (мы должны использоватьdocument.write.bind(document)
), лучше всего было присвоитьdocument
переменную.JavaScript ES6 (HTML + CSS), 199
30731953630Используя Obfusc-a-твит :
Это отображает спрайт без использования каких-либо изображений или нескольких элементов; он просто неправильно использует
box-shadow
свойство CSS для создания каждого пикселя. Попробуйте это на http://jsbin.com/pozohiyezo/ . Эта необъяснимая версия состоит из 307 символов :Это оригинальная, ванильно-HTML-версия. Смотрите это в действии на http://jsfiddle.net/gfeLn1ey/1/ .
источник
Javascript,
256 или 245,252 или 241256
Грустно переопределять 256, но 245 возможно, если использовать непечатаемые символы:
Существует некоторая проблема с отправкой решения с непечатными символами. Аргумент
btoa
должен быть результатомatob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")
добавления 1 символа длины для экранирования от обратной косой черты.Сократите оба решения на 4 символа: нам не нужно новое для создания массива.
252
241
В этой версии экранирование не требуется. В
btoa
аргументе «S является результатомatob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")
источник
Perl,
266260257249245 байтДля написания вывода в стиле VT100 используется подход, аналогичный bash-решению user2485710. Удаляет явное N для новой строки, вставляя новую строку каждые 12 "vt100 пикселей", 12 * 7 = 84.
источник
SmileBASIC,
147136 символовВыход (обрезано):
Я заменил все символы в строках данных на
x
's', вот коды символов (в UCS-2):P$
(Палитра):FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
Данные изображения:
0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8
Палитра хранится в виде строки, каждый цвет (32 бита) хранится в двух символах (16 бит каждый). Данные изображения (2 бита на пиксель) сохраняются в другой строке (8 пикселей на символ).
К счастью, задача оценивается в символах, поскольку этот файл значительно больше, если он сохраняется в UTF-8.
источник
05AB1E , 87 байт (не конкурирует)
Попробуйте онлайн!
Выходы:
Потому что 05AB1E не может делать цвета или графику любого рода ... Если это не приемлемо, я удалю это.
источник
Bash + 05AB1E
Синклер Бейсик - 573 байта
ОК, поэтому Спектрум не может отображать цвета RGB, как указано, поэтому использовал максимально возможный.
Строка - это цвет (1 = синий, 2 = красный и т. Д.), За которым следует буква, представляющая, сколько раз повторяется этот блок (принимая значение ASCII минус 96, чтобы оно стало 1,2,3 и т. Д.). Число без буквы после него просто рисует один блок.
"\::"
в строке 60 показано, как ввести графику в текстовом редакторе, прежде чем превратить его в файл TAP для загрузки в эмулятор Fuse. (Отображается в виде сплошного графического блока на экране).Каждое ключевое слово в бейсике Sinclair составляет один байт, включая число из команды PEEK после его генерации.
источник
Perl -
399171 байтЗаписывает GIF-файл в стандартный вывод.
источник