Echa un vistazo a esta flor de manzanilla:
Bonita, ¿no es así? Bueno, ¿y si te dijera que esta no era realmente una flor?
Muchas flores (incluyendo girasoles, manzanillas, margaritas y otras) en realidad consisten en muchas flores muy pequeñas (los puntos negros en los girasoles) en una cabeza de flor. Estas flores en miniatura se llaman floretes , y están dispuestas de una manera muy especial.
Básicamente, la posición del enésimo flósculo en una cabeza de flor es (en coordenadas polares):
donde c = 1 (Tenga en cuenta que 137.508 grados = ángulo de oro. No tiene que usar esta precisión exacta).
Esto hace que las florecillas se formen en una espiral llamada Espiral de Fermat. El posicionamiento de los floretes también está relacionado con los números de Fibonnaci, pero eso es una historia para otro momento.
Entonces, aquí está el desafío. Dado un número entero n como entrada, calcule las posiciones de los primeros n floretes y grafíelos . Esta es una salida gráfica , por lo que realmente quiero que muestre los puntos en una ventana de algún tipo o que se muestren como datos en algún formato de imagen común a STDOUT o un archivo. Aparte de eso, este desafío debería ser bastante sencillo. Es código de golf , por lo que gana el código más corto. GLHF!
Aquí hay una imagen de muestra de cómo se vería una salida:
fuente
Respuestas:
TI-BASIC, 34 bytes
Para la serie de calculadoras TI-83 + / 84 +.
Esto considera que el punto en el origen es el punto 0.
Gracias al
sinh⁻¹(
token de un byte ,2πe^(-2sinh⁻¹(.5
es una forma corta de obtener el ángulo dorado en radianes. Esto se deriva del hecho de quee^(sinh⁻¹(.5
es la proporción áurea.Aquí hay capturas de pantalla para N = 50.
(Sí, es una pantalla monocromática de 96x64 en una TI-84 +. Las calculadoras de color más nuevas tienen una actualización de resolución, pero aún tienen solo el 3,7% de los píxeles de un iPhone).
Presione TRACEpara recorrer cada punto.
fuente
sinh⁻¹
parece ser (si entendí su explicación), contaría como más de un byte.Python 2,
858281 bytesAcortado por un byte por marinus.
Usando el ángulo dorado en radianes. La longitud del byte es la misma si utilizo 137.508 en su lugar, pero de alguna manera no se ve tan bien. Genera un diagrama polar usando pylab. A continuación es cuando 300 (para la versión anterior) es la entrada y 7000 (para la versión más nueva) es la entrada. Podría redondear el ángulo hasta 2,4 para reducir el número de bytes a 77.
Aquí hay una versión más larga que produce una apariencia más limpia al eliminar la cuadrícula y el eje:
La razón de los diferentes colores es porque cada punto se traza por separado y se trata como su propio conjunto de datos. Si los ángulos y los radios se pasaran como listas, entonces se tratarían como un conjunto y serían de un solo color.
fuente
for
bucle normal en lugar de una lista de comprensión. Tendría que ser en su propia línea, pero;
, y\n
tienen la misma longitud, por lo que no importa. Es decir:from pylab import*
-for i in arange(0,input(),2.39996):polar(i,sqrt(i),'o')
-show()
Blitz 2D / 3D , 102 bytes
(¡La primera respuesta de Blitz 2D / 3D en este sitio!)
Una entrada de
50
llena la ventana. (Sí, podría reducir dos bytes haciendoGraphics 99,99
, pero eso no es tan interesante o útil visualmente).Versión más bonita (y sale más bien):
fuente
Mathematica,
4342 bytesEsta es una función sin nombre que toma un argumento entero, por ej.
La captura de pantalla usa una versión anterior, pero el resultado se ve igual.
Mathematica en realidad tiene una función integrada
GoldenAngle
para obtener resultados aún más precisos, pero eso es más largo que2.39996
.fuente
GoldenAngle
! ¿Es una nueva función en Mathematica 10.2?MATLAB, 42 bytes
Obtiene el número de entrada, crea un rango de 1 a ese número.
Multiplica el rango por el ángulo dorado en radianes (el valor utilizado está más cerca del valor verdadero que 137.508 grados a 6 pies cuadrados).
Después, simplemente traza theta vs r en un gráfico usando coordenadas polares puntos. Aquí se muestra con 2000 puntos
Un gráfico de aspecto un poco más bonito (sin líneas de cuadrícula) sería este código:
Aunque eso es a expensas de 31 bytes. Nuevamente aquí se muestra con 2000 puntos.
fuente
polar
solución, nunca la he usado antes. ¡Creo que puedes guardar dos bytes usandot.^.5
instad ofsqrt(t)
!R,
585554 bytesEsto requiere
plotrix
que se instale el paquete, pero el paquete no tiene que importarse porque estamos haciendo referencia explícita al espacio de nombres.Sin golf:
Ejemplo de salida para n = 1500:
¡Guardado 3 bytes gracias a plannapus!
fuente
R,
5554 bytesAquí está el resultado para n = 1000:
Editar: se guardó 1 byte utilizando una coincidencia parcial de argumentos (en
as
lugar deasp
) gracias a @AlexA.!fuente
R,
4847 bytesCreo que esto es suficientemente diferente de las otras soluciones R hasta ahora. Éste usa vectores complejos para construir las coordenadas. los sqrt de t y t se ponen en los parámetros de módulo y argumento y los x, y están tomando de lo real y lo imaginario. Gracias a @AlexA. para el byte
fuente
as
se puede utilizar en lugar deasp
.HTML + JavaScript 179
fuente
Jolf, 25 bytes
(salida para n = 5000)
Pruébalo en línea. (tenga en cuenta que la espiral resultante es pequeña)
No compite desde que Jolf fue creado después de este desafío. Esto es de 25 bytes cuando se codifica con ISO-8859-7, y contiene uno no imprimible (aquí hay un hexdump):
Explicación
fuente
Python 2, 74 bytes
fuente
MATL , 20 bytes (no competidor)
Marcado como no competitivo porque el lenguaje es posterior al desafío
¡Pruébalo en MATL Online!
El ángulo dorado,
137.708
deg =pi*(3-sqrt(5))
rad =2.39996...
rad se aproxima como2.4
rad.La siguiente versión ( 25 bytes ) utiliza el valor exacto, hasta la
double
precisión de punto flotante:¡Pruébalo en MATL Online!
fuente
Tcl / Tk, 114
Ejemplo de uso:
y saca la ventana
fuente