Найдите Санту и его северного оленя в людной сцене.
вход
Ввод будет осуществляться через 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 будет принято победителем.
Ответы:
MATLAB: 110
, 95символовНе уверен насчет способа обработки ввода, но все остальное довольно просто.
Нормально отформатированная версия:
Пример ввода:
источник
*
символы , как толпы , чтобы сделать его легче увидетьS
,P
аR
символы - в то время как тесты в использовании сценариев тестирования все символы ASCII с 33 (!
) до до (и в том числе) 96 (`` `). Я поясню это в вопросе. Я сделал простую текстовую версию тестов, которые вам нужно пройти, и я также добавлю к вопросу.Q
одного, спас бы меня, по крайней мере, 2 символа.SQL_2
в пример ввода ... приятно :)Python 2 (
353381)Первая попытка написать код настолько компактным, насколько это возможно. Python на самом деле не является языком для этого, так как отступы и переводы строки просто необходимы для дизайна. Я выбираю этот язык в основном из-за того, как вы можете играть со списками и строками в виде списков. Язык с легким манипулированием матрицей был бы идеальным для этой задачи, но, к сожалению, я не знаю ни одного из них.
Чтобы проверить, что-то должно быть назначено, например,Вероятно, главное интересное в этом коде:
который является причудливым способом записи: «b становится списком представления (строка из 25 символов) каждого квадрата 5x5 в исходном представлении».
источник
В файле должен быть только один Санта (если больше 2 "S", мне нужно обновить код).
Использование awk
Запустите команду awk, как показано ниже
Результат
источник
S
допускаются, если только один является «действительным» Дедом Морозом. У тестов (предусмотренных в вопросе) есть несколько случаев, которые по этой причине потерпят неудачу.