Su tarea: hacer un triángulo hexagonal con longitud lateral n
, donde n
es un número entero positivo o 0.
Primero, déjame definir un hexágono:
/ \
| |
\ /
(Increíble arte ASCII, ¿verdad?)
Los hexágonos se pueden vincular compartiendo lados:
/ \ / \
| | |
\ / \ /
/ \
| |
/ \ /
| |
\ /
Un triángulo hexagonal es el siguiente:
/ \
| |
/ \ / \
| | |
\ / \ /
Ese triángulo hexagonal tiene una longitud lateral de 2-- Se requieren 2 hexágonos para formar un lado. Un triángulo hexagonal con longitud lateral 1 es solo un hexágono único, y un hexágono con longitud lateral 0 está vacío.
Más formalmente, un triángulo hexagonal es un triángulo hecho de hexágonos unidos por sus lados. El hexágono superior se une a los dos debajo de él en sus dos lados inferiores. El triángulo en la parte inferior izquierda se vincula con el de la derecha y la esquina superior derecha, y el que se encuentra en la parte inferior derecha se vincula con los de la izquierda y la parte superior izquierda. Hay hexágonos entre las esquinas, conectados por sus lados opuestos, y su número es n-2
. Los triángulos no están llenos.
Más ejemplos:
Side length 3:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
\ / \ / \ /
Side length 4:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ /
(This triangle isn't really filled, the borders make it look like there is a hexagon in the middle, but there is not.)
Side length 5:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \
| | | | | |
\ / \ / \ / \ / \ /
Side length 6:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \ / \
| | | | | | |
\ / \ / \ / \ / \ / \ /
fuente
Respuestas:
Carbón ,
624339 bytesPruébalo en línea! Editar: guardé algunos bytes gracias a @ ASCII-only (no estoy seguro de cuántos exactamente, ya que también guardé otros
610 bytes pero luego necesité gastar 4 bytes en una corrección de errores). Ahora usando bucles anidados, que es lo que debería haber sido todo este tiempo.fuente
A / \¶| |¶ \ /αNβFβ«α←←»Fβ«α↖↖M⁶←»Fβ«αM⁴↑←←
(por cierto, el carbón vegetal se completa automáticamente»
al final)Assign(hexagon_with_space_to_left, a);InputNumber(b);for(b){Print(a);Move(:Left);Move(:Left);}for(b){Print(a);Move(:UpLeft);Move(:UpLeft);Move(6, :Left);}for(b){Print(a);Move(4, :Up);Move(:Left);Move(:Left);}
, cada bucle for dibuja un ladoPython 2,
184177174164 bytesPruébalo en línea!
-7 bytes gracias a Ørjan Johansen
fuente
|
s más a la derecha en los tres primeros y la fila del hexágono inferior.p[:4]*(i+2)
en lugar dep[:4]*(i+1)
parece solucionarlo.b
en un lugar, por lo que combinar eso con su~
trucow=' '*2*~(i-n)
es 7 bytes más corto.JavaScript (ES6), 243 bytes
fuente
JavaScript (ES6),
133129128126 bytesConstruye la salida carácter por carácter con dos para bucles.
Cómo funciona
En el bucle externo, y itera de n * 2-1 a -1 . En el bucle interno, x itera de n * 4-1 a -1 . Establecemos k = (x + y) & 3 , que es el patrón subyacente que se utiliza para generar los hexágonos.
A continuación se muestra la cuadrícula resultante para n = 4 :
En filas pares, una celda se llena con un carácter de tubería cuando k = 3 , y un espacio en caso contrario. La tubería es el quinto carácter en nuestra cadena de referencia
" \ /|"
, por lo que el índice correcto viene dado por (k + 1) y 4 .En filas impares, cada celda se llena directamente con el carácter correspondiente en la cadena de referencia:
A continuación se muestra nuestro ejemplo actualizado (espacios reemplazados por puntos):
En las siguientes fórmulas, definimos N = n * 4 para facilitar la lectura (aunque se utiliza la misma variable en el código).
La forma del triángulo se obtiene probando:
Y la parte interna se elimina probando:
Manifestación
Mostrar fragmento de código
fuente
[x>y-2&x<n-y&(x>n-y-6|x<y+4|y<2)&&y&1?x+y&3:x-~y&4]
?(x+y+1)&4
no es lo mismo que(((x+y)&3)+1)&4
.Gelatina ,
6261 bytesActualmente contiene seis seises.
Pruébalo en línea!
¿Cómo?
fuente
>
explicación (<space
)ẋ
espacio debajo de la explicación está desalineado", avíseme.Pyth , 82 bytes
Pruébalo en línea!
fuente
Mathematica, 155 bytes
con
\n
reemplazado por una nueva línea.Más legible:
Crea una matriz de caracteres, indexados por i de 1 a 4 n + 1 horizontalmente y j de 1 a 2 n + 1 verticalmente. Primero, completa
Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]
una cuadrícula hexagonal:luego
If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",...]
reemplaza esto con" "
fuera del triángulo sin relleno.fuente