L'un des jouets préférés de mon enfant est un ensemble comme celui-ci . En fait, c'est l'un de mes jouets préférés - j'ai joué avec et ça m'a donné des idées de défis PPCG. En voici un:
Écrivez un programme ou une fonction qui prend en entrée un dessin au trait ASCII et décide s'il se replie ou non en cube.
Contribution
L'entrée consistera en exactement un hexomino construit à partir de carrés comme celui-ci:
+-+
| |
+-+
Par exemple, un heximino d'entrée valide est:
+-+
| |
+-+-+-+-+
| | | | |
+-+-+-+-+
| |
+-+
Sortie
- Une valeur vraie si l'hexomino peut être plié en cube, ou
- Une valeur de falsey sinon.
Pour nous faire économiser un peu de travail, wikipedia a de jolis graphismes de:
- Les 35 hexominos:
- Les 11 hexominos qui se replient en cubes:
Remarques
- Les hexominos d'entrée peuvent avoir une rotation ou une réflexion, et pas seulement ceux montrés dans les images ci-dessus
- Les hexominos d'entrée peuvent avoir des espaces de tête, mais seront correctement alignés par rapport à eux-mêmes
- Les hexominos d'entrée peuvent avoir un espace de fin à la fin des lignes et des sauts de ligne à la fin de l'entrée
code-golf
ascii-art
kolmogorov-complexity
geometry
Traumatisme numérique
la source
la source
Réponses:
PMA / Escargots , 130
ou plus "lisiblement",
Fait inhabituel, un problème est survenu qui peut être géré par le nombre limité de fonctionnalités mises en œuvre jusqu'à présent. le
!(z\ )
motif détermine que la position actuelle est à l'espace au milieu d'un carré en utilisant une affirmation négative qu'il y a un espace dans une direction "octilinéaire". L'idée générale est de vérifier un motif qui place un carré à chacun des 5 emplacements nécessaires par rapport au carré sur lequel la correspondance commence. En outre, il doit vérifier qu'il ne se trouve pas dans un bloc de carrés 2x2. Avant que le programme ne fonctionne, j'ai dû corriger un bogue avec l'analyse des parenthèses.Si l'hexomino ne mappe pas un cube,
0
est imprimé. Si c'est le cas, un entier positif est imprimé (nombre de correspondances).J'ai adapté ce générateur polyomino pour créer tous les cas de test possibles:
la source
Rubis,
173148145143octetsDernier changement:
/2
à droite de<
remplacé par*2
à gauche. Permet l'élimination d'un ensemble de()
Explication
Le code est en deux parties: une fonction principale sans nom qui effectue l'analyse, et une fonction auxiliaire sans nom affectée à la variable
h
qui effectue la vérification.La fonction principale parcourt la chaîne par octets, en ajoutant les coordonnées x et y
i,j
de tous les+
symboles trouvés dansx[]
ety[]
. Il appelle ensuiteh
deux fois. La première fois qu'il suppose que l'hexomino est horizontal (x[]
contient les longueurs ety[]
les largeurs) et la deuxième fois, il suppose qu'il est vertical.La fonction
h
prend les coordonnées longitudinales dans le tableaub
puis les coordonnées longitudinales dans le tableauc
. Il calcule la longueur (en carrés) de l'expression(b.max.b.min)/2
. S'il est inférieur ou égal à 3, l'hexomino doit être évalué dans l'autre sens, donch
retournefalse
.L'inspection des hexominos montrera que si la longueur est de 4, les hexominos qui se replieront en cube n'auront pas plus de 2 carrés (3
+
symboles) dans la première et la dernière rangée . La plupart des carrés sont concentrés sur la rangée du milieu, qui deviendra l'équateur du cube. Cette condition s'avère nécessaire et suffisante pour un hexomino de longueur 4 qui se repliera en cube.Il n'y a qu'un seul hexomino de longueur 5 qui se repliera en cube. Il a 3 carrés (4
+
symboles) dans ses première et dernière lignes. Tous les autres hexominos de longueur 5 en ont 5 ou plus+
symboles dans la première ou la dernière ligne.Il n'y a qu'un seul hexomino de longueur 6. Il a 7
+
symboles sur chaque ligne.En combinant tout cela, il suffit de vérifier que la longueur de l'hexomino est supérieure à 3 et que le nombre de
+
symboles sur les première et dernière lignes (selon le plus élevé) est inférieur à la longueur.Non testé dans le programme de test
la source
JavaScript (ES6), 443
431Modifier la correction de bogue, problème lors de l'analyse d'entrée, suppression des colonnes vides
C'est très long, et même plus car l'analyse des entrées est une grande partie de la tâche.
Ce que je fais est de vérifier si l'entrée donnée est l'un des 11 hexominos pliables.
Chaque hexomino pliable peut être mappé sur un bitmap 5x5 (jusqu'à 8 différents, avec simulation et rotations). Pris les bitmaps en tant que nombre 25 bits, j'ai trouvé les valeurs min pour les 11 hexominos notés, en utilisant le code suivant (avec un format d'entrée très simple)
Ça donne
[1505,2530,3024,4578,252,6552,2529,4577,2499,4547,7056]
Donc, étant donné la chaîne d'entrée, je dois faire de même pour trouver le bitmap min, puis retourner true si ce nombre est présent dans ma liste de précalcification.
Exécutez l'extrait de code pour tester dans Firefox
Afficher l'extrait de code
la source
,\nt=t
partir de la fin de la deuxième ligne / du début de la troisième ligne?