Ваша жизнь может зависеть от этого. Не моргай Даже не моргай. Моргни и ты мертв. Они быстрые. Быстрее, чем ты можешь поверить. Не отворачивайся, не отводи взгляд и не моргай! Удачи.
Плачущие Ангелы - это инопланетная раса, которая не может двигаться, пока ее наблюдает другое существо (даже другой Ангел). Они питаются, отправляя своих жертв назад во времени. Вы ( Доктор ) попали в комнату с некоторыми, и вам нужно попасть в ТАРДИС.
задача
Напишите программу, которая при представлении ASCII прямоугольной комнаты выведет путь, который приведет вас к безопасности. Если любой Ангел может атаковать - в любое время во время вашего прогресса - тогда этот путь небезопасен. Ангел может атаковать, если он видит вас, когда вы не замечены ни вами, ни другим Ангелом.
вход
Вход состоит из двух частей. Во-первых, направление, с которым вы сталкиваетесь (NSEW). Затем в последующих строках - представление о комнате с указанием местоположения начала / конца и местоположения / облицовки всех Ангелов.
Пример ниже показывает, что есть один ангел, смотрящий на запад, и вы начинаете смотреть на юг.
S
..........
....D.....
..........
..........
..........
..........
..........
..........
.........W
..........
...T......
.
- Пустое пространствоD
- Доктор (исходная позиция)T
- ТАРДИС (конечная позиция)N,S,E,W
- Ангел, смотрящий в указанном направлении (север, юг, восток, запад)
Поле зрения
Вы можете увидеть любое пространство под углом 45 градусов в том направлении, в котором вы находитесь. Линия обзора затруднена, если есть другой объект по прямой горизонтальной, вертикальной или 45-градусной диагонали. Любая другая диагональ не мешает обзору. Линия зрения ангелов работает точно так же. Например, в следующем, -
представляет ваше поле зрения, предполагая, что вы обращены на юг.
........
...D....
..---...
.-----..
-------.
---N----
---.--N-
---.----
Выход
Выводом является строка, представляющая путь, по которому вы пойдете, чтобы выйти. Если существует несколько безопасных путей, выберите любой. Если ни один путь не является безопасным, выведите 0
. Если карта искажена, делайте все, что угодно, в том числе сбой. Считайте, что это уродливо, если комната не прямоугольная, нет выхода и т. Д. Если нет Ангелов, это не уродливо, просто легко.
Для каждого шага вы можете сделать одно из двух: двигаться в направлении NSEW или поворачиваться в направлении NSEW (не меняя положения). Для перемещения просто выведите букву для этого направления. Чтобы повернуться лицом к направлению, выведите F
соответствующую букву. Например, следующий вывод:
SSFESSSSSSSW
является безопасным путем для образца, указанного в разделе ввода. Вы двинетесь на юг дважды, поверните на восток, чтобы держать ангела в поле зрения, затем двиньтесь на юг еще семь раз и на запад один раз, чтобы войти в ТАРДИС.
Тестовые случаи
1) Вы можете обойти ангела, обращенного на восток, чтобы добраться до ТАРДИС. Если вы не встанете прямо между ними, они заблокируют друг друга на месте, поэтому не имеет значения, в каком направлении вы находитесь в любой точке.
W
...D....
........
........
........
.E.....W
........
........
...T....
2) Вы проигрываете. Нет способа пройти мимо них. Они могут видеть друг друга, пока вы не встанете между ними. В этот момент вы не можете столкнуться с ними обоими, и все готово. Можно просто закрыть глаза и покончить с этим.
S
...D....
........
........
........
E......W
........
........
...T....
выигрыш
Применяются стандартные правила игры в гольф и лазейки , выигрывает минимум байт. Я постараюсь в ближайшее время получить еще несколько тестов, но не стесняйтесь предлагать свои собственные.
Изображение и цитата из Доктора Кто.
J
).