Desenhe o Pentaflake
Antes de tudo ... eu gostaria de desejar a todos um Feliz Natal (desculpe se estou um dia atrasado para o seu fuso horário).
Para comemorar a ocasião, vamos desenhar um floco de neve. Como o ano é 201 5 e o Natal é o dia 5 5 (para grande parte das pessoas), desenharemos um floco Penta . O Pentaflake é um fractal simples composto por pentágonos. Aqui estão alguns exemplos (extraídos daqui) :
Cada Pentaflake tem um pedido n. O Pentaflake da ordem 0 é simplesmente um pentágono. Para todos os outros pedidos n, um Pentaflake é composto por 5 Pentaflakes da ordem anterior organizados em torno de um sexto Pentaflake da ordem anterior. Por exemplo, um Pentaflake da ordem 1 é composto por 5 pentágonos dispostos em torno de um pentágono central.
A ordem n. Isso pode ser dado de qualquer maneira, exceto a de uma variável predefinida.
Uma imagem do pedido nPentaflake. Deve ter pelo menos 100 px de largura e 100 px de comprimento. Pode ser salvo em um arquivo, exibido para o usuário ou enviado para STDOUT. Qualquer outra forma de saída não é permitida. Todos os formatos de imagem existentes antes desse desafio são permitidos.
Como codegolf, a pessoa com o menor número de bytes vence.
-1 porque os flocos de neve têm apenas 6 vezes de simetria! = D
@flawr De acordo com este artigo, apenas 0,1% dos flocos de neve têm simetria 6 vezes maior ... ou qualquer simetria. No entanto, esses flocos de neve que têm simetria pode ter simetria de 3 vezes em adição à simetria de 6 vezes: P
Bem, este artigo estudou apenas menos de 0,1% de todos os flocos de neve e, de qualquer maneira, não faz sentido, pois eles estudaram apenas os flocos de neve americanos. Aposto que os flocos de neve métricos são muito mais simétricos! (! PS: imagens bonitas do floco de neve # 167 é especialmente interessante !) (Eu notei que os flocos de neve métricas deve ter simetria 10 vezes.)
Tudo ficará bem, desde que seja gerado usando um dos métodos acima. No entanto, nnão pode ser predefinido no seu arquivo de script. Você pode ler na partir STDIN, alerta-lo do usuário, tomá-lo como um argumento de linha / função commad ... basicamente qualquer coisa que quiser, exceto para incorporá-lo diretamente em seu código.
Não quero marcar +1 porque tem 25 :(
Quinta iteração (já demorou um pouco para renderizar).
Uma ligeira alteração no código (infelizmente mais bytes) resulta nessa beleza =)
Ah, e outro:
Obrigado por me apontar para esse desafio, adicionei outra solução, espero que você não se importe;) Estou longe de sua contagem de bytes, de qualquer forma, achei interessante demais para ser desperdiçada.
A última linha é uma função que pode ser aplicada a um número inteiro n.
Os nomes das funções do Mathematica são longos. Alguém deve codificá-los por entropia e criar um novo idioma a partir dele. :)
Quando aplicado a 1:
Quando aplicado a 2:
— Peter Richter
Atualização: várias sugestões do @flawr me ajudaram a perder 16 bytes. Como somente isso me permitiu vencer a solução da flawr e que eu não teria encontrado o desafio sem a ajuda da flawr, considere isso uma submissão conjunta por nós :)
Essa é outra solução MATLAB, baseada em uma filosofia de sistemas de funções iteradas. Eu estava interessado principalmente no desenvolvimento do algoritmo em si e não joguei muito na solução. Certamente há espaço para melhorias. (Eu pensei em usar uma aproximação de ponto fixo codificada para c, mas isso não seria legal.)
Resultado para N=5(com um subsequente axis equal offpara beleza, mas espero que não conte em bytes):
Eu acho que você poderia economizar alguns bytes usando R=[p(:,2),[-p(2,2);p(1,2)]];(e eliminando a anterior R,C,S) e você pode usar q=[q R^l*[c-1+t(1,:);t(2,:)]/c]e eu achoc=1.5+5^.5/2;
@ flawr, obviamente, você está certo :) 1. obrigado pela matriz de rotação, 2. obrigado pelo novo q, eu ainda tinha um par desnecessário de parênteses lá ... 3. obrigado, mas o que é essa mágica ??: D 4. Como a solução agora é mais curta que a original, considero que isso também é parcialmente sua submissão.
O Mathematica suporta nova sintaxe Tabledesde a versão 10 Table[expr, n]:, que salva outro byte. Table[expr, n]é equivalente a Table[expr, {n}].
O núcleo desta função é usar números complexos para fazer transformações e depois convertê-los em pontos por ReIm.
πocupa dois bytes em UTF-8, então você obtém um total de 125 bytes.
O que é isso, OMFG
Afiando a resposta de Peter Richter com um fio de cabelo, aqui está uma das minhas. Ele se apóia fortemente na funcionalidade gráfica e menos em matemática e FP. O CirclePoints embutido é novo no 10.1 .
Edit: Graças a DumpsterDoofus para GoldenRatio
Você pode salvar 3 bytes substituindo ((1+Sqrt@5)/2)por GoldenRatio. Também na segunda linha, acho que deveria ser em p@0=Polygon@c[{1,0},5];vez de p@0=Polygon@cp[{1,0},5];. (Na verdade, eu sou Peter, tenho dois perfis, lol).
Sim! Boa decisão. Também vi o erro de digitação, mas esqueci de corrigi-lo. D'oh,
Uso uma técnica semelhante à resposta de njpipeorgan (de fato, roubei o 2Pi I/5 == Pi.4Itruque dele ), mas implementada como uma função recursiva.