Hay una matriz 2D rectangular que contiene virus denotados por 'v', antídoto1 denotado por 'a' y antídoto2 denotado por 'b' (no hay valores distintos a 'v', 'a' y 'b').
Antidote1 puede matar virus vecinos en direcciones horizontales y verticales solamente, pero antidote2 puede matar virus vecinos (si los hay) en direcciones horizontal, vertical y diagonal.
Una vez que se activan los antídotos, ¿cuántos virus quedarán al final?
Ejemplos:
Entrada:
vv
vv
Salida: 4
Entrada:
av
vv
Salida: 1
Entrada:
vvv
vbv
vvv
Salida: 0
Entrada:
bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav
Salida: 3
Respuestas:
Python 3 , 135 bytes
Pruébalo en línea!
-2 bytes gracias a Kevin Cruijssen
Explicación
Reemplaza todas las 'v' por 'b' si se encuentran junto a 'b'. A continuación, reemplaza todas las 'v' a 'c' si se encuentran junto a 'a'. Una segunda iteración con la versión transpuesta de la matriz borra todos los virus verticales y diagonales. Finalmente, devolverá el número restante de 'v'.
Como una función recursiva más legible (155 bytes)
fuente
y>1else
. Buen enfoque sin embargo. Al principio no estaba seguro de cómo se trata esto con la diagonalb
, pero parece funcionar bien debido a sus reemplazos. :) +1 de mi parte.j=''.join
en su versión fijaJavaScript (ES7), 108 bytes
Toma la entrada como una matriz de caracteres.
Pruébalo en línea!
Similar a mi respuesta original, pero hacerlo
V>'a'>(x-X)**2+y*y-2
es en realidad 1 byte más corto que usar el truco hexa descrito a continuación. ¯ \ _ (ツ) _ / ¯JavaScript (ES7), 109 bytes
Toma la entrada como una matriz de caracteres.
Pruébalo en línea!
¿Cómo?
Teniendo en cuenta las coordenadas enteras, se ve de la siguiente manera:
Por lo tanto:
Comentado
fuente
05AB1E ,
333029 bytesPruébelo en línea o verifique algunos casos de prueba más .
Puerto de la respuesta de Python 3 de @Jitse , ¡así que asegúrate de votarlo!
-1 byte gracias a @Jitse .
Explicación:
La versión heredada tiene la ventaja de poder comprimir / transponer una lista de cadenas, donde la nueva versión necesitaría una lista explícita
S
yJ
, dado que solo funciona con listas de caracteres. Pero, la nueva versión sigue siendo 3 bytes más corta al usarla€Â
en combinación con una cadena comprimida más corta. En la versión heredada,€
solo mantendría el último valor en la pila dentro del mapa, pero en la nueva versión, mantendrá todos los valores en la pila dentro del mapa.Ver este consejo 05AB1E mío (sección Cómo comprimir cadenas que no forman parte del diccionario? ) Para entender por qué
.•s¯}˜?•
es"vbvabbca"
.fuente
bc
=>ba
si aplicabv
=>ba
antesav
=>ac
. Por lo tanto.•6øнãI•
(forma comprimida de "bvavbaac") es suficiente, ahorrando 2 bytes..:
(reemplazar todo una vez) en lugar de:
(seguir reemplazando todo hasta que ya no esté presente). Todavía -1, sin embargo. :) Gracias por hacérmelo saber.Java 10,
211209 bytesModificación de mi respuesta para el desafío Todos los ochos individuales .
-2 bytes gracias a @ceilingcat .
Pruébalo en línea.
Explicación:
fuente
Carbón , 39 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Une las cadenas de entrada con los
\r
caracteres y dibuja el resultado en el lienzo.Borrar el número de virii vivos.
Recorre los caracteres en la entrada.
Si el personaje actual es un virus y no hay
b
s adyacentes en ninguna dirección ua
ortogonalmente, incremente el número de virus vivos.Repite con el siguiente personaje.
Despeje el lienzo e imprima el número total de virii vivos.
fuente
Perl (
-00lp
), 82 bytesUsando regex para reemplazar
v
por espacio, luego cuenta elv
sTIO
fuente