Вы можете знать математика фон Коха по его знаменитой снежинке. Однако у него есть более интересные проблемы информатики до рукава. Действительно, давайте посмотрим на эту гипотезу:
Дано дерево с n
узлами (таким образом n-1
ребрами). Найдите способ перечислить узлы от 1
до n
и, соответственно, ребра от 1
до n-1
таким образом, чтобы для каждого ребра k
разница его номеров узлов была равна k
. Предположение состоит в том, что это всегда возможно.
Вот пример, чтобы сделать это совершенно ясно:
ТВОЕ ЗАДАНИЕ
Ваш код будет принимать в качестве входных данных дерево, вы можете выбрать желаемый формат, но для тестовых случаев я предоставлю дерево по его дугам и списку их узлов.
Например, это вход для дерева на картинке:
[a,b,c,d,e,f,g]
d -> a
a -> b
a -> g
b -> c
b -> e
e -> f
Ваш код должен возвращать дерево с пронумерованными узлами и ребрами. Вы можете вернуть более графический вывод, но я предоставлю такой вывод для тестовых случаев:
[a7,b3,c6,d1,e5,f4,g2]
d -> a 6
a -> b 4
a -> g 5
b -> c 3
b -> e 2
e -> f 1
ТЕСТОВЫЕ СЛУЧАИ
[a,b,c,d,e,f,g] [a7,b3,c6,d1,e5,f4,g2]
d -> a d -> a 6
a -> b a -> b 4
a -> g => a -> g 5
b -> c b -> c 3
b -> e b -> e 2
e -> f e -> f 1
[a,b,c,d] [a4,b1,c3,d2]
a -> b a -> b 3
b -> c => b -> c 2
b -> d b -> d 1
[a,b,c,d,e] [a2,b3,c1,d4,e5]
a -> b a -> b 1
b -> c b -> c 2
c -> d => c -> d 3
c -> e c -> e 4
Это код-гольф, это самый короткий ответ в байтах!
Примечание: это сильнее, чем гипотеза Рингеля-Коцига , которая утверждает, что каждое дерево имеет изящную маркировку. Поскольку в гипотезе Коха невозможно пропустить целые числа для маркировки вопреки грациозной маркировке в гипотезе Рингеля-Коцига. Изящная маркировка была задана ранее здесь .
источник
Ответы:
Желе , 30 байт
Попробуйте онлайн! (Используйте в
GṄ³çG
качестве нижнего колонтитула, чтобы сделать вывод более красивым.)Входы аналогичны примеру, например
abcdef
и[d,a],[a,b],[a,g],[b,c],[b,e],[e,f]
Выводит список, например,
a,b,c,d,e,f
по порядку.Примечание. Моя программа выдает значения, отличные от контрольных примеров, поскольку существует несколько возможных вариантов.
объяснение
Сохраните 1 байт, показывая все возможные решения:
Попробуйте онлайн! (Используйте
GṄ³çG⁷³G
в качестве нижнего колонтитула, чтобы сделать вывод красивее)Используйте конвертер, чтобы скопировать и вставить тестовый набор в список ввода.
источник
Рубин, 108 байт
Функция lamba принимает массив из 2-х элементов, содержащих ребра (где каждое ребро выражается в виде пары чисел, соответствующих соответствующим примечаниям).
Неуправляемый в тестовой программе
Вывод
вывод представляет собой массив из 2 элементов, содержащий:
новая нумерация узлов
край нумерации.
Например, первое ребро первого примера
[4,1]
находится между узлами 6 и 1 под нумерацией нового узла и поэтому является ребром 6-1 = 5.На самом деле существует несколько солютонов для каждого теста.
return
останавливает функцию после того , как первый один найден.источник