Encontre o Papai Noel e suas renas em uma cena lotada.
Entrada
A entrada estará em STDIN e será um número variável de linhas de caracteres de comprimento igual, mas variável. Se o Papai Noel (representado pelo personagem S
) estiver em cena, seu saco de presentes (representado pelo personagem P
) estará em uma das posições adjacentes a ele (horizontal, vertical ou diagonal). Suas renas (cada uma representada pelo personagem R
) estarão todas dentro do quadrado 5x5 ao seu redor. Se um S
aparece na cena que não tem um saco de presentes ou não é acompanhado por pelo menos quatro renas, então não é o Papai Noel.
Resultado
A cena limpa de toda ofuscação (todos os personagens que não são do Papai Noel, presentes ou não-renas são substituídos por um espaço), mostrando Papai Noel, seu saco de presentes e sua rena - todos os outros personagens devem ser substituídos por espaços. Se o Papai Noel e suas renas não estiverem em cena, produza-os inalterados. É garantido que haverá apenas uma solução; portanto, nunca haverá mais de um Papai Noel válido e ele nunca estará carregando mais de um saco de presentes.
Exemplos
Nestes exemplos Estou apenas usando o *
personagem para torná-lo fácil de ver S
, P
e R
personagens, mas o seu programa deve ser capaz de lidar com qualquer caracteres ASCII a partir !
de `
(33 a 96). Eu deixei de fora caracteres minúsculos e acima para evitar confusão.
Entrada:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Saída: (ignore pontos, eles devem forçar a página a mostrar as linhas em branco)
.
.
.
R
P
S
R
R R
.
.
.
.
Entrada: (rena insuficiente)
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Resultado:
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Entrada: (sem saco de presentes)
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Resultado:
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Entrada: (apresenta não perto o suficiente)
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Resultado:
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Entrada: (uma das renas fora do quadrado 5x5 em torno do Papai Noel)
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Resultado:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Scripts de teste
Como em algumas das minhas perguntas anteriores, mais uma vez massacrei alguns scripts de teste criados originalmente por Joey e Ventero para fornecer alguns casos de teste para esta pergunta:
Uso: ./test [your program and its arguments]
Versão em texto sem formatação dos testes para referência: Texto sem formatação
Recompensas
Cada entrada que eu possa verificar que atenda às especificações, passa nos testes e obviamente teve alguma tentativa de jogar golfe receberá um voto positivo de mim (por isso, forneça instruções de uso com sua resposta). A solução mais curta até o final de 31/12/2013 será aceita como vencedora.
Respostas:
MATLAB: 110
, 95caracteresNão tenho certeza sobre como a entrada deve ser processada, mas o resto é bem direto.
Versão normalmente formatada:
Exemplo de entrada:
fonte
*
caracteres como a multidão para torná-lo mais fácil de ver aS
,P
eR
personagens - enquanto que os testes no uso script de teste todos os caracteres ASCII de 33 (!
) até para (e incluindo) 96 (`` `). Vou deixar isso claro na pergunta. Fiz uma versão em texto simples dos testes que você precisa passar, que também adicionarei à pergunta.Q
coleira, teria me poupado pelo menos 2 caracteres.SQL_2
na entrada de amostra ... nice :)Python 2 (
353381)Primeira tentativa de escrever o código o mais compacto possível. Python não é realmente a linguagem para isso, pois o recuo e as novas linhas são simplesmente exigidos pelo design. Eu escolho principalmente usar esse idioma, devido à maneira como você pode brincar com listas e cordas como listas. Uma linguagem com fácil manipulação de matriz seria ideal para esta tarefa, mas, infelizmente, não conheço nenhuma delas.
Para testar algo, algo precisa ser atribuído a um, por exemploA principal coisa interessante neste código é provavelmente:
que é uma maneira elegante de escrever: "b se torna uma lista de uma representação (sequência de 25 caracteres) de cada quadrado de 5x5 na representação original".
fonte
Deve haver apenas um Papai Noel no arquivo (se houver mais de 2 "S", preciso atualizar o código).
Usando awk
Execute o comando awk como abaixo
Resultado
fonte
S
são permitidos desde que apenas um seja um Papai Noel 'válido'. Os testes (fornecidos na pergunta) têm alguns casos que falhariam por esse motivo.