В сети может быть до 26 узлов (названных A
по Z
или a
по z
вашему желанию). Каждая пара узлов может быть подключена или отключена. Узел может быть подключен максимум к 4 другим узлам. Ваша задача - нарисовать сеть на двухмерной диаграмме. Ввод будет дан так, чтобы эта задача была возможна (см. Больше ограничений в разделе вывода).
Формат
вход
- Пары букв (
A
доZ
илиa
доz
по вашему желанию). Они не отсортированы ни в каком порядке. - Необязательно - количество пар
Выход
- Рисунок ASCII, который показывает фактические связи между узлами. Узлы даются
a
вz
илиA
наZ
. Используйте-
для горизонтальных ссылок и|
для вертикальных ссылок. Ссылки могут иметь любую (ненулевую) длину, но они должны быть прямыми горизонтальными / вертикальными линиями, которые не изгибаются . Пробелы могут быть добавлены при условии, что они не искажают изображение.
Вы не можете использовать встроенные модули, которые помогают в макете графика. Могут быть разрешены другие встроенные в графы встроенные модули (хотя решения без встроенных модулей будут более полезны). Самый короткий код выигрывает.
Образец данных
вход
A B
B F
B L
F K
L K
K R
K S
R P
S J
S P
J A
T V
V N
Выход
A - B - F T - V
| | | |
| L - K - R N
| | |
J ----- S - P
вход
H C
G H
A B
B F
B C
F G
C D
D A
Выход
A - B ----- F
| | |
D - C - H - G
code-golf
ascii-art
graph-theory
ghosts_in_the_code
источник
источник
H A
это ребро, а не в данном выводе. Изменить: проблема выявлена и исправлена.Ответы:
CJam, 142
Вы не спрашивали об оптимальном, детерминированном или быстром решении, поэтому здесь вы идете:
Попробуйте онлайн
Это генерирует случайные координаты для каждой буквы и проверяет, является ли расположение приемлемым (краевые буквы выстраиваются в линию и нет пересечений), пока оно не будет. Это становится невероятно медленным, когда вы добавляете больше граней.
Две
D
буквы в коде указывают максимальные координаты x и y; Я выбралD
(= 13), потому что я думаю, что этого должно быть достаточно для всех случаев, не стесняйтесь доказать, что я неправ. Но вы можете изменить их на другие значения, чтобы ускорить программу, например, 2-й пример должен завершиться в течение минуты или двух, если вы вместо этого используете 3 и 4.источник
C, 813 байтов
Принимает ввод в качестве аргументов командной строки, например:
Ни в коем случае не конкурент с ответом aditsu по размеру, но гораздо эффективнее!
Это перебор всех возможных решений, но быстро распознает неудачу. Для двух тестовых случаев он заканчивается почти сразу, и кажется, что на более неудобных входах это займет всего несколько секунд. Он также не имеет ограничений на допустимые имена узлов (хотя вы не можете назвать один пробел
|
или-
) и не имеет ограничений на количество узлов (при условии, что все имена помещаются в байт, поэтому практический предел составляет 252 узла, и он станет медленным задолго до того, как достигнет такого количестваЕсть много возможностей для ускорения этого; много выхода из короткого замыкания было потеряно для игры в гольф, и есть части, которые могут быть удалены из горячих петель. Кроме того, некоторые наблюдения симметрии могут значительно уменьшить расположение первых двух узлов, между прочим.
Сломать:
источник