Эстетически приятное дерево делителей - это дерево делителей ввода, 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