Introducción
La idea es utilizar el asterisco (estrella) *
para mostrar una estrella de arte ascii en una dimensión específica. La dimensión es un número de entrada mayor o igual a que especifica la altura en líneas del punto superior de la estrella. Las estrellas aquí están destinadas a ser estrellas de seis puntas con tamaños más grandes que se ven mejor desde una perspectiva de imagen.
En todos los casos, la representación ascii-art de las estrellas debe aparecer como dos triángulos que se superponen como se muestra en los siguientes ejemplos.
Paramétricos
La siguiente imagen y tabla de datos describe los atributos para los primeros siete tamaños de la estrella. Cada uno de los parámetros crece en una progresión aritmética a medida que aumenta, excepto que es diferente .
Ejemplos
Para una entrada de 1 (el caso degenerado), la salida del programa debe ser la siguiente:
*
*****
*****
*
Entrada de 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Desafío
Su tarea es crear una función o programa que acepte el número N como entrada y luego la estrella del tamaño apropiado usando solo los caracteres y el
*
carácter.
- Puede suponer que el valor de entrada es siempre un entero positivo.
- El espacio en blanco al final de las líneas de salida está bien.
- El algoritmo del programa debe ser lo suficientemente general como para que cualquier entrada de produzca la salida del arte estelar. Existen limitaciones prácticas, por supuesto, debido al tamaño de salida de la pantalla.
- La salida debe imprimirse en STDOUT.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf.
Puntuación
Este es el código de golf, por lo que gana el código con el menor número de bytes.
Respuestas:
05AB1E , 21 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
3*s≠-L·<
gusta6*s≠·-ÅÉ
o≠3/-6*ÅÉ
, pero desafortunadamente ninguna es más corta. ¡Buena respuesta, como siempre! :)xs3*<ŸRsLì'*×.º.C.∊
por 19 :). Mentí, no funciona para 1. Dejándolo como inspiración.Haskell , 114 bytes
Construye una función
g
que toma un número y produce unIO
mónada que imprime la estrella en STDOUT. Creo que esto esta bien.Pruébalo en línea!
Explicación
Primero hablemos de la lambda.
Esto requiere un número,
n
para ser dibujado como estrellas. Imprimimos el doble de estrellas y luego 1 más y las rellenamos a la derecha hasta el tamaño de la imagen. Relleno esto a la derecha pora
espacios para centrar la línea de estrellas. Podemos usar esta lambda para dibujar cada línea.De esta lambda que creamos
(%)
.(%)
comienza haciendomapM_
con nuestra lambda para convertir un perfil en la forma.Ahora todo lo que tenemos que hacer es hacer una lista del perfil de la estrella. Podemos hacer esto haciendo primero un triángulo
[1..a]
y luego rellenándolo con algunos ceros++replicate b 0
. Si tomamos el perfil del triángulo y lo invertimos, obtenemos la otra mitad de la estrella. Para superponerlos, simplemente hacemos un nuevo perfil donde cada entrada es el máximo de los dos triángulos. Esto eszipWith max
.Luego llamamos a esto de una de dos maneras: en cuanto
3%1
a la entrada de1
y con lo(3*a-1)%a
contrario.A partir de aquí, hacemos algunos retoques con algunos de los valores para reducir algunos bytes. Como
3*a-1
es bastante largo, compensamos algunos de nuestros otros valores en 1 para que todo se cancele y obtengamos el comportamiento deseado3*a
. Es decir, comenzamos nuestra lista en2
lugar de1
y hacemos en2*n-3
lugar de2*n-1
compensar el cambio.Versión alternativa, 114 bytes.
Este construye una función sin puntos
(%)<*>min 2
Pruébalo en línea!
Pruébalo en línea!
Pruébalo en línea!
fuente
R ,
125107101 bytesPruébalo en línea!
Enfoque anterior (diferente):
R ,
150148136135130128 bytesPruébalo en línea!
fuente
Python 2 ,
1019997 bytesPruébalo en línea!
-2 bytes, gracias a Lynn
fuente
i+x>n*6or
guarda dos bytes.i+x>~i/n/2%2*6*n
o algo asíi+x>3*n*(~i/n&2)
(ambos 96 bytes.)JavaScript (V8) ,
101108 bytesEDITAR: +7 bytes para imprimir en STDOUT
Pruébalo en línea!
Comentado (sin
print
)fuente
Jalea , 21 bytes
Un programa completo que acepta un número entero positivo que se imprime en STDOUT.
Pruébalo en línea! O ver un conjunto de pruebas .
¿Cómo?
fuente
Lienzo ,
2523 bytesPruébalo aquí!
15 bytes sin manejo
1
fuente
Jalea , 21 bytes
Pruébalo en línea!
Un enlace monádico que acepta un solo entero como argumento izquierdo y devuelve una cadena Jelly separada por una nueva línea con la estrella como su salida. Cuando se ejecuta como un programa completo, imprime implícitamente la estrella en STDOUT.
Explicación
fuente
×3’»3
tiene la misma longitud ^ _ ^ɓ
, no importó, ¡pero lo guardé porque todavía me gustaba!Carbón de leña , 25 bytes
Pruébalo en línea!El enlace es a la versión detallada del código. Explicación:
Dibuja un pentágono irregular que represente el cuarto superior derecho de la estrella, pero con una carcasa especial
1
para hacer que la fila sea una columna extra más ancha.Reflexiona para completar la estrella.
Más carcasa especial para hacer la estrella para
1
una fila extra más alta.Solución alternativa, también 25 bytes:
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Imprima un extra
*
para el caso de1
.Dibuja la mitad izquierda de un triángulo del tamaño apropiado.
Reflexiona para completar el triángulo.
Superponerlo con su reflejo, excepto en el caso de
1
, en cuyo caso solo reflejalo.14 bytes sin carcasa especial para
1
:Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Dibuja un triángulo del tamaño apropiado.
Superponerlo con su reflejo.
fuente
Perl 6 , 74 bytes
Pruébalo en línea!
Literalmente crea un triángulo con las proporciones correctas y lo superpone con una copia invertida utilizando la cadena o el operador (
~|
). Salidas como una lista de líneas con un espacio en blanco de línea inicial y final.Explicación:
fuente
J ,
5350 bytesPruébalo en línea!
sin golf
cómo
Use una tabla de funciones (como una tabla de tiempos de 3er grado) para construir la mitad del triángulo usando
>:
(mayor o igual) como la función. Luego invierte cada fila, corta la última columna y une los dos lados para obtener el triángulo completo (pero hecho de 1 y 0). Agreguen
filas de ceros en la parte inferior. Finalmente, invierta todo y superponga el original, usando booleano o+.
para obtener el resultado. Luego gire el 1 hacia*
y 0 hacia espacios.fuente
T-SQL, 194 bytes
@
es el valor de entrada@c
maneja el ancho del triángulo superior@d
maneja el triángulo inferior ancho@e
contiene la salida@c
o bien@d
, esto ahorra algunos bytes@f
maneja el caso especial de 1 como entrada.@c*@=3
determina cuándo usar@f
. 5 bytes más barato que escribir@c=3and @=1
Pruébalo en línea
fuente
Japt
-R
, 25 bytes+5 bytes para
n=1
: \Intentalo
fuente