Défi
Étant donné une forme d'art ASCII, vous devez savoir si la forme est un hexagone régulier ou non.
Hexagones
Un hexagone régulier est défini selon deux règles:
- Il a six côtés
- Chaque côté a un nombre égal de caractères
Par exemple, la forme suivante est régulière mais elle n'a pas six côtés et n'est donc pas un hexagone régulier :
B a a h
s a i d
y o u r
g a o t
De même, la forme suivante a six côtés mais a des côtés de longueurs différentes et n'est donc pas un hexagone régulier :
* *
* * *
* * * *
* * *
* *
Cependant, la forme suivante a six côtés et tous les côtés ont le même nombre de caractères, il s'agit donc d'un hexagone normal:
T h e
h e x a
g o n s a
r e c o
m i n
Règles
La sortie doit être une valeur true ou falsey (true si la forme est un hexagone régulier, falsey sinon).
Les formes ne contiendront que des caractères ASCII imprimables.
La bordure de la forme ne contiendra jamais d'espace. Si c'est le cas, vous pouvez retourner falsey.
Il peut y avoir des quantités arbitraires d'espaces avant et / ou après la forme.
Tous les angles de la forme peuvent ne pas être égaux par exemple, la forme suivante est une entrée valide:
. . .
. . .
. . . . .
. . . .
. . .
Il renverra une valeur de falsey.
Toutes les entrées de forme seront sur une grille séparée par des espaces. L'entrée hexagonale sera sur une grille décalée (chaque ligne est décalée de la suivante).
Exemples
Truthy
Les formes suivantes doivent renvoyer des valeurs véridiques:
# _
+ + +
9 :
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
t h i s
i s
a h
e x
a g
o n
! ! ! !
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Falsey
Les éléments suivants doivent renvoyer les valeurs de falsey
r e c t a
n g l e s
h e l l o
w o r l d s
t h i s i s b
e t a d e c
a y n o w
*
* *
* * *
.....
.......
.........
.......
.....
Cette forme n'est pas sur une grille séparée par des espaces et n'est pas décalée.
* * * *
---------
* * * * * *
-------------
* * * * * *
---------
* * * *
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Pour les entrées à un seul caractère, votre programme peut produire soit true soit falsey:
&
Gagnant
Le programme le plus court en octets gagne.
la source
5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3
et un avec un espace supplémentaire en tête pour l'une des lignes:ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3
(les espaces de tête sont remplacés pars
pour le rendre un peu plus clair dans cette forme non formatée) . Tous les 10 de vos cas de test valident correctement avec mon code actuellement, mais ces deux cas échoueraient avec l'approche que j'ai utilisée.Réponses:
R, 184 octets
Golfé, pourrait probablement être joué par quelques octets
Non golfé, très en désordre, plus comme à mi-golf
Étant donné que le format d'entrée n'est pas spécifié, l'entrée doit être spécifiée dans un format de tableau R, ressemblant à ceci.
Voici une fonction de générateur qui génère l'entrée. Le générateur ne génère pas un objet qui est introduit dans la fonction de vérification hexagonale, mais plutôt le code spécifiant le tableau (en fait la même chose). Cela ne doit donc pas compter comme une analyse du texte. N'oubliez pas que je ne saisis pas de texte, mais plutôt une structure de tableau.
Par exemple, le code généré serait:
structure(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), .Dim = c(5L, 9L ))
qui est identique àarray(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9))
Espérons que cette méthode de saisie soit conforme aux règles.
Voici les cas de test
Générer des tableaux d'entrée
Test d'hexagone
la source
f(array(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9)))
JavaScript (ES6), 214 octets
Où
\n
représente un caractère de nouvelle ligne littéral. Non golfé:la source
" x\n g g\ng g g\n g g"
devrait donner false, mais donne true.x
?SnakeEx , 200 octets
La bonne langue pour le travail ... en quelque sorte.
SnakeEx est un langage de correspondance de motifs 2D défi de . Il devrait être vraiment bon dans cette tâche, mais malheureusement, tous les cas d'angle ont vraiment gonflé le code. J'ai également découvert quelques bogues d'interprète. C'était quand même un défi amusant.
m
est le serpent principal qui appelle tous les autres pour faire le travail. Cela correspond à partir du coin supérieur droit de l'hexagone et dans le sens horaire. Les groupes numérotés sont utilisés pour vérifier que les longueurs des côtés diagonaux sont toutes égales et que la longueur du côté horizontal correspond à la hauteur de la figure entière. Je pourrais écrire une explication plus détaillée, mais j'ai passé les deux derniers jours à traiter des cas d'angle, alors essayez-le par vous-même ici . : ^)la source
Perl,
127125124121 octetsComprend +4 pour
-0p
Donnez votre avis sur STDIN
la source