Les polystrips sont un sous-ensemble de polyominos se conformant aux règles suivantes:
- chaque pièce se compose de 1 ou plusieurs cellules
- aucune cellule ne peut avoir plus de deux voisins
- les cellules ne doivent pas fermer un trou
Les polyominos libres sont distincts quand aucun n'est une transformation rigide (translation, rotation, réflexion ou réflexion de glissement) d'un autre (morceaux qui peuvent être ramassés et retournés). La traduction, la rotation, la réflexion ou le glissement reflétant un polyomino libre ne change pas sa forme ( Wikipedia )
Par exemple, il existe 30 heptastrips libres (polystrips de longueur 7). Voici tous, emballés dans une grille 14x15.
Crédit d'image: Miroslav Vicher
Objectif
Écrivez un programme / une fonction qui prend un entier positif n
en entrée et énumère les n
bandes de couleurs libres distinctes .
n = 1 -> 1 (un seul carré)
n = 2 -> 1 (Il n'y a qu'une seule bande 2 possible composée de 2 carrés)
n = 3 -> 2 (l'un est composé de 3 carrés réunis en ligne et l'autre est en forme de L)
n = 4 -> 3 (une droite, une en L et une en Z)
. . .
Cas de test:
n polystrips
1 1
2 1
3 2
4 3
5 7
6 13
7 30
8 64
9 150
10 338
11 794
12 1836
13 4313
14 10067
15 23621
Notation
C'est du code-golf , donc le code le plus court est meilleur. J'apprécierais fortement les explications détaillées de l'algorithme et du code.
Implémentation de référence partielle dans J
J'ai décidé de décrire chaque pièce au format "vecteur" et je n'ai besoin que de n-2 blocs pour décrire une pièce n-polystrip (il n'y a que 1 2-polystrip et elle est retournée explicitement). Les blocs décrivent la direction relative: 0 - pas de changement; 1 - tournez à gauche; 2 - tournez à droite. Peu importe dans quelle direction on commencera, mais seulement pour indiquer où la cellule suivante doit être placée. Il peut y avoir n'importe quel nombre de 0 consécutifs, mais les 1 et les 2 sont toujours simples. Cette implémentation est partielle, car elle ne tient pas compte des trous - les solutions pour n> 6 comptent également les pièces avec des trous.
101010
dans votre exemple de notation)?