Найдите Санту и его северного оленя в людной сцене.
вход
Ввод будет осуществляться через STDIN и будет переменным числом строк символов одинаковой, но переменной длины. Если Санта (представлен персонажем S
) находится на сцене, его мешок подарков (представлен персонажем P
) будет находиться в одной из соседних с ним позиций (по горизонтали, вертикали или диагонали). Его северный олень (каждый из которых представлен персонажем R
) будет находиться в квадрате 5x5, окружающем его. Если S
на сцене появляется человек, у которого нет мешка с подарками, или если его не сопровождает хотя бы 4 оленя, то это не Санта.
Выход
Сцена очищена от всех запутываний (все персонажи, не принадлежащие Санте, не присутствующие, не являющиеся оленями, заменены пробелами), показывающие Санту, его мешок подарков и его оленей - все остальные персонажи должны быть заменены пробелами. Если Санты и его северного оленя нет на сцене, выведите его без изменений. Гарантируется, что будет только одно решение, поэтому никогда не будет более одного действительного Санты, и он никогда не будет нести более одного мешка подарков.
Примеры
В этих примерах я просто с помощью *
символа , чтобы сделать его легко увидеть S
, P
и R
символы, но ваша программа должна быть в состоянии справиться с любым из символов ASCII !
в `
(33 до 96). Я пропустил символы нижнего регистра и выше, чтобы избежать путаницы.
Входные данные:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Вывод: (игнорируйте точки, они заставляют страницу показывать пустые строки)
.
.
.
R
P
S
R
R R
.
.
.
.
Вход: (недостаточно оленей)
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Выход:
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Вход: (без мешка подарков)
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Выход:
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Вход: (подарки не достаточно близко)
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Выход:
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Вход: (один из северных оленей не в квадрате 5x5 вокруг Санты)
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Выход:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Тестовые сценарии
Как и в некоторых из моих прошлых вопросов, я еще раз вырезал некоторые тестовые сценарии, изначально созданные Джои и Вентеро, чтобы предоставить несколько тестовых примеров для этого вопроса:
Использование: ./test [your program and its arguments]
Текстовая версия тестов для справки: простой текст
Награды
Каждая заявка, которую я могу проверить, которая соответствует спецификации, проходит тесты и, очевидно, была попытка сыграть в гольф, получит от меня отклик (поэтому, пожалуйста, предоставьте инструкции по использованию вместе с вашим ответом). Самое короткое решение к концу 31.12.2013 будет принято победителем.