Многие из нас знакомы с игрой Tron. Вы управляете «световым циклом», размещенным на сетке. Световой цикл всегда движется вперед (хотя вы контролируете направление) и оставляет за собой постоянный след. Если вы столкнетесь с тропой, вы упадете!
Цель здесь состоит в том, чтобы определить, является ли данный путь допустимым циклом, то есть он возвращается к своей начальной точке без «сбоя». Для этого мы предполагаем, что мы начинаем с этой точки (0,0)
. Входные данные задаются в форме N2E1S2W1
с рядом основных направлений ( N
есть north
, E
есть east
и т. Д.), Каждое из которых следует расстоянием для перемещения в этом направлении. В этом примере вы бы путешествовали
N2 : North 2 to (0,2)
E1 : East 1 to (1,2)
S2 : South 2 to (1,0)
W1 : West 1 to (0,0)
Путь считается действительным, если он заканчивается (0,0)
без посещения какой-либо другой координаты более одного раза (он (0,0)
проходит ровно дважды. Один раз в начале и один раз в конце). Имейте в виду, чем в приведенном выше примере, чтобы добраться (0,0)
до (0,2)
, мы обязательно посетим (0,1)
также.
Другие примеры:
input -> output
N1E1S1W1 -> true
N1E1N1E1S2W2 -> true
N1S1E1W1 -> false // Visits (0,0) 3 times
N4E2S2W4S2E2 -> false // Visits (0,2) twice
N3E2S3 -> false // Does not return to (0,0)
N1S1 -> anything //I don't care how you evaluate this case
Ваш вывод может быть в любой форме, при условии, что он дает одинаковый вывод для любого истинного или ложного значения.
Входные данные могут быть приняты в виде строки или в виде списка символов, либо в форме S1N2E3
... или SNNEEE
... Также нет жесткого ограничения на размер сетки, но предположим, что входные данные ничего не переполняют. До тех пор, пока код является в основном надежным, не важно обрабатывать подобные случаи N99999999999999
.
Примечание: Вы можете оценить случаи N1S1
, E1W1
, S1N1
иW1E1
тем не менее вы хотели. Это технически правильные пути, но они идут вразрез с духом «Трона».
счет
Это код-гольф , поэтому выигрывает самый короткий ответ!
источник
N1S1
должно быть истинным, чтобы соответствовать вашим определениям, потому что оно достигает(0, 0)
дважды и(0, 1)
один раз, что действительно в соответствии с вашим определением.N
как1j
,E
как1
,S
как-1j
иW
как-1
?N99999999999999
Ответы:
Pyth ,
4439 байтТестовый пакет .
источник
JavaScript,
247200 байтn
является функцией входной строки,s
которая возвращает1
истину и0
ложьВот незагрязненная версия для справки / объяснения:
источник
contains
это не функция в любом диалекте JavaScript. Не могли бы вы указать диалект?Python 3 ,
236161150 байтПопробуйте онлайн!
-75 байтов благодаря Leaky Nun
-11 байтов благодаря Leaky Nun Или, если нам разрешено принимать входные данные в виде списка декодированных комплексных чисел длины серии:
Python 2 ,
8573 байтаПопробуйте онлайн!
-12 байт благодаря Mr. Xcoder / -9 байт благодаря Leaky Nun (объединено в одну правку)
Это слишком долго для меня LOL
источник
Желе ,
1412 байтЯ впервые играю в гольф в желе. Предложения приветствуются.
Входные данные представляют собой массив
[direction, distance]
пар, где направление задается в виде комплексного числа.Объяснение:
источник
Сетчатка , 86 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Преобразовать числа в одинарные.
Длина строки декодирует буквы.
N111
нужно превратить вNNN
, так что из каждого унарного числа вычитается одно, а затем каждый 1 дублирует предыдущую букву.Создайте все префиксы (т.е. точки на пути) в виде отдельных строк. Пробел имеет префикс, чтобы избежать проблем с пустыми строками.
Сортируйте все буквы в каждой строке по порядку, а затем удалите соответствующие пары. В итоге мы получаем уникальный код для любой заданной точки на сетке.
Проверьте одну из двух вещей: a) последняя точка не заканчивается пробелом (т. Е. Цикл не закрылся) или две повторяющиеся точки на пути. Если путь действителен, все проверки не пройдены, и результат равен нулю.
Инвертировать результат.
источник
Perl, 140
Работает со строковым вводом. Возможно, я могу сократить с массивом, но я сомневаюсь в этом. Рад за любую дополнительную помощь в гольф :)
источник