Синопсис: Найти символы, которые заключены в
MYPOCKET
.
Пример ввода
MYPHEIF
YFOCKVH
MBNDEIF
TEUFTMY
ESNDUWP
KBOVUVO
CENWFKC
OPYMTEB
Пример вывода
F
BND
EUF
SNDUW
BOVUV
ENWF
А? Как мы получили это в качестве выхода? «Карман» иногда бывает трудно увидеть. Это прояснит ситуацию:
MYP HEIF У Р OCK VH М БНД Е ЕСЛИ Т EUF TMY Е SNDUW Р К BOVUV О С ENWF KC OPYMTE Б
Буквы, выделенные жирным шрифтом, обозначают кольцо символов, соединенных ортогонально друг с другом, состоящее из строки, MYPOCKET
повторяемой снова и снова. Ваша программа должна выводить символы, которые находятся внутри этого кольца.
Примечания:
- Там будет только один «карман».
- Трейлинг новых строк или пробелов после строк разрешен.
- Остальная часть сетки также может содержать символы из
MYPOCKET
, но не таким образом, который делает форму кольца неоднозначной. M
Не всегда в верхнем правом углу.- «Карман» может двигаться либо по часовой стрелке, либо против часовой стрелки.
- «Карман» не будет перемещаться в диагональных направлениях, то есть каждая буква связана слева, справа, вверх или вниз к следующей.
Вот еще один вход, с которым вы можете проверить свою программу.
Пример ввода
EKCYMOPD
KCOPHAYM
EKNDSEST
JETHACKE
KRMYPOBN
Пример вывода
HA
NDSES
HA
Ответы:
Perl 5, 414
Использование: сохранить как pocket.pl и запустить с:
Я выбрал рекурсивную функцию для грубой форсировки пути, которая, возможно, была не самой лучшей, но был первым подходом, который я рассмотрел.
Хотя это работает для обоих текущих тестовых случаев, есть несколько предостережений:
Я хочу продолжить работу над этим, но хотел показать, что есть интерес к вопросу! Рад документировать мой процесс, если полезно.
источник
Python 2.7
571542509Работает как программа (опираясь на рекурсивную функцию) и принимает ввод от stdin.
Демо здесь.
Тестирование (
ex1.txt
иex2.txt
примеры из вопроса) -Беззвучная версия с комментариями -
Дайте мне знать, если я сделал что-то глупое или что-то можно сделать лучше.
Я знаю, что это слишком долго, но это лучшее, что я мог сделать: P
источник