Hoy, vamos a hacer un hexágono ASCII. Debe escribir un programa o función que tome un entero positivo n y genere una cuadrícula hexagonal de tamaño n , compuesta de asteriscos. Por ejemplo, un hexágono de tamaño 2 se ve así:
* *
* * *
* *
Mientras que un hexágono de tamaño 3 se ve así:
* * *
* * * *
* * * * *
* * * *
* * *
Puede utilizar cualquiera de los métodos de entrada y salida predeterminados , por ejemplo, STDIO / STDOUT, argumentos de función y valores de retorno o leer / escribir un archivo.
Puede suponer que la entrada siempre es válida, por lo que si no es un número entero positivo, su programa puede hacer lo que quiera. Usted no obstante tiene que manejar el caso especial de un hexágono tamaño 1, que pasa a ser un solo asterisco:
*
Los espacios en blanco iniciales y finales están permitidos siempre que la salida sea visualmente la misma.
Ejemplos:
1:
*
2:
* *
* * *
* *
3:
* * *
* * * *
* * * * *
* * * *
* * *
4:
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
5:
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
6:
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
12:
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
Como de costumbre, este es el código de golf , por lo que se aplican las lagunas estándar , y debe intentar escribir el programa más corto posible medido en bytes. Por supuesto, algunos idiomas son inherentemente más cortos o más largos que otros, así que recuerde que el objetivo no es necesariamente tener el recuento de bytes general más corto, sino superar las presentaciones en los mismos idiomas o en idiomas similares.
¡Que gane el mejor golfista!
fuente
Respuestas:
Hexagony + Bash Coreutils, 0 + 3 + 8 = 11 Bytes
Incluye +3 para
-g
bandera y +8 para|tr . \*
invocación no estándar (vea esta meta publicación )La entrada se da como argumento para Hexagony. Cuando se llama al intérprete de Hexagony con la
-g N
opción, imprime un hexágono de.
s. Luego usamos tr para reemplazar aquellos con*
s.fuente
hexagony -g $1|tr . \*
, suponiendo que el intérprete de hexagonía se llame así.ruby ./interpreter.rb -g 5|tr . \*
Python 2, 61 bytes
Imprime un espacio final al final de cada línea.
Gracias a Erik the Outgolfer por guardar un byte.
fuente
int(input())
lugar deinput()
y elprint(' '*j+'* '*(2*n+~j))
reemplazo habitualprint' '*j+'* '*(2*n+~j)
- código genial por cierto ;-)JavaScript (ES6), 77
81 84@Upvoters: no te pierdas la respuesta de @ETHproductions, es decir 76 bytes
Editar Revisado después de un cambio en las especificaciones, se permite el espacio final
Solo por el sombrero ... hey! ¿Sin sombrero?
Prueba
fuente
Hexagonía ,
918786 bytesPruébalo en línea!
Finalmente lo hice.
Inicialmente (antes de darme cuenta de lo caros que son los bucles), espero que esto pueda caber en la longitud lateral 5, pero ahora es bastante difícil ajustarlo en la longitud lateral 6.
Para obtener esto, en realidad tengo que modificar un poco el código lineal. De hecho, escribir esto me hace darme cuenta de una manera de reducir el código lineal en
12 byte.fuente
JavaScript (ES6),
7776 bytesMe dije que no dormiría hasta haber establecido un nuevo récord ES6 sin mirar las otras respuestas, así que aquí está ...
Fragmento de prueba
fuente
C,
91898074 bytesPrácticamente modifiqué para obtener las fórmulas correctas, luego las mezclé todas juntas.
Llame
f
con el número n , e imprimirá el hexágono en stdout.Ungolfed y explicado (versión de 80 bytes):
Véalo en vivo en Coliru
Notas:
printf
puede manejar el relleno negativo, lo que da como resultado un carácter alineado a la izquierda con el relleno a la derecha. Por lo tanto, probé algo paraw = printf("%*c*", y, ' ')
que se hiciera cargo del valor absoluto y pudiera recuperarlo de su valor de retorno. Desafortunadamente, los anchos de relleno cero y uno imprimen el carácter por sí mismo, por lo que las tres líneas centrales eran idénticas.Actualización: Jasen ha encontrado una manera de hacer exactamente esto imprimiendo una cadena vacía en lugar de un carácter: ¡6 bytes eliminados!
Coliru maneja incorrectamente el carácter de retroceso: la ejecución de este código en un terminal local elimina el espacio inicial de cada línea.
fuente
w=printf("\n%*s",abs(y),"");++w<s*printf(" *");
05AB1E ,
1413 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Jalea , 24 bytes
Pruébalo en línea!
Jelly se avergüenza del hecho de que no tiene un átomo de centralización, por lo que es superado por 05AB1E y V. ¡Por 11 y 7 bytes respectivamente!
Si encuentra alguna forma de jugar al golf, por favor comente. Cualquier ayuda es apreciada.
Explicacion :
Bonificación: para encontrar cuántas estrellas hay en un hexágono, usa esto:
fuente
Octava,
6258 bytesRespuesta anterior:
que se puede llamar como
Pruébalo (pégalo) en Octave Online
Por ejemplo, la imagen base para
n=5
esque se puede crear con
Se
dilation morphological operator
aplica 4 veces en la imagen usando la siguiente máscara vecina:que se puede crear con
[k='01010'-48;~k;k]
resultado de la dilatación:
luego reemplace 0 y 1 con '' y '*' respectivamente
fuente
postgresql9.6, 290 bytes
sql formateado está aquí:
salida:
fuente
lpad
Es posible que pueda ahorrarle unos pocos bytes. También llamaría al lenguaje pl / pgsql, pero eso genera preguntas sobre si tiene que contardo language plpgsql $$
el cierre y el cierre$$;
. Esos se abordarían mejor en meta, si no han aparecido antes.DECLARE
s? ¿No funcionaría uno solo?V , 17 bytes
Pruébalo en línea!
Como de costumbre, aquí hay un hexdump, ya que contiene caracteres no imprimibles:
fuente
APL (Dyalog Unicode) ,
403635332725 bytesAsume
⎕IO←0
, es decir, indexación basada en cero. La salida contiene un espacio inicial y uno posterior en cada línea.Muchas gracias a @FrownyFrog y @ngn por mucho golf.
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6),
8381 bytesEsta es mi primera respuesta (código golf). Espero haber formateado todo correctamente.
A diferencia de las 2 respuestas actuales de ES6, no estoy llamando recursivamente a una función y estoy usando la consola para la salida.
fuente
alert
si especifica el navegador js?alert
editara, alertaría línea por línea, y no todo.Haskell,
999779 bytesExplicación: Este programa se basa en la observación de que cada línea de un n-Hexágono contiene espacios (nk) seguidos de asteriscos (n + k-1), para algunos k dependiendo del número de línea.
Editar: se cambió a mapM_. No sabía que estaba disponible sin usar importar
fuente
Python 2 ,
100978988878179 bytes-1 de @ Flp.Tkc
-6 de nuevo desde @Flp
-2 con agradecimiento a @ nedla2004. Estaba tratando de encontrar cómo deshacerme de la segunda porción, pero no pensé en esa :)
Pruébalo en línea!
Crea una matriz para la mitad superior, luego agrega la matriz invertida menos la línea media y luego imprime. Imprime exactamente "tal cual", aparte de lo
1
que imprime con un espacio inicial (supongo que eso está permitido ya*
que visualmente es lo mismo que*
con o sin espacio inicial).fuente
Lote, 161 bytes
Nota: Espacio final en la línea 2. Sin golf:
fuente
JavaScript (ES6), 83 bytes
fuente
Lienzo , 9 bytes.
Pruébalo aquí!
Vencer a la incorporada: D
Explicación:
No tengo idea de por qué existe el gran relleno, pero está permitido y lo arreglaré pronto ™.¿fijo? Espero no haber roto cosasfuente
Perl 6 , 49 bytes
Pruébalo en línea!
Cómo funciona
fuente
Powershell,
91897868635248 bytesScript de prueba:
Salida (espacio inicial adicional):
Explicación:
fuente
gu
.PHP,
8379 bytesEjecutar como tubería
-nR
o probarlo en línea .Esto está cerca de la respuesta de Kodos ; pero
str_pad
es más corto questr_repeat
incluso cuando se juega al golf.Y la
++
cabeza en el bucle ahorra un poco más.fuente
Ruby, 54 bytes
La función lambda toma n como argumento y devuelve una cadena separada por nuevas líneas. (
$/
es una variable que contiene el separador de línea predeterminado).en programa de prueba
fuente
puts
) en el recuento de caracteres. Pero releyendo la definición, solo dice que su función debería "generar" el resultado que podría leerse como "devolver" el resultado. Solución genialCharly, 125 bytes
Página de Charly GitHub: https://github.com/KCreate/charly-lang
fuente
SmileBASIC, 74 bytes
Agrega un espacio inicial y final.
Estos "hexágonos" se ven horribles cuando los personajes tienen el mismo ancho y alto ...
fuente
raqueta / esquema
pruebas:
fuente
Python 2, 111 bytes
Una implementación aburrida y directa (y un programa completo). Emite un espacio en blanco al final de cada línea.
Casos de prueba:
fuente
Javascript (ES6), 143 bytes
Finalmente son las vacaciones de Navidad (¡feliz Navidad!), Así que tengo tiempo para jugar al golf.
Y vaya, ha pasado un tiempo, de ahí el gran número de bytes.
Aquí va:
fuente
for(j=c.length-2;j>-1;j--)c.push(c[j])
pueden escribirse comofor(j=a-1;j;c.push(c[--j]))
yfor(i=0;i<a;i++){c.push(" ".repeat(a-i-1)+"* ".repeat(i+a-1)+"*")}
podrían serfor(i=0;i<a;c.push(" ".repeat(a-i-1)+"* ".repeat(a-1+i++));
. La declaración de devolución podría acortarse areturn a-1?c.join
\ n:"*"
En total, estos cambios ahorran 18B (11 + 7 + 1).Java,
157149129127 bytesPruébalo en línea!
fuente
String#repeat(int)
, pero TIO sigue siendo JDK 10, de ahí elrepeat(String,int)
método emulado (con el mismo número de bytes). El código real en Java 11 sería:s->{for(int j=~--s,t;++j<=s;System.out.println(" ".repeat(t)+"* ".repeat(s-~s-t)))t=j<0?-j:j;}
Hexagonía (lineal),
128127126 bytesTenga en cuenta que esto no es Hexagony, solo un (meta) lenguaje admitido por Timwi en IDE esotérico, por lo que no es elegible para la recompensa.
Sin embargo, esto se puede convertir en una solución de Hexagony
(y creo que será más pequeña que esta solución). Puedo hacerlo más tarde. Se necesita más esfuerzolo hice aquí .La inicial
❢
toma 3 bytes (e2 9d a2
). Cada línea nueva toma 1 byte (0a
).No ¡Pruébelo en línea! Esto solo funciona en IDE esotérico.
Código anotado:
fuente
Japt
-R
,1110 bytesPruébelo (o use TIO para ejecutar múltiples pruebas)
Explicación
fuente