Esta espiral geométrica parece complicada, pero es bastante simple de dibujar; toma el siguiente cuadro:
Dibuje una línea recta entre la esquina de la caja y cierta distancia establecida sobre la siguiente esquina en sentido antihorario.
Continúe este patrón hacia adentro, siempre manteniéndose a esa distancia establecida de la esquina de la siguiente línea. Aquí hay algunas líneas más en.
Como puede ver, a medida que el patrón continúa, la espiral se acerca al centro y los cuadros que dibuja comienzan a girar. Tenga en cuenta que la distancia permanece constante, independientemente del ángulo.
El reto
La inspiración (y también gracias a la maravillosa persona que me presentó este concepto <3)
Dada una entrada numérica (posiblemente fraccionaria) del 1 al 25, escriba una imagen en el disco que use este patrón o muestre la salida en la pantalla, donde la distancia desde cada esquina es la distancia de un lado inicial del cuadro dividido por la entrada . Continúe el patrón hacia adentro hasta que la distancia desde la esquina especificada sea mayor que la longitud del siguiente lado.
Reglas
- No puede utilizar elementos integrados para esta creación en espiral, pero puede utilizar las funciones integradas de procesamiento de imágenes.
- Si escribe en el disco, debe generar una imagen en cualquiera de .jpg, .gif, .tiff, .pbm, .ppm y .png.
- La longitud del lado inicial debe ser de al menos 500 píxeles.
- La esquina inicial puede ser la que elija.
- Como siempre, las lagunas estándar no están permitidas.
fuente
Respuestas:
Zapatos (Ruby) 163 bytes
Shoes es un juego de herramientas GUI basado en rubí.
Sin golf
Salidas n = 4 yn = 25
Tenga en cuenta que la forma siempre termina en un triángulo, que colapsa aún más en una línea. Reemplazar
size-1
consize
no hace ninguna diferencia en la apariencia de la salida y ahorraría 2 bytes, pero lo dejé para la corrección teórica.Salida n = 300
¡Inspirado por un comentario de OP, los números más altos se ven geniales!
fuente
line
en la línea de fondo?*
convierte la matriz de cuatro elementos formada por la conversión de los números complejos en cuatro parámetros paraline
. La sintaxis estándar esline(*(a[j-1].rect+a[j].rect))
eliminar los paréntesis y agregar un espacio ya es un ahorro de un byte. Al eliminar el espacio, Ruby intenta multiplicarseline
por el contenido de los paréntesis, lo que no tiene sentido y hace que arroje un error. Hay algo de golf que hacer aquí, pero no eso. Lo investigaré más tarde.upto
. Además, ¿has intentado eliminar el('')
afterask
? No lo he probado, pero puede ser innecesarioJava,
10561005985948522508507504502501493492488474465458 bytesGracias a CoolestVeto y ECS por otras formas de reducir el tamaño. :-)
fuente
Maravilloso,
412411403398 bytesfuente
Caught: groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() at s$1.<init>(s.groovy:3) at s.run(s.groovy:2)