Você é o caubói mais duro, mais difícil e mais legal do oeste do Mississippi. No entanto, um cara estranho em um site nerd maluco decidiu que seria legal colocar você em paisagens inacabadas aleatórias e lutar. Não importa, você ainda vai ganhar. No entanto, para ajudá-lo a vencer os tiroteios cansativos sobre os quais você escreverá em casa, é útil saber quantas balas o covarde à espreita na paisagem tem.
Que tal você ajudar esse pobre rapaz? Dada uma paisagem ASCII, encontre a arma dentro dela e diga a ele quantas balas são carregadas nela. Esta é a arma:
(X)
(X\ /X)
(XVX)
\X/
Cada X
na figura acima é um slot potencial para uma bala. O slot conterá um espaço ou um dos 0,O,o
(pode não ser consistente - o cowboy pode ter carregado diferentes tipos de balas em sua arma).
Sempre haverá exatamente uma arma, correspondendo à descrição acima, na paisagem. No entanto, observe que os espaços ao redor e dentro da pistola podem conter qualquer coisa.
Entrada
Você receberá uma sequência contendo ASCII imprimível (e não guias) e novas linhas para separar as linhas. Você também pode pegar uma lista de strings, se desejar. Todas as cadeias de caracteres serão preenchidas com espaços, portanto, todas terão o mesmo comprimento. A entrada terá pelo menos 4 linhas de altura e 7 colunas de largura.
Sempre haverá exatamente uma arma na paisagem.
Saída
Você produzirá quantas balas ( 0, O, o
) existem na pistola, portanto sua saída sempre será entre 0
e 6
.
Casos de teste
(0) ( )
(o\ /o( \ / )
(oVo) ( V )
\o/ \ /
0
----------------------------
////////////////////////////
////////////////////////////
/////////////(o)////////////
///////////(0\// )//////////
////////////( Vo)///////////
/////////////\ /////////////
////////////////////////////
----------------------------
3
()()()()()()()()()()()()()()()()\)/)()()()()()()()()()()()()
()()()()()()()()()()()()()()()()(V)()()()()()()()()()()()()(
()()()()()()()(\0/)()()()()()()()()()()()()()()()()()()()()(
()()()()()()()()()()()()()()()()()()()()()()()( )()()()()()(
()()()()()()(o)()()()()()()()(00)()()()()()(( \(/0)()()()()(
()()()()()()()()()()()()()()()()()()()()()()(( V )()()()()()
()()()()()()()()()()()()()()()()()()()()()()()\O/()()()()()(
2
------(0)---
||||(0\|/0)
-----(0V0)--
||||||\0/
-------_------
|||||||-|
------|-|
|||||||-|
------|-|
6
00ooOO(0)/\\/V
( )
( \\/ )
( V )
\\ /
00OOoo()()()())))
0
(\) (0)
(0\\/0) ( \0/ )
(0V0) ( V )
\\0/ \ /
1 (left gun is invalid because of the `\` in the bullet slot)
-00(0)00\0
-(O\0/o)\
- (OVo)o\0
-o \ /oo/
5
Isso é código-golfe , então a resposta mais curta em bytes vence.
0
dentro da caixa delimitadora da pistola, mas fora dela.Respostas:
Caracóis , 71 bytes
Experimente online.
fonte
Programming language for 2-dimensional pattern matching.
você deve estar feliz por eu ter feito esse desafio então: PMathematica, 170 bytes
Toma uma matriz de seqüências de caracteres / caracteres. Retorna o número de marcadores.
fonte
JavaScript,
215211209 bytesObrigado a Shaggy por -4 bytes!
Basicamente, tenta corresponder os
n
caracteres de uma arma após uma quebra de linha,n
desde0
o comprimento da corda.fonte
Z
literal, na primeira vez em que você o usar e se livrando do{}
.Python 2,
219224227 bytesEDIT: Corrigido um bug que me custou 5 bytes: (... encontrei 3 bytes de
r''
s extras que não eram necessários. E então Grrr !! Não estava contando\
caracteres no meu código corretamente, então adicionei 6 ...Pega uma string com novas linhas; Retorna o número de marcadores encontrados.
Basicamente, aplica uma regex que procura o padrão de pistola com 0, 1, ... lineLength caracteres do teclado no início das linhas.
fonte
C (gcc) ,
357351 bytesExperimente online! (golfe) (expandido)
(357 golfe) (357 expandido)Eu me perguntava o quão ruim seria uma solução em um idioma sem correspondência de padrões embutida. Saiu muito menor do que eu temia.
Basicamente, essa abordagem divide a arma em uma série de partes individuais que espera ver em locais específicos em relação a um índice específico. Se todas as peças forem encontradas onde são esperadas, é uma arma! O teste de bala incrementa um contador global para acompanhar quantas balas havia nele, que imprimimos quando encontramos a única arma na paisagem.
Nota 1: Eu preenchi os casos de teste com espaços para garantir larguras de linha consistentes.
Nota 2: adicione 10 bytes se você não gostar da atribuição, em vez do truque de retorno . Para maior clareza, usei declarações de retorno reais no código expandido.
fonte