Challenge
Given an ASCII art shape, you must find out whether the shape is a regular hexagon or not.
Hexagons
A regular hexagon is defined using two rules:
- It has six sides
- Each side has equal numbers of characters
For example, the following shape is regular but it doesn't have six sides and so is not a regular hexagon:
B a a h
s a i d
y o u r
g a o t
Similarly, the following shape has six sides but has sides of different lengths and so is not a regular hexagon:
* *
* * *
* * * *
* * *
* *
However, the following shape has six sides and all of the sides have the same number of characters, so it is a regular hexagon:
T h e
h e x a
g o n s a
r e c o
m i n
Rules
Output should be a truthy or a falsey value (truthy if the shape is a regular hexagon, falsey if not).
The shapes will only ever contain printable ASCII characters.
The border of the shape will never contain spaces. If it does, you can return falsey.
There can be arbitrary amounts of whitespace before and/or after the shape.
All angles in the shape may not be equal for example, the following shape is valid input:
. . .
. . .
. . . . .
. . . .
. . .
It will return a falsey value.
All shape inputs will be on a space separated grid. Hexagonal input will be on a staggered grid (each line is offset from the next).
Examples
Truthy
The following shapes should return truthy values:
# _
+ + +
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
The following should return falsey values
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
*
* *
* * *
.....
.......
.........
.......
.....
This shape is not on a space separated grid and is not staggered.
* * * *
---------
* * * * * *
-------------
* * * * * *
---------
* * * *
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
For single character inputs, your program may output either truthy or falsey:
&
Winning
The shortest program in bytes wins.
5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3
and one with an additional space leading for one of the rows:ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3
(leading spaces are replaced withs
to make it a bit more clear in this unformatted form). All 10 of your test cases are validating correctly with my code currently, but these two cases would fail with the approach I used. \$\endgroup\$