Desafío
Dada una forma de arte ASCII, debe averiguar si la forma es un hexágono regular o no.
Hexágonos
Un hexágono regular se define usando dos reglas:
- Tiene seis lados
- Cada lado tiene el mismo número de caracteres
Por ejemplo, la siguiente forma es regular pero no tiene seis lados y, por lo tanto, no es un hexágono regular :
B a a h
s a i d
y o u r
g a o t
De manera similar, la siguiente forma tiene seis lados pero tiene lados de diferentes longitudes y, por lo tanto, no es un hexágono regular :
* *
* * *
* * * *
* * *
* *
Sin embargo, la siguiente forma tiene seis lados y todos los lados tienen el mismo número de caracteres, por lo que es un hexágono regular:
T h e
h e x a
g o n s a
r e c o
m i n
Reglas
La salida debe ser un valor verdadero o falso (verdadero si la forma es un hexágono regular, falso si no).
Las formas solo contendrán caracteres ASCII imprimibles.
El borde de la forma nunca contendrá espacios. Si lo hace, puede regresar falsey.
Puede haber cantidades arbitrarias de espacios en blanco antes y / o después de la forma.
Todos los ángulos en la forma pueden no ser iguales, por ejemplo, la siguiente forma es una entrada válida:
. . .
. . .
. . . . .
. . . .
. . .
Devolverá un valor falsey.
Todas las entradas de forma estarán en una cuadrícula separada por espacios. La entrada hexagonal estará en una cuadrícula escalonada (cada línea está desplazada de la siguiente).
Ejemplos
Verdad
Las siguientes formas deberían devolver valores verdaderos:
# _
+ + +
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
Lo siguiente debería devolver 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
*
* *
* * *
.....
.......
.........
.......
.....
Esta forma no está en una cuadrícula separada por espacios y no está escalonada.
* * * *
---------
* * * * * *
-------------
* * * * * *
---------
* * * *
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Para entradas de un solo carácter, su programa puede generar verdadero o falso:
&
Victorioso
El programa más corto en bytes gana.
fuente
5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3
y otro con un espacio adicional que conduzca a una de las filas:ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3
(los espacios iniciales se reemplazan pors
para que quede un poco más claro en esta forma sin formato) . Los 10 casos de prueba se están validando correctamente con mi código actualmente, pero estos dos casos fallarían con el enfoque que utilicé.Respuestas:
R, 184 bytes
Golfed, probablemente podría ser golfed por unos pocos bytes
Sin golf, muy desordenado, más bien a medio golf
Dado que el formato de entrada no está especificado, la entrada debe especificarse en un formato de matriz R, con un aspecto similar a este.
Aquí hay una función generadora que genera la entrada. El generador no genera un objeto que se alimenta a la función de verificación hexagonal, sino más bien el código que especifica la matriz (efectivamente, lo mismo). Por lo tanto, esto no debe contar como analizar el texto. Recuerde que no estoy ingresando texto, sino más bien una estructura de matriz.
Por ejemplo, el código generado sería:
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 ))
que es idéntico aarray(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9))
Esperemos que este método de entrada cumpla con las reglas.
Aquí están los casos de prueba.
Generar matrices de entrada
Prueba de hexágono
fuente
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 bytes
Donde
\n
representa un carácter de nueva línea literal. Sin golf:fuente
" x\n g g\ng g g\n g g"
debería dar falso, pero da verdadero.x
?SnakeEx , 200 bytes
El idioma correcto para el trabajo ... más o menos.
SnakeEx es un lenguaje del desafío 2-D Pattern Matching . Debería ser realmente bueno en esta tarea, pero desafortunadamente todos los casos de esquina realmente hincharon el código. También encontré un par de errores de interpretación. Aún así, fue un desafío divertido.
m
es la serpiente principal que llama a todos los demás para hacer el trabajo real. Coincide comenzando en la esquina superior derecha del hexágono y yendo en sentido horario. Los grupos numerados se usan para verificar que las longitudes laterales diagonales son todas iguales y que la longitud lateral horizontal coincide con la altura de toda la figura. Podría escribir una explicación más detallada, pero he pasado los últimos dos días lidiando con casos de esquina, así que pruébelo usted mismo aquí . : ^)fuente
Perl,
127125124121 bytesIncluye +4 para
-0p
Dar entrada sobre STDIN
fuente