Desafio
Dada uma forma de arte ASCII, você deve descobrir se a forma é um hexágono regular ou não.
Hexágonos
Um hexágono regular é definido usando duas regras:
- Tem seis lados
- Cada lado tem um número igual de caracteres
Por exemplo, a seguinte forma é regular, mas não possui seis lados e, portanto, não é um hexágono regular :
B a a h
s a i d
y o u r
g a o t
Da mesma forma, a forma a seguir tem seis lados, mas lados de comprimentos diferentes e, portanto, não é um hexágono regular :
* *
* * *
* * * *
* * *
* *
No entanto, a forma a seguir tem seis lados e todos os lados têm o mesmo número de caracteres, portanto, é um hexágono regular:
T h e
h e x a
g o n s a
r e c o
m i n
Regras
A saída deve ser um valor verdade ou falsey (verdade se a forma for um hexágono regular, falsey se não).
As formas sempre conterão caracteres ASCII imprimíveis.
A borda da forma nunca conterá espaços. Se isso acontecer, você pode retornar Falsey.
Pode haver quantidades arbitrárias de espaço em branco antes e / ou depois da forma.
Todos os ângulos na forma podem não ser iguais, por exemplo, a seguinte forma é uma entrada válida:
. . .
. . .
. . . . .
. . . .
. . .
Retornará um valor falsey.
Todas as entradas de forma estarão em uma grade separada por espaço. A entrada hexagonal estará em uma grade escalonada (cada linha é deslocada da seguinte).
Exemplos
Truthy
As seguintes formas devem retornar valores de verdade:
# _
+ + +
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
O seguinte deve retornar valores 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
*
* *
* * *
.....
.......
.........
.......
.....
Essa forma não está em uma grade separada por espaço e não é escalonada.
* * * *
---------
* * * * * *
-------------
* * * * * *
---------
* * * *
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Para entradas de um caractere, seu programa pode gerar truthy ou falsey:
&
Ganhando
O programa mais curto em bytes vence.
5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3
e um com um espaço adicional à frente de uma das linhas: ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3
(os espaços à esquerda são substituídos por s
para tornar um pouco mais claro neste formato não formatado) . Todos os 10 casos de teste estão validando corretamente com meu código atualmente, mas esses dois casos falhariam com a abordagem que eu usei.