Il existe un tableau 2D rectangulaire contenant des virus dénotés par «v», antidote1 dénoté par «a» et antidote2 dénoté par «b» (il n'y a pas de valeurs autres que «v», «a» et «b»).
Antidote1 peut tuer les virus voisins uniquement dans les directions horizontale et verticale, mais l'antidote2 peut tuer les virus voisins (le cas échéant) dans les directions horizontale, verticale et diagonale.
Une fois les antidotes activés, combien de virus resteront-ils à la fin?
Exemples:
Contribution:
vv
vv
Sortie: 4
Contribution:
av
vv
Sortie: 1
Contribution:
vvv
vbv
vvv
Sortie: 0
Contribution:
bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav
Sortie: 3
Réponses:
Python 3 , 135 octets
Essayez-le en ligne!
-2 octets grâce à Kevin Cruijssen
Explication
Remplace tous les «v» par «b» s'ils se trouvent à côté de «b». Ensuite, remplace tous les «v» par «c» s'ils se trouvent à côté de «a». Une deuxième itération avec la version transposée de la matrice efface tous les virus verticaux et diagonaux. Enfin, il renverra le nombre restant de «v».
En tant que fonction récursive plus lisible (155 octets)
la source
y>1else
. Belle approche cependant. Au début, je n'étais pas sûr de savoir comment cela traitait la diagonaleb
, mais cela semble fonctionner très bien en raison de vos remplacements. :) +1 de ma part.j=''.join
dans votre version fixeJavaScript (ES7), 108 octets
Prend l'entrée comme une matrice de caractères.
Essayez-le en ligne!
Similaire à ma réponse d'origine, mais faire
V>'a'>(x-X)**2+y*y-2
est en fait 1 octet plus court que d'utiliser l'astuce hexa décrite ci-dessous. ¯ \ _ (ツ) _ / ¯JavaScript (ES7), 109 octets
Prend l'entrée comme une matrice de caractères.
Essayez-le en ligne!
Comment?
Compte tenu des coordonnées entières, il se présente comme suit:
Donc:
Commenté
la source
05AB1E ,
333029 octetsEssayez-le en ligne ou vérifiez quelques cas de test supplémentaires .
Port de la réponse Python 3 de @Jitse , alors assurez-vous de lui donner un vote positif!
-1 octet grâce à @Jitse .
Explication:
La version héritée a l'avantage de pouvoir compresser / transposer une liste de chaînes, où la nouvelle version aurait besoin d'une explicite
S
etJ
, car elle ne fonctionne qu'avec des listes de caractères. Mais, la nouvelle version est toujours plus courte de 3 octets en utilisant€Â
en combinaison avec une chaîne compressée plus courte. Dans la version héritée,€
ne conserverait que la dernière valeur de la pile à l'intérieur de la carte, mais dans la nouvelle version, elle conserverait toutes les valeurs de la pile à l'intérieur de la carte.Voir cette astuce de mes 05AB1E (section Comment chaînes Compresser ne font pas partie du dictionnaire? ) Pour comprendre pourquoi
.•s¯}˜?•
est"vbvabbca"
.la source
bc
=>ba
si vous postulezbv
=>ba
avantav
=>ac
. Ainsi.•6øнãI•
(la forme compressée de "bvavbaac") suffit, économisant 2 octets..:
(remplacer tout une fois) au lieu de:
(continuer à remplacer tout jusqu'à ce qu'il ne soit plus présent). Toujours -1, cependant. :) Merci de me le faire savoir.Java 10,
211209 octetsModification de ma réponse pour le challenge All the single eights .
-2 octets grâce à @ceilingcat .
Essayez-le en ligne.
Explication:
la source
Fusain , 39 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Joignez les chaînes d'entrée avec des
\r
caractères et dessinez le résultat sur le canevas.Effacez le nombre de virii vivants.
Faites une boucle sur les caractères dans l'entrée.
Si le personnage actuel est un virus et qu'il n'y a aucun
b
s adjacent dans aucune direction oua
s orthogonalement, augmentez le nombre de virii vivants.Répétez avec le caractère suivant.
Nettoyez la toile et imprimez le nombre total de virii vivants.
la source
Perl (
-00lp
), 82 octetsUtiliser regex pour remplacer
v
par l'espace, puis compter lev
sTIO
la source