Генерация снежинки Коха
Снежинка Коха - это треугольник, для n
которого в середине каждой стороны добавляется еще одна равносторонняя точка: http://en.wikipedia.org/wiki/Koch_snowflake#Properties
Мы уже имели kolmogrov-сложность Koch Snowflake вызов для n=4
. Новая задача - нарисовать снежинку Коха с любым n
между 1
и 10
.
правила
Снежинки не могут быть жестко запрограммированы в программе или в файлах - они должны быть созданы вашей программой.
Ваша программа должна поддерживать все размеры
n
от 1 до 10.Количество сторон должно быть введено пользователем через стандартный ввод.
Вы должны распечатать графическое изображение снежинки на экране.
Образцы снежинок Коха с n
равными 1, 2, 3 и 4 (зеленые линии только для ясности, не воспроизводите их):
В случае тай-брейка победит программа с наибольшим количеством голосов (поп-конкурс).
источник
n=7
, вы не можете видеть недавно добавленные треугольники в снежинке на экране компьютера. Все ли "лучшие усилия" здесь хорошо? Существует ли минимальное разрешение для пиксельных решений?Ответы:
Mathematica 72
п = 3
Спасибо за алефальфу.
источник
AnglePath
в Mathematica 10.1.Graphics@Line@AnglePath[Nest[Join@@({-1,2,-1,#}&/@#)&,{2,2,2},Input[]-1]Pi/3]
ListLinePlot@AnglePath[Nest[Join@@({#,1,4,1}&/@#)&,{4,4,4},Input[]-1]π/3]
MATLAB,
119115В необычном повороте событий я обнаружил, что эта программа действительно работала лучше, когда играл в нее. Во-первых, это стало намного быстрее благодаря векторизации. Теперь он отображает полезную подсказку,
~n:~
напоминающую пользователю, какое количество вводить!Новые строки не являются частью программы.
n = 9:
o
произвольная строка, равная по[0 2 4 0]
модулю 6. e iπ / 3, возведенное в эти степени, дает вершины равностороннего треугольника в комплексной плоскости. Первыйkron
используется для создания копии списка точек, каждый из которых дублируется 4 раза.~~o
это удобный способ получить вектор из 4 единиц. Во-вторых,diff(P)
находит вектор между каждой парой последовательных точек. Кратные этого вектора (0, 1/3, (1 + e -iπ / 3 ) / 3 и 2/3) добавляются к каждой из старых точек.источник
T-SQL: 686 (без форматирования)
Для SQL Server 2012+.
Несмотря на то, что это никогда не будет претендентом, мне пришлось посмотреть, смогу ли я сделать это в T-SQL. Ушли на подход, начиная с трех начальных ребер, затем повторяя через каждое ребро и заменяя их четырьмя ребрами для каждого уровня. Наконец, объединяя все это в одну геометрию для уровня, указанного для @i
источник
ЛОГОТИП: 95
Определяет функцию
k
с одним параметром уровня.редактировать
В этом онлайн-редакторе http://www.calormen.com/jslogo/ вы можете добавить
k readword
подсказку для ввода, но по какой-то причине эта команда не поддерживает стандартную аббревиатуруrw
.Решение из 102 символов ниже работает в USBLogo со стандартным вводом, как указано в вопросе. Однако код нуждался в небольших изменениях, поскольку в UCBLogo есть какой-то странный парсер. Это требует
to
иend
должно быть в отдельных строках и пространстве, прежде чем:
потребуется, но с другой стороны,:
являются необязательными.источник
BBC BASIC, 179
REV 1
Как и прежде, но в черно-белом, в версиях без гольфа (но обтекаемых) и в гольфе. Не победитель, несмотря на то, что выполнение этого способа избавляет от необходимости специальной обработки для n = 1.
REV 0
Согласно ответу ОП на @xnor, заполненные снежинки в порядке. Этот ответ был вдохновлен комментарием xnor. Цвета просто для удовольствия и показать, как они построены. Возьмите треугольник (в данном случае пурпурный) и проложите участок с 6 треугольниками на 1/3 от основания.
источник
Математика - 177
Бонусный клип с изменением угла наклона средней части
источник
Питон 3 - 139
Использует графическую библиотеку черепах.
источник
"G">j
,"Q"<j
и использоватьfd(9/b)
для сохранения 3 байта? Кроме того, вы можете избежатьif
умножения операторов, например,("G">j)
на аргумент,9/b
и поместить их все в одну строку позадиfor
. Ой! Тогда вы даже можете комбинироватьrt
иlt
использовать120*(...)-60*(...)
Python 3, 117 байт
Метод:
n
являетсяinput - 1
0000
мы объединяем каждый символ со101
n
временем итеративно с трюком eval (спасибо @xnor за это).1
или0
), а затем перемещаемся вперед на длину (99/3^n
), которая гарантирует одинаковый размер для всехn
.0
в строке будет бесполезен, но он просто перерисовывает ту же строку первым0
.Пример вывода для
input = 3
:источник
Р:
240175Потому что я пытаюсь разобраться с R, вот другая версия. Вероятно, есть намного лучшие способы сделать это, и я счастлив получать указатели. То, что я сделал, кажется очень запутанным.
источник
Мудрый, ты, гвэйв ...
Я знал, что хочу попробовать реализовать это в Befunge-98 с помощью TURT, но я не мог понять, как это сделать, и сидел на нем несколько месяцев. Теперь, совсем недавно, я придумал, как это сделать, не прибегая к самомодификации! И так...
Befunge-98 с отпечатком пальца TURT, 103
Давайте сначала разберемся с некоторыми деталями реализации:
I
«печатать» изображение в файл SVG. Если вы запустите это в CCBI без аргумента---turt-line=PATH
команды, по умолчанию он будет выглядеть как файл с именем CCBI_TURT.svg. Это самый близкий к мне «вывести графическое изображение снежинки на экран». с доступными интерпретаторами Funge, которые я смог найти. Возможно, когда-нибудь появится лучший переводчик с графическим дисплеем для черепахи, но сейчас ...По сути, это работает, используя стек как своего рода временную L-систему и расширяя ее на лету. На каждом проходе, если верхний номер в стеке:
f
в последней строке);n-1, -1, n-1, 0, n-1, -1, n-1
.Поскольку
n = 10
этот процесс занимает очень много времени (несколько минут в моей системе), и результирующий SVG имеет размер ~ 10 МБ и не виден при просмотре в браузере, потому что вы не можете отрегулировать размер кисти с помощью TURT. IrfanView работает нормально, если у вас есть нужные плагины. Я не очень знаком с SVG, поэтому я не знаю, какой предпочтительный метод для просмотра этих файлов (особенно, когда они действительно большие).Эй, по крайней мере, это работает - что, учитывая, что это Befunge, само по себе является чем-то, за что можно быть благодарным.
источник
Python 2, 127 байт
источник