Essa espiral geométrica parece complicada, mas é bastante simples de desenhar; pegue a seguinte caixa:
Desenhe uma linha reta entre o canto da caixa e uma certa distância acima do próximo canto no sentido anti-horário.
Continue esse padrão para dentro, sempre mantendo essa distância definida no canto da próxima linha. Aqui estão mais algumas linhas.
Como você pode ver, à medida que o padrão continua, a espiral se aproxima do centro e as caixas que você desenha começam a girar. Observe que a distância permanece constante, independentemente do ângulo.
O desafio
A inspiração (e também graças à pessoa maravilhosa que me apresentou esse conceito <3)
Dada uma entrada numérica (possivelmente fracionária) de 1 a 25, escreva uma imagem no disco que use esse padrão ou exiba a saída na tela, onde a distância de cada canto é a distância de um lado inicial da caixa dividido pela entrada . Continue o padrão para dentro até que a distância do canto especificado seja maior que o comprimento do lado seguinte.
Regras
- Você não pode usar internos para esta criação em espiral, mas pode usar internos de processamento de imagem.
- Se você gravar no disco, deverá gerar uma imagem em qualquer um dos formatos .jpg, .gif, .tiff, .pbm, .ppm e .png.
- O comprimento inicial do lado deve ser de pelo menos 500 pixels.
- O canto inicial pode ser o que você escolher.
- Como sempre, as brechas padrão não são permitidas.
fonte
Respostas:
Sapatos (Ruby) 163 bytes
Shoes é um kit de ferramentas GUI baseado em rubi.
Ungolfed
Saídas n = 4 en = 25
Observe que a forma sempre termina em um triângulo, que recolhe ainda mais uma linha. Substituir
size-1
porsize
não faz diferença na aparência da saída e economizaria 2 bytes, mas deixei para a correção teórica.Saída n = 300
Inspirados por um comentário do OP, os números mais altos parecem ótimos!
fonte
line
na linha inferior é necessário?*
converte a matriz de quatro elementos formada pela conversão dos números complexos em quatro parâmetros paraline
. A sintaxe padrão éline(*(a[j-1].rect+a[j].rect))
remover os parênteses e adicionar um espaço já economiza um byte. A remoção do espaço faz com que Ruby tente se multiplicarline
pelo conteúdo dos parênteses, o que não faz sentido e causa um erro. Há algum golfe a ser feito aqui, só que não. Vou dar uma olhada mais tarde.upto
. Além disso, você já tentou remover o('')
depoisask
? Eu não testei, mas pode ser desnecessárioJava,
10561005985948522508507504502501493492488474465458 bytesObrigado ao CoolestVeto e ECS por outras formas de reduzir o tamanho. :-)
fonte
Groovy,
412411403398 bytesfonte
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)