Existe uma matriz 2D retangular que contém vírus denotados por 'v', antídoto1 denotado por 'a' e antídoto2 denotado por 'b' (não existem valores diferentes de 'v', 'a' e 'b').
O antídoto1 pode matar os vírus vizinhos apenas nas direções horizontal e vertical, mas o antídoto2 pode matar os vírus vizinhos (se houver) nas direções horizontal, vertical e diagonal.
Uma vez ativados os antídotos, quantos vírus permanecerão no final?
Exemplos:
Entrada:
vv
vv
Saída: 4
Entrada:
av
vv
Saída: 1
Entrada:
vvv
vbv
vvv
Saída: 0
Entrada:
bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav
Saída: 3
Respostas:
Python 3 , 135 bytes
Experimente online!
-2 bytes graças a Kevin Cruijssen
Explicação
Substitui tudo 'v' por 'b' se encontrado próximo a 'b'. Em seguida, substitui todos os 'v' por 'c' se localizados ao lado de 'a'. Uma segunda iteração com a versão transposta da matriz limpa todos os vírus verticais e diagonais. Finalmente, ele retornará o número restante de 'v's.
Como uma função recursiva mais legível (155 bytes)
fonte
y>1else
. Abordagem agradável embora. No começo, eu não tinha certeza de como isso lida com a diagonalb
, mas isso parece funcionar muito bem devido às suas substituições. :) +1 de mim.j=''.join
em sua versão fixaJavaScript (ES7), 108 bytes
Recebe entrada como uma matriz de caracteres.
Experimente online!
Semelhante à minha resposta original, mas fazer
V>'a'>(x-X)**2+y*y-2
é na verdade 1 byte mais curto do que usar o truque hexa descrito abaixo. ¯ \ _ (ツ) _ / ¯JavaScript (ES7), 109 bytes
Recebe entrada como uma matriz de caracteres.
Experimente online!
Quão?
Considerando coordenadas inteiras, tem a seguinte aparência:
Portanto:
Comentado
fonte
05AB1E ,
333029 bytesExperimente online ou verifique mais alguns casos de teste .
Porto da resposta Python 3 do @Jitse , por isso não deixe de vota-lo!
-1 byte graças a @Jitse .
Explicação:
A versão legada tem a vantagem de poder zipar / transpor uma lista de strings, onde a nova versão precisaria de uma explícita
S
eJ
, uma vez que só funciona com listas de caracteres. Mas, a nova versão ainda é 3 bytes mais curta, usando€Â
em combinação com uma string compactada mais curta. Na versão herdada,€
apenas manteria o último valor na pilha dentro do mapa, mas na nova versão, manterá todos os valores na pilha dentro do mapa.Veja este 05AB1E ponta do meu (seção Como cordas compressa não fazem parte do dicionário? ) Para entender por que
.•s¯}˜?•
é"vbvabbca"
.fonte
bc
=>ba
se aplicarbv
=>ba
antesav
=>ac
. Assim.•6øнãI•
(a forma compactada de "" bvavbaac ") é suficiente, economizando 2 bytes..:
(substituir tudo uma vez) em vez de:
(continuar substituindo tudo até que não esteja mais presente). Ainda -1, no entanto. :) Obrigado por me avisar.Java 10,
211209 bytesModificação da minha resposta para o desafio Todos os Oitos Individuais .
-2 bytes graças a @ceilingcat .
Experimente online.
Explicação:
fonte
Carvão , 39 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Junte as seqüências de
\r
caracteres de entrada com caracteres e desenhe o resultado na tela.Limpe o número de vírus vivos.
Faça um loop sobre os caracteres na entrada.
Se o caractere atual for um vírus e não houver
b
s adjacentes em nenhuma direção oua
s ortogonalmente, aumente o número de vírus vivos.Repita com o próximo caractere.
Limpe a tela e imprima o número total de vírus vivos.
fonte
Perl (
-00lp
), 82 bytesUsando regex para substituir
v
pelo espaço, conte osv
sTIO
fonte