Sinopse: Encontre caracteres que estão entre
MYPOCKET
.
Exemplo de entrada
MYPHEIF
YFOCKVH
MBNDEIF
TEUFTMY
ESNDUWP
KBOVUVO
CENWFKC
OPYMTEB
Saída de exemplo
F
BND
EUF
SNDUW
BOVUV
ENWF
Hã? Como conseguimos isso como resultado? O "bolso" às vezes pode ser difícil de ver. Isso tornará mais claro:
MJ heif Y F OCK VH M BND E SE t EUF TMY E SNDUW P K BOVUV O C ENWF KC OPYMTE B
As letras em negrito indicam um anel de caracteres conectados ortogonalmente entre si, consistindo na sequência MYPOCKET
repetida várias vezes. Seu programa deve gerar os caracteres que estão dentro desse anel.
Notas:
- Haverá apenas um "bolso".
- Trailing novas linhas ou espaços após linhas são permitidas.
- O restante da grade também pode conter caracteres de
MYPOCKET
, mas não de maneira que torne a forma do anel ambígua. - A
M
não é sempre no canto superior direito. - O "bolso" pode se mover no sentido horário ou anti-horário.
- O "bolso" não se moverá na direção diagonal - ou seja, cada letra será conectada à esquerda, direita, para cima ou para baixo na próxima.
Aqui está outra entrada com a qual você pode testar seu programa.
Exemplo de entrada
EKCYMOPD
KCOPHAYM
EKNDSEST
JETHACKE
KRMYPOBN
Saída de exemplo
HA
NDSES
HA
Respostas:
Perl 5, 414
Uso: salve como pocket.pl e execute com:
Fiz uma função recursiva para forçar o caminho com força bruta, o que pode não ter sido o melhor, mas foi a primeira abordagem que considerei.
Embora funcione nos dois casos de teste atuais, existem algumas ressalvas:
Eu quero continuar trabalhando nisso, mas queria mostrar que há interesse na questão! É um prazer documentar meu processo, se útil.
fonte
Python 2.7
571542509Funciona como um programa (suportando uma função recursiva) e aceitando informações do stdin.
Demonstração aqui.
Testando (
ex1.txt
eex2.txt
são os exemplos da pergunta) -Versão ungolfed com comentários -
Deixe-me saber, se eu fiz algo estúpido ou algo pode ser feito melhor.
Eu sei que é muito longo, mas é o melhor que posso fazer: P
fonte