Ce défi vous fera compter les pseudopolyformes sur le carrelage carré adouci .
Je pense que cette séquence n'existe pas encore sur l' OEIS , donc ce défi existe pour calculer autant de termes que possible pour cette séquence.
Mise à jour: c'est maintenant sur l'OEIS comme A309159 : Nombre de polyformes généralisées sur le pavé carré adouci avec n cellules.
Définitions
Le pavage carré adouci est un pavage semi-régulier du plan qui se compose de triangles et de carrés équilatéraux.
Une pseudo-polyforme sur le carrelage carré est une figure plane construite en joignant ces triangles et carrés le long de leurs côtés communs, de manière analogue à un polyomino. Voici un exemple de pseudo-polyforme à six et huit cellules:
Exemples
Car n = 1
il y a deux pseudo-polyformes à 1 cellule, à savoir le carré et le triangle:
Car n = 2
il y a deux pseudo-polyformes à 2 cellules, à savoir un carré avec un triangle et deux triangles.
Car n = 3
il y a quatre pseudo-polyformes à 3 cellules.
Défi
Le but de ce défi est de calculer autant de termes que possible dans cette séquence, qui commence 2, 2, 4, ...
et où le n-ième terme est le nombre de pseudo-polyformes à n cellules jusqu'à la rotation et la réflexion.
Exécutez votre code aussi longtemps que vous le souhaitez. Le gagnant de ce défi sera l'utilisateur qui publiera le plus de termes de la séquence, ainsi que son code. Si deux utilisateurs affichent le même nombre de termes, celui qui publie son dernier terme au plus tôt l'emporte.
(Une fois qu'il y a suffisamment de termes connus pour prouver que cette séquence n'existe pas déjà dans l'OEIS, je vais créer une entrée dans l'OEIS et répertorier le contributeur comme co-auteur s'il le souhaite.)
la source
Réponses:
Haskell
Maintenant que non seulement le document de commentaires selon lequel Peter Taylor a été le premier à donner suffisamment de termes pour rechercher sur OEIS, je peux donner mes résultats.
Plus tôt, j'ai compté les polyominos hexagonaux . À l'exception de quelques optimisations, ce que je fais ici est très similaire.
Les éléments du pavage sont représentés comme ceci: Vous pouvez aller en ligne presque droite de gauche à droite (dans la première image), en alternant entre les carrés et les rectangles. Il y a d'autres lignes presque parallèles, se tortillant dans des directions opposées. Ensemble, il leur manque quelques triangles. Il existe des lignes parallèles presque droites similaires de bas en haut, contenant les triangles manquants. Ignorez maintenant le tremblement et utilisez un système de coordonnées cartésiennes, mais utilisez uniquement des nombres impairs pour les coordonnées des carrés. Ensuite, les triangles obtiennent naturellement des paires de coordonnées avec une coordonnée paire et une coordonnée impaire. Les paires avec les deux coordonnées ne représentent même pas des éléments du pavage.
(Vous pourriez aussi bien utiliser des nombres pairs pour les coordonnées des carrés. Je suppose que j'ai décidé de cette façon parce que j'ai pensé à la réflexion avant la rotation.)
Enregistrez le programme dans un fichier avec un nom similaire
cgp.hs
et compilez avecghc -O2 -o cgp cgp.hs
. Il prend soit un argument de ligne de commande numérique et calcule le nombre de polyominos de cette taille, soit aucun, auquel cas il calcule les valeurs jusqu'à l'arrêt.Essayez-le en ligne!
la source
2, 2, 4, 10, 28, 79, 235, 720, 2254, 7146, 22927, 74137, 241461, 790838, 2603210, 8604861, 28549166, 95027832
Je vais miser sur le terrain avant que Christian Sievers ne poste une réponse pour n = 18. C'est aussi loin que je peux aller avec le code actuel et 16 Go de RAM. J'ai déjà dû sacrifier une certaine vitesse pour réduire l'utilisation de la mémoire, et je vais devoir le faire encore plus. J'ai quelques idées ...
Cet extrait est le SVG du premier commentaire.
Le code est C #. Je l'ai exécuté avec .Net Core 2.2.6 sous Linux.
la source