Mes enfants ont un tapis d'alphabet avec lequel jouer, quelque chose comme ceci:
Après des mois avec les carreaux du tapis placés au hasard, je me suis fatigué et j'ai placé tous les carreaux du tapis regroupés par sections en fonction de leurs couleurs de fond. Donc, si les lettres représentent la couleur d'arrière-plan, j'ai un tapis comme celui-ci:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Ainsi, pour les couleurs A, B, C, D et E, il existe toujours un moyen de connecter toutes les tuiles avec la même couleur de fond horizontalement ou verticalement dans le passe-partout. C'est ce que j'appelle un tapis correctement groupé par couleurs . Vous pouvez voir les groupes de l'exemple précédent dans les tableaux suivants:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
De plus, il n'y a qu'un seul groupe pour chaque couleur, donc ce ne serait pas valide:
ABA
ABA
Parce que les tuiles de couleur A ne sont pas regroupées dans un seul groupe. Cela ne serait pas non plus valide car les tuiles ne se connectent pas horizontalement ou verticalement:
AB
BA
Le défi
Étant donné un tableau bidimensionnel de caractères dans la plage ASCII imprimable (n'a pas besoin d'être carré tant que la taille des deux dimensions est égale ou supérieure à 1), vérifiez si le tableau représente un tapis correctement groupé par couleurs (chaque caractère différent du tableau représente une couleur différente). L'entrée peut être dans n'importe quel format raisonnable tant qu'elle représente un tableau de caractères à 2 dimensions (tableau de caractères 2D, tableau de chaînes de même longueur, etc.), et la sortie doit être une paire de valeurs true et falsey (0 / 1, 't' / 'f', true / false, peu importe tant que quelque chose est retourné et que les valeurs de retour sont cohérentes entre les entrées).
Il s'agit de code-golf, donc le programme / fonction / méthode / lambda le plus court pour chaque langue peut gagner!
Exemples
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
Mon tapis correctement regroupé par couleurs
(Je dois encore fixer ces frontières ...)
Réponses:
MATL ,
1615 octetsL'entrée est un tableau de caractères 2D (avec des lignes séparées par
;
). La sortie est0
si l'entrée est qualifiée, ou1
autrement.Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Le code vérifie essentiellement si chaque caractère dans l'entrée n'a qu'un seul composant connecté, compte tenu de la connectivité 4 (c'est-à-dire pas de diagonales).
Les caractères répétés sont traités à plusieurs reprises (ce qui est plus golfique que la déduplication).
la source
Befunge-93, 317 octets
Modifier: corrigé pour un décompte d'octets correct. Peut également être joué plus loin
Imprime 1 comme véridique, 0 comme falsey
Essayez-le en ligne
Voici une visualisation du chemin emprunté par le pointeur
Remarque: c'est pour une ancienne version
Comment ça fonctionne
Voici un pseudocode rapide et sale
Fondamentalement, après avoir stocké l'entrée, elle passe par le tout, vérifiant chaque espace. Lorsqu'il trouve un espace contenant un personnage, il ajoute les coordonnées à la pile. Ensuite, il vérifie récursivement les espaces autour de lui pour le même caractère, en définissant chaque espace à 0. Lorsqu'il a épuisé la section de ce personnage, il vérifie si ce personnage a déjà eu une section. Si tel est le cas, retournez 0. Sinon, ajoutez-le au tableau de caractères. Une fois qu'il a parcouru toute la grille sans doublons, il renvoie 1.
Pour les personnes familiarisées avec Befunge, voici une version espacée du code
la source
J, 66 octets
c
définit un verbe qui vous indique si une matrice de uns et de zéros est c onnected. Il traite les singleton comme un cas spécial de vrai. Sinon, il prend un nombre de voisins orthogonaux de chaque cellule, puis le signe de ce nombre, puis multiplie cela avec la matrice d'origine: si ce produit est égal à la matrice d'origine, alors il est connecté.Le décompte des voisins est obtenu en décalant dans les 4 directions, puis en additionnant. Le décalage dans 4 directions est obtenu en utilisant la fonction "
x
-arg can by a table" de rotation / décalage|.
Enfin, la réponse elle-même a été obtenue en créant une matrice uns / zéros pour chaque élément unique
~.
de l'entrée, puis en s'assurant que toutes ces matrices sont connectées. Ceci est le verbe à la deuxième ligne.Essayez-le en ligne!
la source
JavaScript (ES6), 114 octets
Prend l'entrée comme un tableau de chaînes. Renvoie
0
ou1
.Cas de test
Afficher l'extrait de code
Formaté et commenté
la source
Wolfram Language (Mathematica) , 96 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste 2D de caractères: par exemple
{{"A","B"},{"C","D"}}
,.Le
personnage est\[Transpose]
.Comment ça fonctionne
Pour chaque caractère
c
dans l'entrée, prend leSubgraph
de laGridGraph
même choseDimensions
que l'entrée qui correspond à chaquePosition
dans lequelc
se produit, et vérifie si c'est unConnectedGraphQ
.la source
Python 2 , 247 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 181 octets
Chaque fois qu'une nouvelle tuile de couleur est trouvée, remplissez celles connectées avec des chaînes vides. Si le tapis est correctement groupé par couleurs, toutes les tuiles doivent être remplies de chaînes vides.
Code de test
Afficher l'extrait de code
la source