Введение
Quixel - это квантовый пиксель. Подобно классическому пикселю, он представлен 3 целочисленными значениями (красный, зеленый, синий). Тем не менее, киксели находятся в суперпозиции этих 3 состояний вместо комбинации. Эта суперпозиция длится только до тех пор, пока не наблюдается квиксель, и в этот момент он падает до одного из трех классических пикселей; RGB(255,0,0)
, RGB(0,255,0)
И RGB(0,0,255)
.
Спецификация
- Представление
- Каждый quixel представлен в виде массива целых чисел 3 от 0 до 255, r, gи bсоответственно.
- Супер Позиции
- Каждый quixel находится в положении супер между красным, синим и зелеными состояниями представлены R, Gи Bсоответственно.
- наблюдение
- Когда каждый quixel наблюдается, он разрушается в одно из трех состояний. Вероятность каждого классического состояния есть
R = (r + 1) / (r + g + b +3)
,G = (g + 1) / (r + g + b + 3)
аB = (b + 1) / (r + g + b + 3)
. Таким образом, каждое классическое состояние всегда как ненулевая вероятность появления.
- Когда каждый quixel наблюдается, он разрушается в одно из трех состояний. Вероятность каждого классического состояния есть
- вход
- Функция или программа должны сделать снимок с изображением Quixels. Как это сделать, это гибко. Имя файла, использование многомерного массива и т. Д. Все приемлемо.
- Выход
- Функция или программа должны создавать изображение классических пикселей. Структура данных для этого полученного изображения также является гибкой. Обратите внимание , что все пиксели должны быть один из этих трех:
RGB(255,0,0)
,RGB(0,255,0)
иRGB(0,0,255)
- Вывод не должен быть детерминированным ; это квантовые пиксели! Один и тот же вход должен приводить к различным выходам.
- Если ваш язык не может генерировать случайное число, вы можете взять случайные байты в качестве входных данных
- Функция или программа должны создавать изображение классических пикселей. Структура данных для этого полученного изображения также является гибкой. Обратите внимание , что все пиксели должны быть один из этих трех:
- счет
- Это код-гольф, поэтому выигрывает меньшее количество байтов.
Картинки
Мона Лиза от Леонардо да Винчи
Звездная ночь на Винсент Ван Гог
Постоянство памяти от Сальвадора Дали
Тедди Рузвельт VS. Снежный человек от SharpWriter
code-golf
graphical-output
random
image-processing
NonlinearFruit
источник
источник
RGBK
, гдеK=255*3-R-G-B
, а затем сделайте ваши квантовые пиксели любым из 4. (Если выбрано K, отобразите (0,0,0). Расширьте ваши уравнения RGB в очевидный путь, изменение 3 с на 4 с, добавление K, когда вы добавите R + G + B и т. д.). Размытие после этого должно восстановить довольно приличную шумную копию оригинала. (K означает черный или ключ, если вам интересно)Ответы:
Дьялог АПЛ ,
232119 байтПринимает таблицу (R, G, B) триплетов.
Вдохновленный алгоритмом миль
Возвращает таблицу индексов в {(255, 0, 0), (0, 255, 0), (0, 0, 255)}. Ужасно расточительно.
(
?∘≢
случайный индекс⊃
выбирает⊢
из)¨
каждого из(
⊂
все⍳3
первые три индекса)/¨⍨
повторяются каждым из1+⊢
увеличенные триплетыTryAPL!
Старая версия
Возвращает таблицу индексов на основе 0 в {(255, 0, 0), (0, 255, 0), (0, 0, 255)}
{
...}
¨ для каждого квикселя в таблице найдите:+/
сумма (то есть количество истин)(?0)≥
случайное число 0 <число <1 больше или равно+\
совокупная сумма(1+⍵)÷
увеличенные значения RGB, деленные на3+
три плюс+/⍵
сумма квикселяПримечание: Dyalog APL позволяет выбрать между Лехмер линейного конгруэнтного генератора , то Вихрь Мерсенна и RNG операционной системы ¹ ² .
Например, изображение:
может дать
Обратите внимание на то, как три «чистых» кикселя обрушились на свои цвета.
Попробуй APL онлайн!
источник
Mathematica, 53 байта
Анонимная функция. Принимает Mathematica в
Image
качестве входных данных и возвращает вImage
качестве выходных данных. Обратите внимание, что входное изображение должно иметь цветовое пространство RGB.источник
<...>~ImageApply~#
применяет функцию по всем пикселям в изображении, иRandomChoice[255#+1->IdentityMatrix@3]
использует некоторую взвешенную RNG для получения ряда единичной матрицы 3 × 3 (то есть{1, 0, 0}
,{0, 1, 0}
или{0, 0, 1}
) , которая соответствует красный, зеленый или синий.C #,
366243 байтаОгромное спасибо @TheLethalCoder за это!
Основная идея:
Примеры:
Мона Лиза
Звездная ночь
Постоянство памяти
Тедди Рузвельт VS. Большая ступня
Вот обновленный imgur альбом с несколькими другими примерами, чтобы показать, что это недетерминировано.
источник
var r=new Random();c=>{double t=c.R+c.G+c.B+3,x=(c.R+1)/t,d=r.NextDouble();return d<=x?Color.Red:d<=x+(c.G+1)/t?Color.Lime:Color.Blue;};b=>{for(int x=0,y;x<b.Width;x++)for(y=0;y<b.Height;y++)b.SetPixel(x,y,g(b.GetPixel(x,y)));return b;};
и есть еще улучшения, которые можно сделатьPython 2,
172166162 байтаВторой и третий уровни отступа - это необработанная вкладка и необработанная вкладка плюс пробел соответственно; с Markdown это очень плохо работает, поэтому вкладки были заменены двумя пробелами.
Использует формат ввода / вывода, аналогичный ответу Адама APL . Вход представляет собой двумерный массив кортежей RGB; выход представляет собой 2D массив
0
,1
или2
, представляющие красный, зеленый и синий соответственно. Например:Ниже мой старый ответ Python 3 с использованием PIL.
Python 3 + PIL,
271250245243 байтаПеребирает каждый пиксель и применяет к нему функцию quixel. Принимает имя файла в качестве ввода и сохраняет его вывод в
o.png
.Вот некоторые результаты:
источник
R, 58 байт
Ввод состоит из трех числовых векторов , проведенных в
r
,g
иb
соответственно.Нам не нужно нормализовать вероятности для суммирования с одним, что происходит автоматически в
rmultinom
.Выход имеет вид
Где есть один
1
в каждом столбце. В1
первом ряду для пикселей «R», во втором ряду для «G» и третьем ряду для «B».источник
Pyth -
1110 байтПринимает RGB 2d битовую карту и выводит битовую карту с индексированным 3-битным цветом.
Этот уровень вложенности вредит моей голове.
Попробуйте это онлайн здесь .
источник
J,
201817 байтИзображение вводится в виде массива с размерами h x w x 3, представляющими значения RGB в виде целых чисел в диапазоне 0 - 255. Выходными данными является таблица с размерами h x w, где 1 - это значение rgb (255, 0, 0 ), 2 - это (0, 255, 0), а 3 - (0, 0, 255).
объяснение
()"1
Представляет , что этот глагол должен быть применен к каждому массива ранга 1 на входе, а это означает , что он будет применяться к каждому пикселю .источник
Желе ,
87 байтВходные данные - это трехмерный список с размерами h x w x 3. Выходные данные - это двумерный список с размерами h x w, где 1 представляет значение rgb (255, 0, 0), 2 - (0, 255, 0) и 3 является (0, 0, 255).
Пример ввода ниже - это верхняя левая область 4 x 4 изображения Моны Лизы.
Попробуйте онлайн!
объяснение
источник
Python 3, 119 байт
Где
m
вводится как двумерный массив пикселей, где каждый пиксель является списком формы[r,g,b]
. В позиции каждого пикселя возвращается,0,1,2
чтобы представить(250,0,0), (0,250,0), and (0,0,250)
соответственно.источник
input
или сделать это функцией и принятьm
в качестве параметра.