Классные вещи
Следующая розетка может помочь вычислить числа по модулю 7.
Чтобы сделать это, вы должны начать с 0 и повернуть по часовой стрелке на число шагов, заданных первой цифрой. Затем для каждой последовательной цифры следуйте за стрелкой, а затем поверните по часовой стрелке количество шагов, заданных этой цифрой.
Вот как вы поступите на номер 294:
- Вы начинаете с круга 0.
- Вы поворачиваете по часовой стрелке на число шагов, заданных первой цифрой (то есть 2, в итоге вы получите 2).
- Вы следуете за стрелкой там (вы в конечном итоге в 6).
- Вы поворачиваете по часовой стрелке на число шагов, заданных второй цифрой (то есть 9, в итоге вы получаете 1).
- Вы следуете за стрелкой там (вы в конечном итоге на 3).
- Вы поворачиваете по часовой стрелке на число шагов, заданных третьим числом (которое равно 4, в результате вы получите 0).
- 294 mod 7 = 0 (то есть 294 кратно 7).
( Видео объяснение, если вы все еще не получили его )
Цель
Выясните, как это работает (я знаю, но я не скажу вам).
Создайте программу, которая принимает число n
в параметре и генерирует розетку для mod n
.
Розетка может отображаться любым способом, который вы хотите (ASCII, генерировать PNG, генерировать SVG, ...) до тех пор, пока он может использоваться ребенком 8 лет ( поэтому нет списка правил, я хочу картинку )!
Вы можете использовать прямые линии, даже если это немного менее понятно, чем то, что я сделал для примера, но вы должны четко показать числа, которые указывают на себя какой-то стрелой, кусающей хвост.
Контрольные примеры
(Я даю ссылки между числами, не стесняйтесь редактировать мой вопрос, как только ваша программа успешно сгенерирует их)
мод 2:
0 -> 0
1 -> 0
мод 3:
0 -> 0
1 -> 1
2 -> 2
мод 4:
0 -> 0
1 -> 2
2 -> 0
3 -> 2
мод 5:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
мод 6:
0 -> 0
1 -> 4
2 -> 2
3 -> 0
4 -> 4
5 -> 2
мод 7:
0 -> 0
1 -> 3
2 -> 6
3 -> 2
4 -> 5
5 -> 1
6 -> 4
мод 8:
0 -> 0
1 -> 2
2 -> 4
3 -> 6
4 -> 0
5 -> 2
6 -> 4
7 -> 6
мод 9:
0 -> 0
1 -> 1
2 -> 2
3 -> 3
4 -> 4
5 -> 5
6 -> 6
7 -> 7
8 -> 8
мод 10:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
5 -> 0
6 -> 0
7 -> 0
8 -> 0
9 -> 0
правила
Это код-гольф , выигрывает самый короткий код в байтах.
Как обычно, лазейки и читы запрещены.
источник
Ответы:
Mathematica, 192 байта
Этот тип задач (нетривиальные математические вычисления вместе с высокоуровневым графическим выводом) - это то, для чего создана Mathematica!
Расширено и объяснено:
Строки 1 и 8 разграничивают безымянную функцию одного аргумента. Строки 3 и 7 разграничивают несколько команд, которые выводят графику.
Строки 2 хранят ввод как
d
; определяет двоичную функцию,t
дающую координаты точкиn/d
пути вокруг круга радиуса поr
часовой стрелке от вершины (в духе этого сайта я сохранил байт, округлив 2π до6.3
!); и определяет унарную функциюm
вычисляющую назначение стрелки, начиная с ее аргумента.Линия 4 отображает числа
0
наd–1
одинаковом расстоянии от круга радиуса 9 (точный радиус не имеет значения, выбранный для максимизации эстетики при условии подгонки в один байт).Линия 5 отображает прямые стрелки по часовой стрелке по окружности круга.
1/7
И6/7
оставить достаточно места , чтобы прочитать номера.Строка 6 отображает изогнутые стрелки от каждого числа до (в 10 раз больше по модулю
d
).BezierCurve
автоматически рисует кривую Безье, используя заданные контрольные точки. К счастью, использование источника в качестве единой внутренней контрольной точки дает приемлемый результат.Пример вывода (обратите внимание, что случаи 9, 10 и 11 тривиальны по-разному):
д = 7
д = 8
д = 9
д = 10
д = 11
д = 12
д = 13
д = 37
Этот последний вход был выбран потому, что 37 делит 10 ^ 3–1, и поэтому внутренние стрелки (не считая обязательной стрелки от 0 до 0) образуют множество треугольных циклов.
источник
Python 2, 294 байта
Распечатывает диаграмму в следующем формате:
Я не знаю, подходит ли этот формат, поэтому я пока оставлю этот ответ недействительным.Да, это действительно!Попробуйте это на repl.it!
источник
n
работало с цифрами -digit. Я не уверен, если задача требует, чтобы вы сделали это дляn>9
хотя.PHP + SVG, 500 байт
маленькая стрелка для связи между одинаковыми значениями
чтобы увидеть стрелки с одинаковыми значениями, я использую это значение цвета
rgba(255,0,0,0.3)
. это возможность сократить его.расширенный
выход для n = 45
320 байт работает с прямоугольником
расширенный
выход для n = 72
источник
Python 2,
540464431 байтНекоторым игрокам в гольф нравится использовать более короткие имена переменных, подстановку переменных, понимание списка и изменение всего на белый (кроме текста). Самым большим спасением было динамическое изменение предварительно вычисленных позиций (см.
L
).L
вычисляет положение кругов по расстоянию до начала координат для больших, содержащих числа, и внешних, которые указывают на самостоятельное наведение.Первый цикл рисует связи: 1-я линия - это круг вокруг, а 2-я линия - внутри, добавлен маленький круг, чтобы показать направление или самонаправление.
Второй цикл ставит большой круг и число.
Очевидно, это не так хорошо, как отвечает Mathematica, но все сделано с нуля.
источник
Математика,
124121 байтСоздает фигуру в виде графа с направленными ребрами. Теперь вывод графика происходит по той же схеме, за исключением против часовой стрелки. Я предпочитаю Грега Мартина решение намного больше, поскольку результат намного более эстетичен.
Менее визуально приятный график может быть создан для 82 байтов используя
Для d = 8,
источник
Graph
но у меня была такая же негативная реакция. Кроме того, для алгоритма важно различать ребра «по часовой стрелке» и ребра «умножить на 10». Я уверен, что есть варианты дляGraph
этого дескриптора, но затем, здесь больше байтов ...Graph
функций и нашел трюки, такие как использование->
вместоDirectedEdge
. Я сократил исходную 100-байтовую версию до 82 байтов, но затем, исправив ее в правильном формате, добавил еще 42 байта.CircularEmbedding
, но он не располагал вершины по часовой стрелке дляn=7
(я признаю, что я не пробовал другие входные данные). С тобой это работаетn=7
?Join
иTranspose
так, чтобы внешние края были перечислены первыми перед внутренними краями. Вершины располагаются правильно по круговой траектории, но так как ребра предпочитают быть прямыми, они в конечном итоге напоминают n- углы.Python 2 + графвиз, 147 байт
Не всегда рисует круг, выводит файл PDF с именем
o
источник
Haskell, 350 байт
Вдохновленный @Loovjo, я также использую искусство ASCII. Это работает для чисел до 100000 (или что-то подобное).
В основном вы указываете от x до (x * 10)% n.
Вы можете попробовать это здесь . Но поскольку кодовая панель не поддерживает ввод, измените q на значение n вы хотите, и повторите попытку. (Обратите внимание, что разветвление не работает, поэтому скопируйте и повторно отправьте с главной страницы). Код, представленный там, немного отличается, потому что вышеприведенная версия принимает данные с консоли.
Я надеюсь, что вывод интуитивно понятен. Предложения компрессии приветствуются (особенно если это бьет 294 ;)).
источник
foldl (++) ""$map (\...
Пакетный, 394 байта
Бегство в партии - безобразно в лучшие времена. Пример вывода для 7:
источник
>0<
показывает , что0
карты для себя, в то время ,>2<<<3<
показывает , что3
сопоставляется2
.