Джо живет на Багамах. Это зима. Его дети разочарованы тем, что снега нет. Джо должен сделать снег для своих детей. К счастью, у него есть 3-й принтер. Он планирует сделать снежинки из этого. К сожалению, он понятия не имеет, как будет выглядеть снежинка. На самом деле, он никогда не видел снежинки! Давайте поможем ему, создав программу, которая автоматически генерирует для него 2-мерное изображение снежинки.
вход
Диаметр изображения (в пикселях), процент изображения, которое на самом деле является снежинкой.
Выход
Изображение снежинки с необходимым диаметром. Он может быть сохранен в файл или отображен для пользователя.
Характеристики
Создайте клин с углом 30 градусов. Создайте броуновское дерево с начальным семенем в точке клина. Отразите клин вокруг центра изображения 12 раз, чтобы создать остальную часть изображения. Снежинка имеет цвет Белый. Фон имеет цвет Черный.
счет
В связи с тем, что существуют разные способы генерирования броуновского дерева, количество баллов составляет 10 * - количество очков в гольфе.
Оценка гольфа определяется как количество байтов в программе со следующими бонусами:
-20% Можно произвольно указать симметрию снежинки.
-50% Можно указать форму снежинки. (Имея возможность указать соотношение длин сторон клина.)
Самый высокий балл выигрывает.
Вот изображение, которое будет иметь форму клина с соотношением примерно 2:
Табло:
Мартин Буттнер: 10 * 14 - 409 = -269
Ними: 10 * 1 - 733 * .5 = -356,5
Оптимизатор: 10 * 5 - 648 = -598
Победителем стал Мартин с результатом -269!
источник
Ответы:
Mathematica, 409 байтов
Ungolfed:
Это предполагает ввод формы,
{n,p}
гдеn
находится размер изображения в пикселях иp
процентное отношение изображения, которое будет покрыто снежинкой.Генерация снежинки с заданными параметрами занимает примерно полминуты. Вы можете ускорить его, изменив значение
m
с999
на99
, но тогда результат выглядит немного разреженным. Аналогично, вы можете повысить качество, используя большие числа, но тогда это займет очень много времени.Я формирую броуновское дерево на целочисленной решетке, размещаю новые частицы
{999, 0}
и перемещаю их случайным образом влево и вверх или вниз (не вправо), пока они не коснутся существующих частиц. Я также ограничиваю движение клином между 0 и 30 градусами. Наконец, я отражаю этот клин на оси X и показываю его с 5 поворотами.Вот некоторые результаты (нажмите для увеличения):
А вот две анимации роста броуновского дерева (10 частиц на клин на кадр):
источник
JavaScript, ES6,
799 740 695 658648Я только считаю два тега холста и функцию
f
из фрагмента ниже как часть количества байтов. Остальная часть материала для живого демоЧтобы увидеть его в действии, просто запустите приведенный ниже фрагмент в последнем Firefox, указав размер и соотношение через поля ввода
Обратите внимание, что вам придется скрыть результат, а затем показать снова перед последовательной снежинкой
Вот несколько примеров рендеров с разными размерами и процентами. Лучший из них называется SkullFlake (первый в списке). Нажмите на изображения, чтобы увидеть их в полном разрешении.
Большая помощь и вклад от Мартина и githubphagocyte.
источник
Haskell,
781733 байтаВ программе предусмотрена опция «указать соотношение длин сторон клина», поэтому вы должны вызывать ее с тремя аргументами командной строки:
Аргумент # 1 - это размер изображения, # 2 -% пикселей в клине и # 3 - длина (в%) более короткой стороны клина. Изображение сохраняется в файле с именем «o.png».
150-50-40:
Моя программа производит снежинки с обрезанными шипами, потому что новые пиксели начинаются на средней оси клина (зеленая точка, см. Ниже) и имеют тенденцию оставаться там, потому что они движутся одинаково случайно влево, вверх или вниз. Поскольку пиксели за пределами клина отбрасываются, на границе клина (зеленая стрелка) появляются прямые линии. Я был слишком ленив, чтобы попробовать другие пути для пикселей.
150-50-40:
Когда клин достаточно большой (3-й аргумент 100), шипы на средней оси могут расти, и тогда их будет 12.
150-40-100:
Несколько пикселей имеют круглую форму (слева: 150-5-20; справа 150-20-90).
Программа:
источник
*-*-100
изображении обе его стороны достигают левой границы изображения (положение клина см. На втором изображении). Примерно на половине сторон расположены пиксели, остальные половины пусты.code style
. Я отредактировал свой пост и установил вкладки, но они все еще отображаются в виде пробелов. Кто-нибудь знает как это исправить?#
ссылка, по которой можно щелкнуть. Вы можете вставить свой код с вкладками туда и связать его.code style
путем отступа в каждой строке 4 пробела.Обработка 2 - 575 символов
Принимает файл f, первая строка которого представляет собой размер изображения, а вторая - радиус чешуек. Каждый раз, когда ставится новая точка, она вращается вокруг центра 12 раз. Это создает эффект, очень похожий на вращающийся клин, но не совсем такой же.
Вы можете получить обработку здесь
источник
color(255)
может статьcolor(-1)
для сохранения одного байта