Vous devez écrire un programme ou une fonction qui reçoit une chaîne décrivant le sol en entrée et en sortie ou renvoie la zone du méta-pavage le plus simple qui pourrait créer le motif donné du sol.
Le sol fait partie d'une grille carrée. Chaque tuile carrée est de couleur azur ou noire (représentée par a
et b
dans l'entrée).
Un exemple d'étage:
aaaa
ababab
aaaaa
Un méta-carrelage
- est construit à partir d' un
N
deM
méta-tuile rectangulaire de carrés noirs et d' azur - les méta-tuiles utilisées sont identiques jusqu'à la traduction (vous ne pouvez pas les faire pivoter ou les mettre en miroir)
- si les côtés de deux méta-tuiles sont connectés, ils doivent se connecter sur toute leur longueur (c.-à-d. que les méta-tuiles tuiles l'espace d'une manière de grille)
Un exemple de méta-tuile:
ba
aa
et le méta-carrelage créé par lui:
.
.
.
babababa
aaaaaaaa
... babababa ...
aaaaaaaa
babababa
aaaaaaaa
.
.
.
Ce méta-carrelage crée l'étage supérieur affiché comme le montrent les lettres de gauche:
.
.
.
********
***aaaa*
... *ababab* ...
*aaaaa**
********
********
.
.
.
Un méta-pavage est plus simple qu'un autre si la zone de son méta-pavé est plus petite. Notre exemple a une zone 2*2 = 4
qui est la plus petite possible pour l'exemple de sol. La sortie devrait donc être 4
pour l'exemple.
Contribution
- Une chaîne composée des caractères
a b space
etnewline
contenant au moins una
oub
. - Les lettres (
ab
) forment une forme à 4 connexions (connectées côte à côte). - Il n'y aura pas d'espaces inutiles à l'avant des rangées, c'est-à-dire qu'il y aura au moins une rangée commençant par
a
oub
. Vous pouvez choisir entre deux formats d'entrée:
- Aucun espace inutile à la fin des lignes (comme le montrent les exemples).
- Espaces sur le côté droit des lignes pour que toutes les lignes aient la même longueur que la ligne la plus longue.
Le retour à la ligne est facultatif.
Production
- Un entier unique, l'aire de la plus petite méta-tuile possible dont la mosaïque contient le sol en entrée.
Exemples
Les exemples sont délimités par des tirets. Les trois parties d'un exemple sont l'entrée, la sortie et l'une des plus petites méta-tuiles possibles.
a
1
a
-----------------
aaaa
aaa
a
1
a
-----------------
aabaab
abaa
aaba
6
aab
aba
-----------------
aabaab
a a a
aabab
18
aabaab
aaaaaa
aababa
-----------------
ba
aaab
8
baaa
aaab
-----------------
aaaa
ababb
aaaa
10
aaaaa
ababb
-----------------
a aa
ab ba
aba
6
aa
ab
ba
-----------------
aaaa
abab
aaaa
4
aa
ab
-----------------
ba
ba
b
4
ba
ab
-----------------
baa
aba
aab
9
baa
aba
aab
-----------------
aaaa
aabaa
aaaa
6
aaa
aab
C'est le golf de code, donc l'entrée la plus courte gagne.
Réponses:
C - 208 octets
Code équivalent avant de jouer au golf:
L'algorithme est assez brutal, il devrait donc être assez évident de savoir comment il fonctionne en fonction du code. Voici tout de même quelques commentaires:
q
. Se termine par unreturn
lorsqu'un méta-carreau peut couvrir le sol. Notez que la boucle n'a pas besoin d'une autre condition de sortie car il y a toujours une solution (le pire des cas est la taille de l'entrée).if
énumèrent les combinaisons valides de largeur / hauteur de méta-tuile pour la tailleq
.u
est l'indice dans la méta-tuile qui correspond à la tuile de plancher.a
oub
et sont différents (la somme dea = 97
etb = 98
est195
), il y a un décalage et la taille de la méta-tuile avec les dimensions tentées ne fonctionnera pas.a
oub
, la couleur de la tuile est copiée dans la méta-tuile candidate.Code de test utilisé:
Production:
la source