Comme vous le savez probablement maintenant, il existe 2339 solutions au puzzle pentomino dans une grille 6x10. Il existe différents schémas d'étiquetage pour les 12 pentominos, dont deux sont illustrés sur l'image ci-dessous:
Crédit d'image: Wikipedia
Aux fins de la tâche actuelle, nous dirons qu'une solution de pentomino normalisée est une solution qui utilise le deuxième schéma d'étiquetage (Conway).
Exemple:
O O O O O S S S Z Z
P P R R S S W W Z V
P P P R R W W Z Z V
U U X R T W Y V V V
U X X X T Y Y Y Y Q
U U X T T T Q Q Q Q
La pièce à 5 carrés consécutifs est désignée par des lettres O
, selon le schéma. La même chose est vraie pour toutes les pièces.
Tâche:
Étant donné une solution au pentomino 6x10 dans lequel les pièces sont étiquetées avec un schéma aléatoire, normalisez-la afin que toutes les pièces soient étiquetées dans le schéma d'étiquetage de Conway. Vous devez reconnaître les pièces et marquer chaque carré d'une pièce particulière avec le symbole de la pièce.
Contribution:
La solution à normaliser, dans n'importe quel format qui vous convient, par exemple:
Une chaîne multiligne
Une liste de chaînes
Une liste de listes de personnages
etc
Production:
La même solution (toutes les positions et orientations des pièces sont conservées), mais chaque pièce est étiquetée selon le schéma d'étiquetage de Conway. Remarque: La sortie DOIT être IMPRIMÉE sous forme d'une grille de 6 x 10 caractères. Les nouvelles lignes et les espaces de début et de fin sont autorisés. Vous pouvez également imprimer un espace entre les caractères (mais pas les lignes vides), comme dans l'exemple ci-dessus.
Cas de test:
1. Entrée:
6623338888
6222344478
66A234BB70
1AAA94B770
11A99BB700
1199555550
Production:
UURTTTQQQQ
URRRTVVVSQ
UUXRTVZZSY
PXXXWVZSSY
PPXWWZZSYY
PPWWOOOOOY
2. Entrée:
45ookkkk00
455ooogk00
4a55gggdd0
4aaa3gnnd.
4am333ndd.
mmmm3nn...
Production:
OWSSQQQQPP
OWWSSSRQPP
OTWWRRRUUP
OTTTXRZZUV
OTYXXXZUUV
YYYYXZZVVV
Critères gagnants:
La solution la plus courte en octets dans chaque langue l'emporte. Ne vous laissez pas décourager par les langues de golf. Les explications des algorithmes et des implémentations sont les bienvenues.
la source
Réponses:
APL (Dyalog Classic) ,
545350 octetsEssayez-le en ligne!
Calculez un invariant pour chaque pentomino en entrée: mesurez (∆x, ∆y) de chacun de ses carrés à son centre de gravité, prenez abs (∆x) et abs (∆y), additionnez les composantes x et séparément y et multipliez les deux sommes. Cela donne 12 résultats distincts. Ensuite, trouvez l'indice de chaque invariant de pentomino dans la collection triée de tous les invariants. Remplacez 0 par
'O'
, 1 par'X'
, 2 par'R'
, etc.la source
Gelée , 37 octets
Un programme complet prenant une liste de chaînes (car nous devons imprimer - sinon supprimez la fin
Y
et vous avez une monade prenant une liste de listes de nombres ou de caractères qui retourne une liste de listes de caractères).Essayez-le en ligne!
Comment?
Je crois que cela fonctionne en utilisant la même catégorisation des pentominos que la solution APL de ngn , bien que d'une manière légèrement différente (je ne connais pas non plus l'APL, donc je ne suis pas sûr de la similitude de la méthode au-delà de la catégorisation).
(Notez qu'il
“æṂ⁾+’Œ?¤+78Ọ
ne s'agit que d'une sauvegarde d'un octet“XRPTZWUYSVQO”
!)la source
Wolfram Language (Mathematica) , 103 octets
Prend la saisie comme une liste de listes de caractères.
Essayez-le en ligne!
L'idée principale ici est que pour chaque caractère dans l'entrée, nous trouvons les coordonnées où il se produit, prenons le kurtosis et additionnons ses coordonnées. Cela nous donne un invariant pour chaque pièce.
(Le kurtosis est un opérateur peu pertinent pour les statistiques - la clé est qu'il est invariant en translation, tandis que la réflexion et la rotation peuvent changer l'ordre des coordonnées au plus. Nous additionnons les coordonnées, donc l'invariant ne change jamais.)
Quoi qu'il en soit, à l'exception de l'invariant bizarre, cette solution est similaire aux autres: nous trions les caractères et les pièces par chaque invariant, puis remplaçons chaque caractère par le caractère correspondant de
"UPSWZVRTQXYO"
: les pièces, triées par somme kurtosis.Enfin,
""<>Riffle[...,"\n"]
est le code d'impression sous forme de grille.la source
Sort@Variance
remplacéTr@Kurtosis
, et probablement plus de gens ont entendu parler de variance. MaisTr@Variance
cela ne fonctionne pas car plusieurs pentominos (tels que P et X) ont la même somme de variance x et de variance y. J'ai donc parcouru la documentation de Mathematica pour trouver quelque chose d'amateur.Python 2 , 191 octets
Essayez-le en ligne!
Prend une chaîne de plusieurs lignes avec un retour à la ligne de fin et fait six compréhensions de liste imbriquées.
Version non golfée
la source