Le Tangram est un puzzle de dissection composé de sept formes: cinq triangles de tailles différentes, un parallélogramme et un carré. Étant donné une forme, l'objectif est de recréer la forme en utilisant toutes les pièces et sans se chevaucher. Il existe évidemment une infinité de façons d'organiser cet ensemble de pièces dans l'avion. Un sous-ensemble intéressant est le
Grille Tangrams
Nous pouvons dessiner le carré Tangram "standard" en un carré plus grand qui est divisé par une grille en 16 carrés plus petits. Les tangrams de la grille ne sont que des formes constituées des pièces du tangram, de sorte que tous les sommets des pièces se trouvent sur les points de la grille.
Ce sont les types de puzzles Tangram que nous voulons considérer dans ce défi, car ils sont probablement plus faciles à gérer que les plus généraux.
En remarque: Les mathématiciens chinois Chuan-Chin Hsiung et Fu Traing Wang ont prouvé en 1942 qu'il n'y avait que 13 tangrams convexes. Ils ont d'abord montré que le problème peut être réduit à des tangrammes de grille, puis ont utilisé des arguments combinatoires et géométriques. Ce sont tous ces 13:
Défi
Étant donné un tangram de grille résoluble, produire une dissection du tangram de grille dans les sept morceaux de tangram.
IO
Un tangram est donné comme une image en noir et blanc (la forme est en noir, le fond en blanc), avec des multiples des deux côtés de 50px. La grille a une largeur d'exactement 50px. Les lignes de la grille sont parallèles aux côtés de l'image.
MODIFIER: L'image peut être acceptée en entrée et renvoyée en sortie dans n'importe quel format d'image raster pratique comme PNG, TIFF, PBM, etc., mais une représentation sous forme de tableau binaire 2D, de chaîne ou de matrice est acceptable.
La sortie devrait à nouveau avoir la même taille et devrait avoir à nouveau la même forme, mais avec chaque pièce une couleur différente, ou alternativement avec des lignes blanches séparant toutes les pièces. Il convient de noter que le quadrilatère non rectangulaire peut être inversé.
Les pixels sur la bordure des pièces ne doivent pas exactement correspondre à ceux de la forme, même s'il y a des effets de repliement ou d'autres flous, c'est toujours correct.
Exemple d'entrée et de sortie:
Exemples:
Solutions possibles:
Réponses:
BBC BASIC,
570 514490 octets ASCIITéléchargez l'interprète sur http://www.bbcbasic.co.uk/bbcwin/download.html
435 octets tokenisés
Le programme complet affiche une entrée de
L.bmp
sur l'écran, puis la modifie pour trouver une solution.Explication
Notez que dans BBC basic, une distance de 1 pixel = 2 unités, de sorte que la grille de 50 x 50 pixels devient une grille de 100 x 100.
Nous utilisons une fonction récursive pour placer les 2 grands triangles, triangle moyen, carré et parallélogramme dans la forme. La forme antérieure de la liste est dessinée avant le prochain appel récursif. si un appel récursif revient sans trouver de solution, la forme précédente est sur-dessinée en noir et une nouvelle position de la forme précédente est essayée.
Une fois ces cinq formes dessinées, placer les deux petits triangles n'est qu'une formalité. Il est cependant nécessaire d'en dessiner un, afin de les distinguer s'ils partagent un bord commun. Nous colorons uniquement l'un des deux petits triangles. L'autre est laissé en noir naturel.
Le placement de chaque forme est tenté à différentes coordonnées x, y et en 4 rotations différentes. Pour tester s'il y a de l'espace libre pour dessiner une forme, nous utilisons le modèle ci-dessous, avec des angles de 45 degrés. Les rotations sont faites autour du
*
et les 8 pixels testés sont en 2 demi-cercles de rayon 9 et 81 unités et tombent sur des lignes rayonnantes à des multiples impairs de 22,5 degrés sur les axes x et y.Pour un grand triangle, les 8 espaces doivent être vides. Pour les autres formes, seules certaines cellules doivent être claires, un masque est donc appliqué.
Une fois qu'il est établi qu'une forme conviendra, elle doit être dessinée. S'il s'agit d'un triangle avec
PLOT 85
lequel il est tracé , s'il s'agit d'un parallélogramme, le nombre est 32 plus élevé (notez que, pour lesPLOT
besoins, nous considérons un carré comme un parallélogramme spécial). Dans les deux cas, 3 sommets consécutifs doivent être donnés. Le deuxième sommet est à l'origine de la forme (marqué*
dans le tableau ci-dessus) sauf dans le cas du grand triangle, où (avant la rotation) il est-1,-1.
Les 2 autres sommets peuvent avoir des coordonnées x et y-1,0 or 1
qui sont extraites de la base 3 nombres codés, puis mis à l'échelle par 99 et pivotés si nécessaire par transformation avecc
ets
.Code non golfé
Sortie
Ceci est un montage des solutions trouvées par le programme pour les cas de test. L'utilisation de 99 au lieu de 100 pour des raisons de golf laisse quelques petits trous noirs. Comme les formes sont redessinées pendant les recherches, l'exécution de certains cas peut prendre quelques secondes et est assez fascinante à regarder.
la source