Это вариация Quine .
Вступление
Мы все пишем короткий код, потому что по некоторым неясным причинам , но что бы мы ни делали, они будут занимать не менее 144 пикселей / байт (со шрифтом 12 пикселей). Но что произойдет, если мы закодируем наш код в изображениях? Это ваша задача сегодня.
Вызов
Ваша задача - читать в своем собственном исходном коде (допускаются неправильные кавычки, например, буквальное чтение исходного файла) и создавать из него изображение, устанавливая красный, зеленый и синий компоненты пикселя на основе ASCII ценность персонажа.
Пример:
У нас есть строка "Привет, мир!"
Hello world!
Давайте преобразуем это в значения ASCII:
72 101 108 108 111 32 119 111 114 108 100 33
Сопоставьте значения RGB с ним (если длина исходного кода не делится на 3, используйте 0 в качестве оставшихся символов):
__________________________________________________
| R | G | B || R | G | B || R | G | B || R | G | B |
----------------------------------------------------
|72 |101|108||108|111|32 ||119|111|114||108|100|33 |
----------------------------------------------------
Затем мы создаем изображение с наименьшей площадью из него. У нас есть 4 набора значений RGB, поэтому самым маленьким изображением будет изображение 2 * 2, идущее от верхнего левого пикселя вправо:
И мы получаем это ужасно цветное изображение (с измененным размером, чтобы оно было хотя бы видимым, и это доказывает тот факт, насколько маленьким оно может быть)
Правила / Дополнительная информация
- Там нет ввода
- Вывод должен быть в виде отдельного файла или в отдельном окне.
- Для многобайтовых символов разделите символ на 2 байта.
- Исходный код должен быть длиной не менее 1 байта
- Изображение должно быть одного из возможных размеров, которое имеет самое близкое отношение ширины / высоты к 1
- Количество пикселей на изображении должно быть в точности равно количеству байтов / 3, дополнительные пиксели не должны добавляться
счет
Это код-гольф , поэтому выигрывает самый маленький ответ в байтах.
источник
height = N
иwidth = 1
? Я думаю, что вы имеете в виду ширину / высоту, ближайшую к 1.Ответы:
На самом деле, 12 байтов
Попробуйте онлайн!
Эта программа также работает серьезно.
Эта программа выводит изображение PPM , которое является приемлемым по умолчанию .
Выходное изображение (увеличено в 50 раз):
Объяснение:
источник
MATLAB,
817269 байтЭто создает анонимную функцию, которую можно вставить в командное окно и запустить с помощью
ans()
. При запуске это создает 23-пиксельное изображение (простое число), поэтому наиболее квадратное представление представляет собой простой массив пикселей.объяснение
При вставке в командное окно анонимная функция автоматически присваивает себя переменной
ans
. Затем внутри анонимной функции мы используем:который оценивается
char(ans)
в пространстве имен командного окна, а не в локальном пространстве имен анонимной функции. Поэтому он может преобразовать саму анонимную функцию в строковое представление.Тогда у нас есть следующие операции, которые являются более простыми:
источник
ans
идею!ans
до первого запуска, в результате чегоans
станет самой функцией. Во второй раз он использует «свой» код (ну, на самом деле, это код отдельной, но идентичной анонимной функции). При этом я не знаю MATLAB, поэтому могу ошибаться.evalin
вызоваchar(ans)
в базовом рабочем пространстве. Значениеevalin
оценивается только во время выполнения, поэтому, даже еслиans
оно не определено, когда вы вставляете его в командное окно, когда вы вызываетеans()
для запуска эту анонимную функцию,ans
оно определено, иevalin
вызов внутри анонимной функции может получить к нему доступ. Таким образом, вам не нужно запускать его дважды. Если бы я мог рассчитывать на то, что он будет запущен дважды,evalin('base', 'char(ans)')
его заменили бы простоchar(ans)
Javascript (ES6)
324312309 байтЯ уверен, что это может быть немного в гольфе:
Новые строки для удобства чтения:
Выход
источник
f=()=>{
Вот, просто делайтеf=_=>
, -1 байт, просто не используйте его, javascript свободно напечатанJavascript ES6 - 216 байт
Ungolfed:
Примечание:
f
возвращает холст.Пример выполнения (предполагается, что есть что
<body>
добавить):Должен сбросить следующее изображение на страницу (увеличено):
источник
PowerShell v4, 64 байта
Он получает содержимое своего собственного имени файла, преобразует строку в массив char, добавляет заголовок PPM и устанавливает в качестве содержимого a.ppm. 64 байта составляют 11x2 пикселей:
источник
Node.js, 63 байта
Выводит изображение в файл с именем
P6
в формате PPM (P6).Вот изображение в формате PNG (7x3 пикселей):
источник
PHP, 226 байт
Golfed
Неуправляемая версия
Введите этот скрипт в файл с именем «p.php» и запустите его. Вам нужен собственный метод запуска PHP-скрипта, потому что он читает из локального файла.
Выходное изображение:
источник
Java 511 символов
Длина решения приводит к получению более крутой картинки, потому что эти картинки действительно хороши.
Обратите внимание, что есть невидимый завершающий символ новой строки! Он читает исходный файл, который должен быть «Q.java», и создает рисунок «Q.png», который выглядит следующим образом:
или масштабируется в 100 раз
источник
APL (Dyalog) , 33 байта
Требуется
⎕IO←0
по умолчанию во многих системах. Кроме того, автоформат должен быть выключен, чтобы сохранить программу точно так, как указано.Шестнадцатеричный B9 BA FD 4E 50 55 54 BB F8 0D 50 0D C2 CD FD 41 56 B2 0D 03 0B 01 FF 0D C2 BB C8 FD 4E 52 0D 16 0D
Unicode 28 2282 2395 4E 50 55 54 2283 29 27 50 27 2C 2355 2395 41 56 2373 27 0D 026B 08 2363 27 2C 2283 233D 2395 4E 52 27 66 27
Создает
P
: P3 11 1 255 185 186 253 78 80 85 84 187 248 13 80 13 194 205 253 65 86 178 13 3 11 1 255 13 194 187 200 253 78 82 13 22 13,которые вы сохраняете здесь, чтобы увидеть:
⎕NR'f'
N Заинтересованное R epresentation из программы F⊃⌽
выберите последний (освещенный. первый из перевернутых) элементов (строки)'␍ɫ␉⍣',
добавить четыре символа (тип файла, ширина, высота, максимум)⎕AV⍳
найти соответствующие индексы в A Tomic V Ector (набор символов⍕
форматировать как текст'P',
написать письмо(
…)
Применить следующую молчаливую функцию:⊂
принять весь аргумент [и в]⎕NPUT
N ческие [файл] Put [это, с именем файла , состоящее из]⊃
первый символ ("P")источник
Python, 81 байт
Вывод в формате PPM.
Вот как выглядит изображение:
Масштабируется до:
источник
q
P6
формат, вам не нужно конвертировать в порядковые номера. Кроме того, для 8-битного RGB255
следует использовать вместо256
.q
один раз, как кажется, избавитесь от назначения и замените его напрямую - это сэкономит вам три байта.print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),open(__file__).read()))
. Это -4 байта, хотя!