Мистер Джонс хочет совершить поездку в оба конца на своем велосипеде. Он хочет посетить несколько городов в произвольном порядке, но его маршрут не должен пересекать его сам, так как он ненавидит быть в одном и том же месте дважды в отпуске. Поскольку он действительно любит кататься на велосипеде, длина его маршрута совершенно не имеет значения, но он не любит ездить по ландшафту без цели. Маршрут, который ему нравится, идет по городу по прямой линии в другой, без объездов.
Поскольку мистер Джонс - увлеченный игрок в код, он хочет, чтобы вы нашли программу, которая планирует для него поездку туда и обратно, учитывая множество городов. Вход имеет форму A (B|C)
. A
это название города B
и C
его координаты. Вы можете предположить, что координаты положительные и меньше 1000. Наборы данных для городов разделены линией. Вот пример того, как может выглядеть пример ввода:
SomeTown (1 | 10) ACity (3 | 4) Везде (7 | 7) Дом (5 | 1)
Мистер Джонс не педантичен, он просто хочет иметь полезную программу. Таким образом, вы можете сами решить, как будет выглядеть результат, если он соответствует следующим критериям:
- Результатом является карта городов с маршрутом, проведенным между ними. Если что-то правильно, маршрут не должен перекрывать себя и должен заканчиваться там, где он начался
- Координаты такие же, как в обычном программировании: (1 | 1) находится в северо-западном углу. Добавьте вид линейки к границе карты, чтобы облегчить ее чтение
- Названия городов должны быть записаны на карте, но не стесняйтесь использовать сокращения, которые объясняются где-то еще на карте
- Карта может быть как ASCII-art, так и изображением
- Держите вывод читабельным
Вывод может выглядеть так:
1234567 1 D 2 * * 3 * * 4 Б * 5 * * 6 * * 7 * С 8 * ** 9 * * 10A ** A: SomeTown B: ACity C: везде D: Домой
Программа с наименьшим количеством символов выигрывает. Я не считаю параметры компилятору / интерпретатору, если они необходимы для компиляции, но, пожалуйста, не злоупотребляйте этим правилом. Обычный код правила гольфа применяются.
Вот еще один тестовый пример. Ваш вывод не должен совпадать с моим, и вы не должны выбирать тот же путь, что и я. Вывод отрисовывается вручную и показывает возможный вывод. Входные данные:
дом (5 | 7) супермаркет (13 | 12) парк (15 | 5) Новая площадь (9 | 16) дом друга (20 | 11) старый замок (14 | 21) берег реки (1 | 20) пляж (10 | 1) кинотеатр (21 | 18) лес (23 | 7) маленький остров (21 | 1) музей код-гольфа (6 | 25) аэропорт (18 | 25) чайный магазин (24 | 14) ресторан (24 | 22) великий мост (3 | 12) SO здание (25 | 9)
И это пример вывода:
1111111111222222 1234567890123456789012345 1 Н * * К 2 * * * * 3 * * * * 4 * * ** * 5 * С * 6 * * 7 AJ 8 * * 9 * Q 10 * * 11 * *** E * 12 ПБ *** * * 13 * * * * 14 * * * N 15 * * * * 16 * Д * * 17 * * * * 18 * * I * 19 * * * * 20G * * * 21 * F * * 22 * ** * O 23 * ** * ** 24 * ** * * 25 л ** м ** Дом B: супермаркет C: парк D: новая площадь E: дом друга F: старый замок G: берег реки H: пляж Я: кино J: лес К: маленький остров L: музей код-гольфа М: аэропорт N: чайный магазин O: ресторан П: великий мост Q: ТАК здание
Я не носитель английского языка. Не стесняйтесь исправлять мой язык и грамматику, если это необходимо.
Хаскелл, 633 персонажа
Довольно длинноват для код-гольфа, но создает прекрасную карту SVG:
Или, если ваш браузер не может обработать SVG, PNG этого изображения:
viewBox
; также несколько уловок гольфа здесь и там.источник
Python,
516476 байт(Примечание: я не включил первые две строки в число байтов, я считаю их «параметрами интерпретатора». Но я взял плату за длину программы utf-8 в байтах.)
На вашем втором примере я произвожу:
Уу, символы Юникода!
источник
Python, 1074 байта
Хорошо, потрачено слишком много байтов (и времени), чтобы найти разумные пути для работы.
Делает хорошие пути, хотя:
и
источник