В моем родном городе Рил есть система одностороннего движения, которая, кажется, была разработана для того, чтобы люди как можно дольше не попадали в пункт назначения. Ваша задача, если вы решите попробовать это, - создать программу, обеспечивающую кратчайший маршрут через такую систему трафика.
вход
Ввод будет включен STDIN
, и будет список начальной и конечной точек, за которым следует пустая строка, за которой следует список запросов, как показано ниже:
A B
B A
B C
C D
D C
A D
C A
B A
Каждая дорога может быть пройдена только в указанном (ых) направлении (ях), поэтому в приведенном выше примере дорога A - B - это улица с двусторонним движением, тогда как B - C - это улица с односторонним движением от B до C. Перемещение от C до B запрещено.
Начальная и конечная точки будут представлены одной заглавной буквой.
Вывод
Выходными данными должен быть кратчайший маршрут (измеряемый количеством посещенных точек) от заданной начальной точки к заданной конечной точке для каждого полученного запроса. Если такого маршрута не существует, выведите пустую строку. Если существует более одного кратчайшего маршрута, выведите первый при сортировке всех кратчайших маршрутов лексикографически.
Для приведенного выше примера результат будет:
A B C D
B A
Тестовые сценарии
Как и прежде, я предоставляю тесты для этой задачи на основе сценариев, написанных Джои и Вентеро : -
а также тесты и ожидаемый вывод для тех, кто не может использовать вышеуказанные сценарии
Применение: ./test [your program and its arguments]
Награды
Все ответы, которые, очевидно, имели какую-то попытку сыграть в гольф, которые соответствуют спецификации и проходят все тесты, получат мое одобрение. Самый короткий рабочий ответ до 26.01.2012 будет принят.
источник
output the first when sorting all shortest routes lexicographically
- Итак, еслиA B D
иA C D
оба являются действительными решениями,A B D
вместо вывода ?Ответы:
Haskell,
223207 символовисточник
Python (2.x),
382369358338323318 символовВсе советы и комментарии приветствуются!
Должен пройти тесты в этой форме. Подача ввода через стандартный ввод, например
python shortestroute.py < test.txt
.источник
A B I J M
вместоA B G J M
.C:
450,437,404, 390 символовисточник
puts("\n")
печатает две строки.puts()
автоматически добавляет терминатор конца строки к строкам, которые он печатает. Чтобы избежать такого поведения, используйтеfputs(str, stdout)
или простоprintf(str)
.