Эта задача вдохновлена этой фантастической анимированной диаграммой (спасибо flawr за публикацию в чате).
Получив входные данные n
, нарисуйте все его простые факторы в виде вложенных полигонов точек, как указано.
Например, учитывая число 357 = 17x7x3
, вы размещаете 3 точки в треугольнике, 7 версий этих треугольников в семиугольнике и 17 версий этих семиугольников в 17-угольном. Короче говоря, вложенные многоугольники идут от наибольшего простого фактора снаружи к наименьшему внутри. Для 357
, ваш ответ должен выглядеть немного , как это (с или без цвета):
Каждый многоугольник каждого простого числа >= 3
не должен вращаться вокруг диаграммы.
Единственным исключением является простое число 2
, особенно для нечетных степеней 2
. Как вы можете видеть в приведенном 376 = 47x2x2x2
ниже примере , 8
s вращаются и представляют собой не одну строку 2
s, а вертикальные стеки для 4
s в квадрате. Даже силы 2
, расположенные в квадратах, не нужно вращать таким образом.
На самом деле, 448 = 7x2x2x2x2x2x2
имеет диаграмму, которая выглядит как семиугольник 64
s, и 64
организована в квадрат квадратов квадратов, но без вращения.
Еще два примера есть 440 = 11x5x2x2x2
и 432 = 3x3x3x2x2x2x2
. Мы видим, что 440
с нечетной степенью 2 повернул 8
s, но 432
с четной степенью 2
не повернул 16
s.
И, наконец, вот минимальный пример, 10 = 5x2
без цвета, который я смоделировал с Python и его turtle
модулем.
Соревнование
- Учитывая вход,
n
где1 <= n <= 10000
, выведите изображение его вложенных фактор-полигонов. - Правила таковы:
- Изображение состоит из вложенных многоугольников точек, от многоугольника с (наибольшим основным фактором) сторон снаружи до наименьшего простого множителя внутри.
- Для множителя 2 степени 2 должны складываться как линия, затем квадраты, затем линия квадратов и так далее. Даже степени 2 не должны вращаться. Нечетные степени 2 должны вращаться вокруг их соответствующих многоугольников, и они должны быть сложены вертикально перед вращением.
- Вы можете ориентировать изображение так, как вам нравится (хотя я предпочитаю вверх), но каждый вложенный многоугольник должен быть направлен в том же направлении, что и любой другой многоугольник, за исключением нечетных степеней 2.
- У вас есть два варианта размера изображения и размера точки:
- Размер изображения статичен, а размер точек уменьшается по мере
n
увеличения (как в анимации). - Размер точки является статическим, а размер изображения увеличивается по мере
n
увеличения.
- Размер изображения статичен, а размер точек уменьшается по мере
- Первые три слоя многоугольников должны отличаться от соседних многоугольников (то есть не касаться), но, учитывая размер изображений вокруг и вокруг
n=10000
, все в порядке, если слои после начинают касаться. Я бы предпочел, если бы они этого не сделали, но это может быть неизбежно вписано в изображение, которое можно загрузить в Stack Exchange. - Цвет не является обязательным.
- Форма точек зависит от вас. Если квадраты лучше для вашего языка, используйте их.
- Никаких бонусов, но я бы хотел, чтобы кто-то оживил и раскрасил диаграммы, как в оригинальном посте.
Спасибо Конору О'Брайену, ИстерлиИрку, Мартину Эндеру, Критиси Литосу, Мего, DJ McMayhem и El'endia Starman за помощь в написании этого вопроса.
Это код гольф, поэтому самый короткий код выигрывает. Удачи и хорошего гольфа!
источник
n = n //= i
должно бытьn//= i
?n = n // i
. Я пойду исправлю это и добавлю к объяснению, пока я на нем.