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.
Entrada
A ordem n
. Isso pode ser dado de qualquer maneira, exceto a de uma variável predefinida.
Saída
Uma imagem do pedido n
Pentaflake. 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.
Ganhando
Como codegolf, a pessoa com o menor número de bytes vence.
fonte
n
não pode ser predefinido no seu arquivo de script. Você pode lern
a partirSTDIN
, 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.Respostas:
Matlab, 226
Ungolfed:
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:
fonte
Mathematica, 200 bytes
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
:fonte
MATLAB,
235233217 bytesAtualizaçã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.)Versão não destruída:
Resultado para
N=5
(com um subsequenteaxis equal off
para beleza, mas espero que não conte em bytes):fonte
R=[p(:,2),[-p(2,2);p(1,2)]];
(e eliminando a anteriorR,C,S
) e você pode usarq=[q R^l*[c-1+t(1,:);t(2,:)]/c]
e eu achoc=1.5+5^.5/2;
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.Mathematica, 124 bytes
O Mathematica suporta nova sintaxe
Table
desde a versão 10Table[expr, n]
:, que salva outro byte.Table[expr, n]
é equivalente aTable[expr, {n}]
.O núcleo desta função é usar números complexos para fazer transformações e depois convertê-los em pontos por
ReIm
.Caso de teste:
fonte
π
ocupa dois bytes em UTF-8, então você obtém um total de 125 bytes.Mathematica,
199196 bytesAfiando 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
fonte
((1+Sqrt@5)/2)
porGoldenRatio
. Também na segunda linha, acho que deveria ser emp@0=Polygon@c[{1,0},5];
vez dep@0=Polygon@cp[{1,0},5];
. (Na verdade, eu sou Peter, tenho dois perfis, lol).Mathematica, 130 bytes
Uso uma técnica semelhante à resposta de njpipeorgan (de fato, roubei o
2Pi I/5 == Pi.4I
truque dele ), mas implementada como uma função recursiva.Exemplo de uso (usando
%
para acessar a função anônima que foi impressa na última linha):fonte