Dê uma olhada nesta flor de camomila:
Bonito, não é? Bem, e se eu lhe dissesse que essa não era realmente uma flor?
Muitas flores (incluindo girassóis, chamomiles, margaridas e outras) na verdade consistem em muitas flores muito pequenas (os pontos pretos nos girassóis) em uma cabeça de flor. Essas flores em miniatura são chamadas de florzinhas e são dispostas de uma maneira muito especial.
Basicamente, a posição da enésima floreta em uma cabeça de flor é (em coordenadas polares):
onde c = 1 (observe que 137,508 graus = ângulo de ouro. Você não precisa usar essa precisão exata.)
Isso faz com que os floretes sejam formados em uma espiral chamada Espiral de Fermat. O posicionamento das florzinhas também está relacionado aos números de Fibonnaci, mas isso é outra história.
Então, aqui está o desafio. Dado um número inteiro n como entrada, calcule as posições dos primeiros n floretes e plote-os . Essa é uma saída gráfica , então, na verdade, quero que você exiba os pontos em uma janela de algum tipo ou como dados em algum formato de imagem comum para STDOUT ou um arquivo. Fora isso, esse desafio deve ser bastante direto. É código-golfe , então o código mais curto vence. GLHF!
Aqui está uma imagem de exemplo de como uma saída pode ser:
fonte
Respostas:
TI-BASIC, 34 bytes
Para a série de calculadoras TI-83 + / 84 +.
Isso considera o ponto na origem como o 0º ponto.
Graças ao
sinh⁻¹(
token de um byte ,2πe^(-2sinh⁻¹(.5
é uma maneira curta de obter o ângulo de ouro em radianos. Isso é derivado do fato de quee^(sinh⁻¹(.5
é a proporção áurea.Aqui estão as capturas de tela para N = 50.
(Sim, é uma tela monocromática de 96x64 em uma TI-84 +. As calculadoras de cores mais recentes têm uma atualização de resolução, mas ainda possuem apenas 3,7% dos pixels de um iPhone.)
Pressione TRACEpara percorrer cada ponto.
fonte
sinh⁻¹
parece (se eu entendi sua explicação), contaria como mais de um byte.Python 2,
858281 bytesEncurtado por um byte por marinus.
Usando o ângulo de ouro em radianos. O comprimento dos bytes é o mesmo se eu usasse 137.508, mas de alguma forma não parece tão bom. Gera um gráfico polar usando o pylab. Abaixo está quando 300 (para a versão mais antiga) é a entrada e 7000 (para a versão mais recente) é a entrada. Pode arredondar o ângulo até 2,4 para diminuir o número de bytes para 77.
Aqui está uma versão mais longa que produz uma aparência mais limpa, removendo a grade e o eixo:
A razão para as diferentes cores é porque cada ponto é plotado separadamente e tratado como seu próprio conjunto de dados. Se os ângulos e raios fossem passados como listas, eles seriam tratados como um conjunto e seriam de uma cor.
fonte
for
loop normal em vez de uma compreensão da lista. Teria que estar na sua própria linha, mas;
e\n
tem o mesmo comprimento, para que não importe.from pylab import*
for i in arange(0,input(),2.39996):polar(i,sqrt(i),'o')
show()
Blitz 2D / 3D , 102 bytes
(A primeira resposta 2D / 3D do Blitz FIRST EVER neste site!)
Uma entrada de
50
preenche a janela. (Sim, eu poderia economizar dois bytes fazendo issoGraphics 99,99
, mas isso não é tão visualmente interessante ou útil.)Versão mais bonita (e sai mais bem):
fonte
Mathematica,
4342 bytesEsta é uma função sem nome que recebe um argumento inteiro, por exemplo
A captura de tela usa uma versão mais antiga, mas a saída parece a mesma.
O Mathematica realmente tem um built-in
GoldenAngle
para resultados ainda mais precisos, mas é mais do que isso2.39996
.fonte
GoldenAngle
! É uma nova função no Mathematica 10.2?MATLAB, 42 bytes
Obtém o número de entrada, cria um intervalo de 1 a esse número.
Multiplica o intervalo pelo ângulo de ouro em radianos (o valor usado é mais próximo do valor real do que 137,508 graus a 6 sf).
Simplesmente plota theta x r em um gráfico de coordenadas polares usando pontos. Aqui mostrado com 2000 pontos
Um gráfico com aparência um pouco mais bonita (sem linhas de grade) seria este código:
Embora isso seja à custa de 31 bytes. Novamente, aqui é mostrado com 2000 pontos
fonte
polar
solução, nunca a usei antes. Eu acho que você pode salvar dois bytes usandot.^.5
instad desqrt(t)
!R,
585554 bytesIsso requer que o
plotrix
pacote seja instalado, mas o pacote não precisa ser importado porque estamos referenciando o espaço para nome explicitamente.Ungolfed:
Exemplo de saída para n = 1500:
Economizou 3 bytes graças ao plannapus!
fonte
R,
5554 bytesAqui está o resultado para n = 1000:
Editar: salvou 1 byte usando correspondência parcial de argumentos (em
as
vez deasp
) graças a @AlexA.!fonte
R,
4847 bytesEu acho que isso é suficientemente diferente das outras soluções R até agora. Este usa vetores complexos para construir as coordenadas. o sqrt de t e t são colocados nos parâmetros de módulo e argumento e os x, y estão tirando do real e do imaginário. Graças a @AlexA. para o byte.
fonte
as
pode ser usado no lugar deasp
.Html + JavaScript 179
fonte
Jolf, 25 bytes
(saída para n = 5000)
Experimente online. (observe que a espiral resultante é pequena)
Não concorrente desde que Jolf foi criado após esse desafio. São 25 bytes quando codificados com ISO-8859-7 e contêm um não imprimível (aqui está um hexdump):
Explicação
fonte
Python 2, 74 bytes
fonte
MATL , 20 bytes (não concorrente)
Marcado como não concorrente porque o idioma pós-desafio
Experimente no MATL Online!
O ângulo de ouro,
137.708
deg =pi*(3-sqrt(5))
rad =2.39996...
rad é aproximado como2.4
rad.A versão a seguir ( 25 bytes ) usa o valor exato, com
double
precisão de ponto flutuante:Experimente no MATL Online!
fonte
Tcl / Tk, 114
Exemplo de uso:
e gera a janela
fonte