Эстетически приятное дерево делителей - это дерево делителей ввода, nкоторое для любого составного числа mимеет два дочерних узла, которые являются парой делителей , ближайших к квадратному корню из m. Левый узел должен быть меньшим делителем, mа правый узел должен быть большим делителем m. Простое число в дереве не должно иметь дочерних узлов. Ваше дерево может быть в виде текста или изображения. Правила для вывода текста искусства следующие.
Правила интервалов
Чтобы разнести узлы на дереве, у нас есть следующие правила:
- Все узлы на заданной глубине от корня должны находиться на одной строке текста в выводе.
/ \ NOT / \ / \ / 3 2 3 2
- Для левых узлов входящая ветвь должна быть в верхнем правом углу, если узел представляет собой однозначное число, иначе чуть выше последней цифры. Пример:
/ А ТАКЖЕ / 3 720
- Для правых узлов входящая ветвь должна быть в верхнем левом углу, если узел представляет собой однозначное число, иначе чуть выше первой цифры. Пример:
\ А ТАКЖЕ \ 7 243
- Для исходящих левых ветвей ветвь должна начинаться на один пробел слева от числа. Пример:
275 / 11
- Для исходящих правых ветвей ветвь должна начинаться на один пробел справа от номера. Пример:
275 \ 25
- Любые два узла на одном уровне дерева должны иметь как минимум два пробела между ними. В то же время любые два поддерева на одном и том же уровне дерева должны иметь как можно меньше промежутков между ними.
Это дерево не работает, потому что ** поддерево ** слишком близко.
504
/ \
/ \
/ \
/ \
21 24
/ \. / \
/ \. / \
3 7. 4 6
, / \ / \
.2 2 2 3
Хотя у этого дерева достаточно места между его ветвями.
504
/ \
/ \
/ \
/ \
/ \
21 ... 24
/ \ ... / \
/ \ ... / \
3 7 ... 4 6
... / \ / \
... 2 2 2 3
- Если любые два поддерева расположены слишком близко друг к другу на дереве, их можно разделить, добавив еще один ряд ветвей
/\в дерево над родительскими элементами .
441
/ \ Последняя строка еще не заполнена, и у нас уже нет свободного места.
21 21
/ \ / \
Добавить еще один ряд веток
441
/ \ Почти, но 7 и 3 слишком близко друг к другу.
/ \ Еще один ряд должен сделать это.
21 21
/ \ / \
3 7 3 7
Добавить еще один ряд веток
441
/ \ И мы закончили.
/ \
/ \
21 21
/ \ / \
3 7 3 7
Примеры
В качестве полного примера, дерево делителей 24 будет выглядеть так:
24
/ \
/ \
4 6
/ \ / \
2 2 2 3
4 и 6 - пара делителей, ближайшая к квадратному корню из 24. 4 слева, потому что она меньше. На следующей строке номер 2 слева от 3, потому что он меньше.
Дерево делителей для 63 должно выглядеть так:
63 and NOT like this 63
/ \ / \
7 9 3 21
/ \ / \
3 3 7 3
В неправильном дереве 3 и 21 не являются парой делителей, ближайших к квадратному корню из 63, а 3 и 7 не отсортированы должным образом. Расположение филиала на 21 правильно, хотя.
Для 42 вы должны иметь:
42 and NOT 42
/ \ / \
6 7 21 2
/ \ / \
2 3 3 7
Давайте посмотрим на 720. Обратите внимание, что нам нужно пять уровней ветвей от 720так, чтобы 24и 30поддеревья были правильно разнесены. Кроме того , обратите внимание , что 24и 30имеют два уровня ветвей , так как 4и 6есть дочерние узлы , которые необходимо правильное расстояние и дочерние узлы 30должны быть на том же уровне, что и дочерние узлы 24.
720
/ \
/ \
/ \
/ \
/ \
24 30
/ \ / \
/ \ / \
4 6 5 6
/ \ / \ / \
2 2 2 3 2 3
Соревнование
- Ваша задача состоит в том, чтобы создать правильно расположенное эстетически приятное дерево делителей для ввода
n, гдеnположительное целое число больше 1. - Ваш вывод может содержать начальные и конечные пробелы и начальные и конечные переводы строк, но в противном случае он должен соответствовать приведенным выше правилам пробелов.
- Ваш вывод может быть: текстовый рисунок, изображение (другие форматы, которые будут добавлены, если это необходимо).
- Для изображений убедитесь, что узлы вашего дерева расположены правильно и что узлы с одинаковой высотой в дереве имеют одинаковую высоту на изображении.
- Это код гольф. Наименьшее количество байтов (или эквивалент) выигрывает.
Благодарим Стью Гриффина за то, что он подумал об этой идее, и большое спасибо Питеру Тейлору, Мартину Эндеру, Мего и Эсу Я за помощь в переписывании спецификации. Как обычно, любые предложения или исправления приветствуются. Удачи и хорошего гольфа!
Больше тестовых случаев:
2
4
/ \
2 2
20
/ \
4 5
/ \
2 2
323
/ \
17 19
362880
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
576 630
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
24 24 21 30
/ \ / \ / \ / \
/ \ / \ / \ / \
4 6 4 6 3 7 5 6
/ \ / \ / \ / \ / \
2 2 2 3 2 2 2 3 2 3
1286250
/ \
/ \
/ \
/ \
/ \
1050 1225
/ \ / \
/ \ / \
/ \ / \
30 35 35 35
/ \ / \ / \ / \
5 6 5 7 5 7 5 7
/ \
2 3

