Мне всегда нравились экраны, полные случайно окрашенных пикселей. На них интересно смотреть, а программы, которые их рисуют, интересно смотреть.
Соревнование
Заполните ваш экран или графическое окно цветными пикселями.
Правила
- Ваша программа должна иметь равные шансы выбрать все цвета (т.е. в диапазоне
#000000
до#FFFFFF
) или все цвета, которые могут отображаться в вашей системе. - Ваша программа должна продолжать отображать случайные пиксели, пока не остановится вручную (она не может завершиться сама по себе).
- Пиксели могут быть любого размера, если ваш вывод имеет размер не менее 40x40 "пикселей".
- Ваша программа должна работать с такой скоростью, чтобы она могла заменить каждый пиксель на экране / окне хотя бы один раз после запуска в течение трех минут.
- Ваша программа должна выбирать действительно случайные цвета и точки для замены, т.е. случайные, с равной вероятностью для всех точек / цветов. Это не может выглядеть просто случайно. Он должен использовать pRNG или лучше, и результат не может быть одинаковым каждый раз.
- Ваша программа должна иметь одинаковые шансы выбрать все цвета на каждой итерации .
- Ваша программа должна заменить только один пиксель одновременно.
- Ваша программа не может использовать Интернет, ни вашу файловую систему (
/dev/random
и за/dev/urandom
исключением).
пример
Ваш вывод может выглядеть следующим образом, если остановится в случайное время:
Победитель
Самый короткий ответ на каждом языке выигрывает. Веселиться!
It must use a pRNG or better
Ответы:
Minecraft 1.12 Redstone Command Blocks,
4 355 2872 байта(Размер определяется размером файла сохраненного структурного блока.)
Вот полный обзор YouTube , но я постараюсь обрисовать в общих чертах код ниже.
Программа установки:
Это устанавливает 40x40 сетку стендов брони Minecraft. Стойки брони необходимы, потому что Minecraft не имеет возможности подставлять переменные в мировые координаты . Таким образом, обходной путь должен относиться к расположению этих сущностей броневого стенда.
Эта именованная подставка для брони является в основном нашим «курсором» для размещения всех подставок для брони, которые нам понадобятся. Блок красного камня на последнем шаге «питает» соседние блоки (включая наши командные блоки), поэтому запускается следующий цикл:
На данный момент наша сетка завершена:
Случайный выбор цвета
Фиолетовые повторители в центре этой картинки выбирают случайный цвет с помощью следующей команды:
«@R []» - волшебный соус, он выбирает случайную сущность в мире, которая соответствует заданным условиям . В этом случае он находит подставку для брони в радиусе 9 блоков , и мы установили 16 подставок для брони, по одной на каждый цвет шерсти. Под выбранным цветом он помещает блок красного камня (который питает два командных блока с каждой стороны).
Случайный пиксельный селектор
Помещение блока красного камня под выбранный цвет шерсти запускает еще два командных блока:
В этой первой строке используется та же команда magic @r, чтобы выбрать любую стойку брони на всей карте (без ограничения радиуса, включая сетку 40x40), и помещает шерсть выбранного цвета над головой. X определяет цвет и находится в диапазоне от 0 до 15. Вторая команда удаляет блок красного камня, поэтому он снова готов к работе.
У меня есть 5 фиолетовых блоков повторителей, а красный камень работает в «тиках» 20 раз в секунду, поэтому я помещаю 100 пикселей в секунду (за вычетом наложения некоторых цветов). Я рассчитал время, и я обычно покрываю всю сетку за 3 минуты.
Это было весело, я попытаюсь найти другие проблемы, которые могут также работать в Minecraft. Огромное спасибо lorgon111 за серию учебных пособий по YouTube Command Block .
РЕДАКТИРОВАТЬ: Сделано несколько серьезных сокращений в размере сохраненной структуры, теперь на 2872 сохраненных байтов :
Протестировано, вытащив сохраненную структуру в новый мир, все по-прежнему работает как задумано.
РЕДАКТИРОВАТЬ 2 : Ссылка Dropbox только для чтения на файл структуры NBT
Прогулка проходит в моем видео на YouTube , но вот шаги:
\structures
папку, созданную в текущем сохранении мира./give @p structure_block
и/tp @p -12, 56, -22
прыгните в нужное место, чтобы начать.источник
shortest answer in each language wins
и это самый короткий ответ в Minecraft: у P есть дополнительные +15sh + ffmpeg, 52 байта
Ffmpeg считается как esolang? : D
К сожалению, pix_fmt требуется, поскольку ffmpeg по умолчанию равен yuv420p. Это не соответствует требованию «должна иметь равную вероятность каждого возможного цвета пикселя». Удобно,
cif
это ярлык для довольно большого размера видео, который использует меньше места, чем «40x40».Неудивительно, что оптимизация этого gif с gifsicle абсолютно ничего не сделала. Это 4MiB.
источник
C на POSIX,
98969592 байта-3 благодаря Tas
Он выбирает между 16 цветами (темно-серый, красный, зеленый, синий, оранжевый, голубой, фиолетовый, светло-серый, черный, розовый, голубой, желтый, светло-голубой, пурпурный, белый) и печатает их непосредственно на терминал.
Обратите внимание, что если ваш графический процессор слишком медленный, может показаться, что он обновляет весь экран одновременно. Это на самом деле идет пиксель за пикселем, но С быстро.
Альтернативное решение, которое делает цвета более четкими:
Доказательство того, что оно идет попиксельно (скриншот из альтернативной программы):
Ничего себе, это выглядит почти 3-мерным ...
источник
;
компиляция правильно, но, кажется, отлично работает, кроме этого! B-)while
наfor
.#define r rand()
а затем использоватьr%40, r%40, r%2, r%8
JS + HTML
162 + 32 (194)124 + 13 (137) байтовСпасибо Люку и другим комментаторам за то, что они спасли мне много байтов.
источник
<canvas id=c>
должно быть достаточно, так как я думаю, что размер по умолчанию дляcanvas
-element равен300 x 150 px
и поэтому превышает ваш «размер области просмотра»99 x 99 px
. Во всяком случае, хорошее решение.2d
. (Не уверен, как это отформатировать, но если «2d» является литералом шаблона, ему не нужны круглые скобки.) (Удаление моих предыдущих предложений.)with
утверждение, чтобы избавиться от всех случаевb.
:r=n=>n*Math.random()|0 setInterval("with(c.getContext`2d`)fillStyle='#'+r(2**24).toString(16),fillRect(r(99),r(99),1,1)")
MATL, 28 байт
Попробуйте это в MATL Online . Я добавил полсекунды pause (
.5Y.
) для этой версии.объяснение
источник
TI-BASIC (только 84 + C (S) E),
3735 байтИз-за аппаратных ограничений это может привести к сбою, поскольку каждый раз, когда программа вкладывается в программу в TI-BASIC , 15 КБ ОЗУ выделяется для «сохранения закладки» в родительской программе. Это нормально работает на «теоретическом» калькуляторе с бесконечной оперативной памятью, но если мы хотим, чтобы он работал бесконечно на реальном калькуляторе, мы можем просто обернуть его в
While 1
цикл для дополнительных 2 байтов:Калькуляторы семейства TI-83 с цветными экранами (TI 84 + CE и CSE) поддерживают 15 цветов. У них есть цветовые коды до
10
конца24
. Это циклически перебирает все пиксели в5!
квадрате 120 на 120 ( ) и назначает каждому случайный цвет.Результат:
источник
5!
если бы я хотел 120 пикселей.For(
1 байт,Pxl-On(
1 байт,randInt(
2 байта и т. Д.MATLAB, 56 байт
Вывод выглядит как на картинке ниже. Одновременно меняется один «пиксель», и меняется только один из цветов RGB.
Почему? Цвета в MATLAB представлены в виде 3D-матрицы, один слой для R, G и B. Приведенный выше код изменяет только один из слоев на одну итерацию. Все пиксели и все слои можно изменить, поэтому, если вы немного подождете, все цвета одинаково возможны во всех положениях.
Добавьте
pause(t)
внутри цикла, чтобы сделать паузуt
секунд между каждым изображением.Вы должны остановить это с помощью Ctrl+ C.
источник
where
Your program must have an equal chance of picking all colors/points each iteration
. Ваша программа выполняет это?Bash + coreutils,
5956 байт\e[48;5;COLORm
это побег безопасности для цвета фона.Каждый «пиксель» может каждый раз находиться в диапазоне [0..16777215].
источник
jot
:for((;;)){ printf "\e[48;5;`jot -r 1 0 16777215`m ";}
Javascript + HTML 118 + 13 (131 байт)
#7
это не является допустимым цветом, или#777
и#777777
того же цвета (2x шансы)источник
Excel VBA,
13110285 байтАнонимная функция непосредственного окна VBE, которая использует вспомогательную функцию (см. Ниже) для вывода массива случайно окрашенных ячеек в диапазон
A1:AN40
объекта activesheet.Примечание. Это решение ограничено 32-разрядной установкой MS Excel (и, следовательно, Office в целом), поскольку
8^8
не будет компилироваться в 64-разрядных версиях VBA.Пример вывода
Предыдущая версия
Вспомогательная функция
Выводит случайное целое число в диапазоне [0,255]
источник
C #,
369288287 байтСохранено 88 байтов благодаря @CodyGray.
Полная программа, которая получает указатель на экран и его размер, а затем начинает случайное рисование пикселей на нем. Обратите внимание, что это может привести к остановке видеокарты при запуске. Также, если экран или какой-либо элемент управления решит перекрасить в любое время, пиксели будут потеряны и должны быть перерисованы.
Примечание: во время работы держите фокус на окне, чтобы убить его, вы должны либо нажать Alt + F4, либо нажать кнопку закрытия, и делать это, когда вы не видите экран, довольно сложно.
Я не мог записать эту работу с ScreenToGif, так как он заставлял перекрашивать, чтобы пиксели были удалены. Тем не менее, вот снимок экрана, показывающий, что он работает примерно через 10-15 секунд, и я думаю, что мой компьютер остановился! Разрыв в верхнем правом углу - то, где экран заставил перекрасить, как я сделал скриншот.
Полная / Отформатированная версия:
Версия для
308227226 байт, которая рисует только в области 0-40:Пример вывода для этого:
источник
Graphics.FromHwnd((IntPtr)0)
также будет работать, и будет намного короче, чем P / InvokingGetDC
. Конечно, ваш код по-прежнему похож на код Tas , а ресурсы теряют как сумасшедшие, поэтому он останавливает вашу машину после короткого времени работы.GetDC
не возвращает,IntPtr.Zero
так что отправка, чтоFromHdc
не будет работать.FromHdc
, я предлагаю вам позвонитьFromHwnd
. Обратите внимание, что когда вы вызываетеGetDC
DC для дескриптора окна, вы передаете NULL-указатель (0) в качестве дескриптора окна.Консоль C #,
233220189188 байтИспользует "все" (окна) 16 цветов консоли.
Спасибо за "особенность", чтобы иметь возможность псевдоним классов в C # через
using
директиву.Редактировать # 1
Удалены некоторые пробелы.
Удалены нули из Random.Next ()
Пошел в
namespace system{...}
Редактировать № 2
Минимальный размер сетки 40х40
Один байт, объявив Random для заголовка цикла
Удалено
public
из метода MainРедактировать № 3
Оказывается,
using C=Console;
это не самое лучшее , что есть.using static Console
очень похоже на способ VB.Net "импортировать" классыЯ сдаюсь: TheLethalCoder сделал это возможным
Оригинальный код для адаптации размера окна в 207 байт:
Исходное изображение:
источник
namespace System
должен сохранить байты,r.Next
может удалить ноль, я считаю, удалитьnamespace System{}
корочеusing System;
. Хотите объяснить?Main
. Необоснованные воспоминания самые лучшие!Обработка, 90 байт
расширен и прокомментирован:
В идеале я мог бы использовать индекс пикселей вместо x, y местоположения, но
pixels[]
доступ для обработки требуетloadPixels()
предварительного иupdatePixels()
последующего использования, а следовательно, и использованияset()
.point()
будет работать, но имеет больше символов и требуетstroke()
. Случайная область на самом деле составляет 99x99, чтобы сэкономить несколько байтов (вместо 100x100), но это должно охватывать 40x40 с каждым пикселем в такой области, которая должна быть заменена.Perlin noise () используется вместо random (), чтобы сделать его более псевдослучайным и короче байта. Значение вычисляется один раз, но используется дважды: один раз для случайной позиции, затем снова для цвета.
Цвет на самом деле
ARGB
(от 00000000 до FFFFFFFF) (не RGB) (бонусные баллы?: D).источник
set()
- очень аккуратный трюк и может быть очень полезен дляPython, 133 байта
Я не совсем уверен, соответствует ли это спецификациям, потому что это на холсте в области 40x40.
Попробуйте онлайн - версия без
eval
, которая не работает в Брелокисточник
colormode
-1.0
нет255
.colormode
и у него не было бы ничего: /dot(1,R(0,255),R(0,255),R(0,255))
не работает?dot
предназначен для принятия(width,*color)
. Это не Питон: рJavaScript с использованием Canvas
340 316324 байтаполная версия
источник
Обработка, 112 байт
Я не могу гарантировать, что каждый пиксель заменяется каждые 3 минуты, но, глядя на это, похоже, он делает это. По крайней мере вероятность того, что из-за отсутствия пикселя из общего числа 1600 обновляется случайное значение 30x в секунду, что составляет 5400 обновлений за 3 минуты, делает маловероятным, что он будет пропущен.
Ungolfed:
Программа действительно проста. Откройте окно с разрешением 40x40 пикселей, и каждый кадр (по умолчанию 30 в секунду) получает случайный цвет и рисует точку со случайной координатой между 0 и параметром. 40 для координат пикселей, 255 для цветов.
источник
size(40,40);
и изменитьpoint
наpoint(random(99),random(99));
? (или 100 вместо, если 99 не работает)size
функция ДОЛЖНА быть первой строкой кода в функции установки (причины сложны), поэтому я не могу обойти это. Я могу изменить все вхождения от 40 до 99, я просто не сделал, так как это не спасло меня. В основном я использовал минимальный размер, чтобы увеличить вероятность того, что каждый пиксель будет обновлен за 3 минутыsetup()
функции на последней версии Processing на моем компьютере работает нормально без ошибок.HTML + SVG + PHP, 245 байт
расширенный
Пример для вывода без метатега и в большей версии
источник
C ++ в Windows, 125 байт
Новые строки необходимы и включены в число байтов.
Циклы навсегда, случайным образом выбирает позицию между 0 и 255 (включительно) для значений строк и столбцов, назначает случайные значения R, G, B между 0-255 (включительно)
источник
#include
s. (И да, для Windows существуют компиляторы, отличные от Visual Studio C.)Python 3.6 + Tkinter, 281 байт
источник
tkinter
и в стандартной библиотеке, вам не нужно включать ее в заголовокc.create_image((20,20),i) File "C:\Python36\lib\tkinter\__init__.py", line 2483, in create_image return self._create('image', args, kw) File "C:\Python36\lib\tkinter\__init__.py", line 2474, in _create *(args + self._options(cnf, kw)))) _tkinter.TclError: unknown option "pyimage1"
JavaScript (ES7) + HTML с использованием SVG, 129 + 10 = 139 байт
Версия SVG, в значительной степени вдохновленная подходом @ Octopus
<canvas>
.JS
HTML
Так как фрагмент стека любит разбивать скрипт, анализируя
<rect>
тег, вот CodePen .источник
6502 сборки, 92 байта
Выход:
Объяснение:
источник
LOGO, 71 байт
Единственный язык, который я знаю, не эзотерический / специально разработанный для игры в гольф и имеющий
forever
функцию. Любая идея соmap
стороны?источник
shortC ,
6656 байт-10 байтов благодаря доктору Рэнду. :П
Нет ссылки TIO, потому что вы, очевидно, не можете печатать на терминале, который требуется онлайн.
источник
Perl (on * nix), 69 байт
В
\x1b
s прописные буквы , побег.Полагается на
stty
команду и хорошо работает на OS X.Подобно другим подходам, но мне понравилось сочетание всех параметров в одном вызове,
printf
поэтому я поделился. Убивает мой терминал.В два раза больше пикселей, 83 байта
Этот подход использует блок Юникода
▄
и случайный цвет переднего плана и фона, который дает более квадратный пиксель. Убивает мой терминал тоже, но выглядит круче.источник
\e
. И на StackExchange это может быть представлено␛
.-e
! Мне также нужно увеличить количество байтов с Unicode. К сожалению! Спасибо за напоминание!Баш, 104 байта
В
\e
s прописные буквы , побег.Это в значительной степени переводы моего представления на Perl, но с использованием синтаксиса стиля bash fork бомба! Боюсь, не так умно, как другая запись bash, которая пишет прямо на дисплей.
Больше пикселей, 130 байт
Как и в моем Perl-ответе, здесь используется символ Unicode для переднего плана и цвет фона каждого пикселя.
источник
"\e[48;5;%im"
. Зачем нужны 48 и 5?\e[48;2;RRR;GGG;BBBm
но очень немногие эмуляторы терминала поддерживают это ... :(38;5
обозначает передний план и48;5
фон deonates. misc.flogisoft.com/bash/tip_colors_and_formattingМашинный язык x86 (реальный режим) для IBM PC,
2019 байтовДля этого требуется процессор с
rdrand
инструкцией и адаптер VGA (реальный или эмулированный). Вышеприведенное можно скопировать в загрузочный блок или файл MS-DOS * .COM.Чтобы попробовать это, скомпилируйте следующее и сохраните вывод в файл наподобие
floppy.img
и загрузите образ на виртуальной машине.источник
Супер Чип (48) ?, 12 байт
Я не уверен в точном названии, но мне пришлось использовать это вместо обычного Chip-8 из-за ограничения 40x40 пикселей.
источник
QBIC , 34 байта
К сожалению, QBIC не устанавливает
SCREEN
режим по умолчанию, поэтому он потребляет несколько байтов.PSET
является недопустимой командой в графическом контексте по умолчанию QBIC.объяснение
Образец вывода
@Anonymous обнаружил ошибку в
rnd()
функции QBIC . Исправление, которое дает вывод ниже. Спасибо!источник
FUNCTION getRandomNumber! (Bottom!, Top!) ↵ RANDOMIZE TIMER 'this sets the random number generator ↵ IF Bottom > Top THEN ... END IF ↵ getRandomNumber = INT((Top - Bottom + 1) * RND + Bottom) ↵ END FUNCTION
случайных чисел : ваши случайные числа - это просто хеши текущего времени.6502 сборки, 582 байта
Вот это было весело. Делает более или менее то же самое, что и мое решение Applesoft BASIC.
источник
Powershell,
128,126,124 байта-2 байта спасибо @Veskah
Выход:
Вывод кода VS:
источник