Dada la espiral de tamaño S
y el escalón N
, genera la S*S
espiral "cuadrada" que tiene N
asteriscos, construidos desde el radio exterior al interior en el sentido de las agujas del reloj.
Casos de prueba (ejemplos) a continuación.
Entrada:
4 3
Salida:
***
Entrada:
4 6
Salida:
**** * *
Entrada:
4 11
Salida:
**** * * * ****
Entrada:
6 18
Salida:
****** * * * * * * ******
Entrada:
6 22
Salida:
****** *** * * * * * * * ******
Entrada:
6 27
Salida:
****** ****** * ** * ** * ** ******
Entrada:
1 1
Salida:
*
No es necesario manejar los casos cuando:
los
N
asteriscos proporcionados no pueden "encajar" en la espiral deS*S
dimensiones dadas .ya sea
N
oS
es cero.
El desafío es el código de golf, gana la respuesta de bytes más cortos, se puede usar cualquier idioma.
Su salida puede tener tantos espacios finales (pero no iniciales) / líneas nuevas como desee.
S
tamaño (o al menos diámetro ) en lugar de radioRespuestas:
MATL ,
1716 bytesPruébalo en línea!
Explicación (con ejemplo)
Considere las entradas
4
y11
como ejemplo.fuente
Stax , 19 bytes
Ejecutar y depurarlo
Comienza construyendo una cadena que tiene todos los caracteres en el resultado con todos los asteriscos alineados a la izquierda. Luego, toma cortes cada vez más grandes del extremo de la cadena y los "envuelve" alrededor de una cuadrícula a medida que gira la cuadrícula.
Aquí está el mismo programa, desempaquetado, sin golf y comentado.
Ejecutar y depurarlo
fuente
Python 2 , 117 bytes
Pruébalo en línea!
fuente
APL (Dyalog) , 65 bytes
Pruébalo en línea!
El código para la matriz espiral se toma de otra respuesta mía .
fuente
N
es extraño :)PHP, 118 bytes
ajusté y jugué mi solución para la espiral del alfabeto .
Ejecutar
php -nr '<code>' <S> <N>
o probarlo en línea .fuente
Python 2 , 150 bytes
Pruébalo en línea!
fuente
Carbón , 34 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Entrada
N
.Las longitudes de los brazos espirales (con exclusión de las esquinas) son
S-1
,S-1
,S-1
,S-2
,S-2
,S-3
, ...,3
,2
,2
,1
,1
,1
. Esto se forma comenzando con el rango de0
hasta, pero excluyendo2S
, cambiando el 0 a 1, invirtiéndolo, agregando 1 a cada elemento después del primero, y finalmente enteros dividiendo todos los elementos por 2. Esta lista luego se repite.Si quedan menos estrellas para dibujar que la longitud del siguiente brazo, reduzca el brazo a esa longitud.
Dibuja el número apropiado de estrellas.
Resta del número de estrellas restantes.
Gire la dirección del dibujo 90 ° en sentido horario.
fuente
J,
6056 bytes-4 Bytes modificando el proceso de construcción para la espiral para que no sea necesario restarlo de y ^ 2
Pruébalo en línea!
Explicación
próximamenteahora.Explicación:
Ejemplos:
fuente
Kotlin ,
361355353334 bytes6 bytes guardados gracias a Jonathan
2 bytes guardados cambiando a cuando se
guardaron 19 bytes cambiando a lambda y siguiendo los bordes exteriores
Pruébalo en línea!
fuente
==' '
puede ser reemplazado por<'*'
. Tambiénd==0
cond<1
yd==3
cond>2
. Parecen campos de golf bastante fundamentales, por lo que probablemente también haya otros.Java 10,
284282281263 bytesUn reto divertido!
Pruébelo en línea aquí .
Gracias a Kevin Cruijssen por jugar al golf 18 bytes.
Versión sin golf:
fuente
var b
se agrega a para que solo tenga que hacer elx>0?i<u:i>l
yy>0?j<u:j>l
una vez cada uno, en lugar de dos veces cada uno.JavaScript (Node.js) ,
167164163 bytes,
lugar de mapa (1 byte)Pruébalo en línea!
fuente
return a.join` `.split`,`.join``
..split
, `.join`` no muestra la espiral" muy bien "(con nuevas líneas), así que creo que es un problema