Это испытание в честь безвкусных рождественских огней в доме моих в законах.
Задача состоит в том, чтобы создать графический вывод, показывающий оформление в «реальном времени».
Видео (gif или другой формат) будет иметь n-m-m вертикальные и горизонтальные «огни». 5 <= m, n <= 40 . Размер и разрешение кадра могут варьироваться в зависимости от n и m , но должны быть не менее 50x50 пикселей для n, m = 5 (с векторной графикой все в порядке). Картинка с n=6
и m=5
будет выглядеть примерно так:
Украшение:
Цвета:
Все огни будут иметь один из следующих 6 RGB-цветов {255,0,0}
, {0,255,0}
, {0,0,255}
, {255,255,0}
, {0,255,255}
и {255,0,255}
.
Анимация:
n
иm
будут приняты в качестве входных данных в любом разумном формате и в порядке, который вам нравится- Изображение будет меняться каждый
dt = 25 ms
. Отклонения в порядке, если это связано с «внешними факторами», такими как ограничение в переводчике, медленный компьютер и т. Д.- Если невозможно установить шаг времени вручную, тогда шаг по умолчанию принят.
- Все огни будут красными (
{255,0,0}
) вt=0
. - Всегда есть вероятность 5%, что первый свет (вверху слева) изменит цвет. Все цвета (кроме цвета, который он имеет в настоящее время) должны быть одинаково вероятными.
Каждый источник света (кроме первого) получит цвет источника света слева. Если источник света находится в крайнем левом углу, он получит цвет источника света в крайнем правом ряду выше. Огни пронумерованы, как показано ниже. Светлый номер
k
получит цвет светового числаk-1
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Вывод теоретически должен работать вечно (если только у вашего языка / интерпретатора нет каких-либо ограничений, препятствующих этому).
- Пожалуйста, предоставьте образец не менее 5 секунд, желательно больше в ответе (это поощрение, а не требование). (Ссылка на TIO или аналогичный, конечно, тоже нормально: D)
- Рамки, оси, линии сетки и т. Д. Принимаются.
6-по-5
15-по-30
r,g,y,b,
и т.д. короче на нескольких языках.drawnow
когда я реализовал это в MATLAB, так как результат был слишком медленным. Я думаю, что ответ должен быть следующим: если это проектный выбор, когда интерпретатор имеет фиксированное минимальное разрешение по времени> = 25 мс, тогда все в порядке. Если это из-за плохой / простой реализации, онлайн-переводчика, который перегружен / медленен и т. Д., То это не в порядке.Ответы:
JavaScript / CSS / HTML, 436 байт
источник
Mathematica,
186161158 байтобъяснение
Создайте начальную доску в 1D, заполненную красным. Храните это в
b
.Пауза для 25 мс
Если (псевдо) случайное действительное число меньше 0,06, замените первый элемент
b
на длину3
списка случайной выборки{1,1,0,0}
. (т.е. любой из{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1}
)Циклический поворот вправо.
Измените значение первой ячейки на значение второй ячейки (то есть отмените смещение первой ячейки)
Перегородка
b
в (высота).Сделайте это в динамическом (постоянно обновляемом) изображении, ширина которого составляет 50 (ширина)
Версия сотового автомата (186 байт)
Пример вывода (входы: 16, 10)
источник
MATLAB,
255210 байтЭто мой первый гольф, так что, вероятно, будут сделаны улучшения.
Спасибо Луису за помощь в экономии 45 байт :)
Объяснение:
К сожалению, это не сохраняет анимацию, она просто запускает ее. Для того, чтобы сохранить его, мне либо нужна программа захвата экрана, либо переписать все это используя
imwrite
. Вместо этого я предоставлю две фотографии, показывающие разное времяn=15,m=30
.источник
dec2bin([4 2 1 6 3 5])-48
вместо[1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1]
..95
вместо0.95
. Вы также можете заменить.95
на.94
и избавиться от негоk=k(k~=r);
(потому что 0,94 + 0,06 / 6 = 0,95; см. Мой ответ для более подробного объяснения)c=dec2bin(1:6)-48
, поскольку порядок не имеет значенияMATL ,
5247 байтВвод является массивом
[ncols nrows]
. На выходе получается фигура с векторной графикой.Пример прогона для 15 столбцов × 10 строк:
Как это работает
Время паузы было установлено равным 15 мс (для того же количества байтов, что и 25 мс), чтобы попытаться компенсировать время обработки.
Чтобы сохранить цвет с вероятностью 19/20 (измените его на 1/20), действуем следующим образом:
Таким образом, вероятность сохранения цвета составляет 47/50 + 3 / (50 * 6) = 19/20.
источник
MATLAB,
153147 байтПримечание . Показанный GIF имеет более старую версию, которая хороша тем, что не отображает оси (см. Историю редактирования), но была очень медленной из-за реализации
imshow
. Для текущей версии ответ MATLAB Челси Г. или ответ MATL Луиса Мендо показывают тот же результат, что и моя текущая версия.Размер принимается как
2x1
вектор, поэтому назовите его, например:Этот ответ использует тонкости языка MATLAB. Например,
x
инициализируется какm x n
нулевая матрица, но так называемое линейное индексирование допускает круговое смещение с одномерными индексами. Слабая типизация допускает умножение с помощью логики, что позволяетif
избегать операторов (трюк, который я активно использовал еще во времена программирования на калькуляторе TI-84). Даже если цветовая карта читается построчно, MATLAB рассматривает ее как нормальную матрицу, поэтомуeye(3)
ее можно использовать для создания красного, зеленого и синего1-eye(3)
цветов , а также трех других цветов. Простоеreshape
возвращает линейный вектор обратно в матричную форму, которая сопоставляется с желаемыми цветами с помощьюind2rgb
. В заключение,imagesc
, показывает изображение, отображаемое с размером фигуры по умолчанию (достаточно большим для требований). По счастливой случайностиimagesc
значения не выходят за пределы указанного диапазона, поэтомуeye
могут использоваться для инициализации матрицы, поскольку оба1
и0
считаются красными.источник
Python 3.6 (316 байт)
Использование цветовых кодов ANSI и новых форматированных строковых литералов Python 3.6 ( PEP 489 ) (
f"{X}"
магия).В остальном это просто довольно простой, но запутанный питон. Ширина и Высота передаются в качестве аргументов в командной строке.
источник
w,h=map(int,sys.argv[1:])
распаковку работ с любой итерацией (нужного размера), обращение к списку излишне."\x1b["
=>"\33["
(используя восьмеричные вместо шестнадцатеричных escape-кодов), затем сокращение X и строки формата фактически делают его длиннее (и, избавившись от него,f""
вы получаете совместимость с любым python3). (это уменьшит его до 301 байта).{x}
один раз ... но вы все равно выиграете, избавившись отX
.