Il a été prouvé que les 13 tuiles Wang carrées suivantes tuiles toujours l'avion en apériodique . Cela signifie que lorsque les carrés sont disposés dans une grille avec tous les côtés voisins de la même couleur, une translation du motif ne correspondra jamais à elle-même.
Nous représenterons chaque tuile textuellement par une grille 3 × 3 remplie d'espaces au centre et dans les coins, et les nombres 1 à 5 au lieu des couleurs rouge, vert, bleu, jaune, gris, sur les bords:
2 2 2 1 1 1 4 3 2 2 4 3 2
1 2 1 3 2 3 2 1 3 1 3 2 4 4 4 4 4 5 4 5 5 5 5 5 5 4
3 2 3 2 3 2 1 2 1 4 1 2 2
Objectif
Votre tâche consiste à écrire un programme qui prend une largeur et une hauteur et génère une grille de tuiles Wang valide avec ces dimensions. Un pavage valide est celui dans lequel tous les bords de carreaux adjacents ont la même couleur (ou nombre). Le plus petit programme en octets gagne.
Votre entrée doit provenir d'arguments stdin ou de ligne de commande et la sortie doit aller à stdout. Le format d'entrée exact peut être quelque chose de raisonnablement évident, comme >>> wangtiler 3 2
. La largeur et la hauteur sont toujours des entiers positifs.
Exemple (largeur = 3, hauteur = 2)
Notez que lorsque nous mettons en page les tuiles textuelles, les bords voisins forment les paires redondantes nécessaires de chiffres:
1 2 1
2 11 22 1
2 3 2
2 3 2
4 55 55 4
1 2 2
(Ce n'est PAS le format de sortie approprié.)
Nous pouvons les compresser horizontalement et verticalement pour obtenir:
1 2 1
2 1 2 1
2 3 2
4 5 5 4
1 2 2
Ce format compressé est le format de sortie approprié que vous devez utiliser. Les lignes impaires doivent inclure leur espace de fin.
Bonus graphique
Au lieu d'avoir une sortie textuelle, votre programme peut sortir une image de la grille carrelée. Les carreaux graphiques doivent être constitués de quatre triangles 45-45-90 disposés en carré et utiliser cinq couleurs facilement reconnaissables comme les carreaux ci-dessus. Les bordures noires ne sont pas obligatoires. Les tuiles graphiques doivent avoir une taille d'au moins 32 × 32 pixels. Aucune "compression" ne leur est appliquée.
Exemple d'image bonus: (même grille que l'exemple ci-dessus)
Le bonus vaut moins 150 octets.
Remarques
- Vous devez utiliser cet ensemble de 13 tuiles.
- Les carreaux ne peuvent pas être tournés.
- Les vignettes peuvent apparaître un certain nombre de fois (y compris aucune).
- Vous pouvez supposer qu'un carrelage valide avec toutes les dimensions est possible.
la source
Réponses:
GolfScript, 200 caractères
Version ASCII sans sortie graphique. Donnez votre avis sur STDIN - essayez ici . Le code utilise une approche de retour en arrière simple et remplit l'espace ligne par ligne.
Exemples:
Bonus graphique, marque 122, 272 caractères - 150 bonus
Même code de base avec un formateur de sortie différent. La sortie est une image au format PPM (c'est-à-dire redirige simplement la sortie vers un fichier
image.ppm
). Les couleurs sont légèrement différentes de celles des carreaux dans la question, mais clairement distinctes (1-> bleu, 2-> vert, 3-> cyan, 4-> rouge, 5-> magenta).Exemple 16x12:
la source
Python (565 - 150 = 415)
Btw ... il semble que nous ne pouvons pas naïvement décider de la prochaine tuile par sa tuile gauche et supérieure. Il y a une combinaison de tuiles qui s'emboîtent.
Cette solution remplit les forces brutes de gauche à droite, de haut en bas à travers toutes les combinaisons possibles et les retours en arrière si une tuile ne peut pas rentrer.
Pour plus d'informations sur les 13 carreaux: un ensemble apériodique de 13 carreaux Wang
La largeur et la hauteur sont spécifiées par
W
etH
Rouge, Vert, Bleu, Jaune et Noir spécifiées par
R
,G
,B
,Y
etN
Sortie. Pas le schéma de couleurs réel ... car trop flagrant. Cela pourrait faire des motifs de décoration intérieure intéressants ...:
la source
Haskell, 208 octets
Pas de recherche, juste des maths. Exemple d'exécution: donné
(8,5)
sur stdin, sortiesCourez en ligne sur Ideone
la source