Il y a un virus à l'intérieur d'un destinataire de 5x5. Comme nous savons comment il propage sa contamination, votre mission est de sortir la dernière étape de la contamination.
Le destinataire
Il sera représenté comme un tableau bidimensionnel de 5x5:
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
Où 1
signifie une position où le virus a déjà contaminé et 0
une position non contaminée.
Comment le virus se propage
- Une position contaminée ne peut pas être propre.
- Une position propre ne sera contaminée à l'étape suivante que si au moins deux de ses positions adjacentes (cellules nord, est, sud et ouest) sont contaminées.
- La dernière étape de la contamination se produit lorsqu'aucune cellule plus propre ne peut être contaminée.
Échantillon
En utilisant comme étape 1 de la contamination le receveur décrit ci-dessus, l'étape 2 sera:
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
L'étape 3 de la contamination sera:
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
L'étape 4 de la contamination sera:
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Et l'étape 5 (dans cet exemple, le dernier) sera:
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Défi
Étant donné en entrée une étape de la contamination, vous devez sortir la dernière étape de la contamination.
Vous êtes autorisé à écrire un programme complet ou une fonction. Vous pouvez prendre l'entrée sous forme de tableau / liste, sous forme de nombres séparés ou même sous forme de chaîne. Choisit la meilleure façon qui convient à votre langue.
La réponse la plus courte en octets gagne!
Un autre cas de test
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1
Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
la source
1 0 1
se produire dans la sortie? Le centre zéro n'est-il pas adjacent à deux1
s?1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0
comme cas de test?0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0
, qui reste inchangé.Réponses:
Puisqu'il s'agit essentiellement d'un automate cellulaire, je vous donne ..
Règle Golly Quicklife, 10 octets
Saisissez la règle, collez la grille dans Golly, exécutez le modèle. Le modèle résultant est la sortie.
Explication:
Ou si vous insistez sur une règle RuleLoader complète, 89 octets:
Le nom de règle est X, mêmes étapes que précédemment.
la source
B3/S23
ce qui peut tout faire! ... Mais il a un format d'entrée strict (comme tout le programme est inclus dans l'entrée (comment feriez-vous autrement?)). MAIS POURQUOI RUINER LE PLAISIR ??Python 2, 97 octets
Essayez-le en ligne . L'entrée est considérée comme une chaîne entre guillemets, chaque ligne étant délimitée par des retours à la ligne. Le
980
n'est pas optimal et peut être remplacé par un multiple inférieur de 35. Puisqu'il n'a aucun impact sur la durée de ce programme, j'ai laissé la détermination de la limite supérieure sûre la plus basse comme exercice pour le lecteur.la source
Javascript (ES6),
918987 octetsEn tant que fonction qui accepte l'entrée comme un tableau de nombres ou de chaînes.
-2 octets de Neil (combinant l'affectation de
y
avec la conversion de chaîne)-2 octets (suppression de variable
j
)la source
(y=...)+''==x
au lieu de(y=...),y+''==x
.MATL , 22 octets
Cela fonctionne dans la version actuelle (15.0.0) de la langue.
Essayez-le en ligne !
Le format d'entrée est: tableau 2D avec des lignes séparées par des points-virgules. Les quatre cas de test ont donc les entrées suivantes:
Explication
Cela effectue à plusieurs reprises une convolution 2D du tableau d'entrée avec le masque suivant, qui définit quels voisins comptent comme contaminant:
Afin d'obtenir un résultat de la même taille que le tableau d'origine, il est d'abord complété avec un cadre de zéros et ensuite seule la partie "valide" de la convolution est conservée (c'est-à-dire sans effets de bord).
Un seuil de 2 est appliqué à la sortie de la convolution, et le résultat est OU par élément avec l'entrée d'origine.
Cela doit être fait un nombre suffisant de fois pour s'assurer que l'état final a été atteint. Un critère simple qui remplit cela est: itérer autant de fois que le nombre d'entrées dans le tableau d'entrée (c'est-à-dire 25 fois dans les cas de test).
la source
TI-BASIC, 151 octets
Saisissez comme
[[1,0,0,1,1][1,0,0,0,0]...]
.la source
Repeat
boucle.Lua, 236 octets
Accepte les entrées sur la ligne de commande et utilise la manipulation de chaînes de Lua pour obtenir la réponse.
Non golfé:
la source
APL,
767270 octetsCe que cela fait, c'est: étendre la matrice à 7x7, puis centrer notre argument (oméga). À partir de cette matrice, générez 4 matrices "enfants", chacune décalée dans une direction différente (haut / bas / gauche / droite), ajoutez-les ensemble (donc on obtient le nombre de voisins), déposez le cadre (pour revenir à un Matrice 5x5). Ou cette nouvelle matrice avec l '"ancienne", pour nous assurer que nous n'avons pas laissé de cellules dans le processus (c'est-à-dire au bord). Ensuite, utilisez la
⍣≡
combinaison pour obtenir une valeur à virgule fixe.exemple (considérant que la fonction a été assignée
contaminate
):la source