... então este é um desafio para me fazer uma árvore.
Produza um programa ou função chamado tree que utiliza um único argumento inteiro N e desenha uma árvore Pitagórica N níveis profundamente, onde o nível 0 é apenas o tronco.
Cada junção da árvore deve colocar o vértice do triângulo em um ponto aleatório no perímetro (este ponto deve ser distribuído uniformemente por pelo menos 5 pontos igualmente espaçados ou uniformemente por todo o semicírculo).
Opcionalmente, sua árvore pode ser 3d, colorida ou iluminada de acordo com a hora do dia. No entanto, isso é código-golfe, portanto o menor arquivo vence.
EDIT: Vou encerrar o concurso e aceitar a menor resposta quando tiver uma semana
code-golf
graphical-output
alexander-brett
fonte
fonte
Respostas:
Mathematica,
246234221 caracteresEsta certamente não é a maneira mais elegante / mais curta de fazer isso.
Uso:
f[8]
E aqui estão exemplos de saídas para
f[6]
ef[10]
respectivamente.Um pouco não-destruído:
fonte
Show
lá eModule
também é desnecessário.Show
dica, mas como posso me livrarModule
? Se eu não declararp
local, ele será sobrescrito nas chamadas recursivas, então não poderia fazer as duas chamadas da mesma formap
, certo?Block
, que é menor queModule
.CFDG, 134 caracteres
Este não é exatamente válido, porque você não pode limitar a profundidade da recursão. Mas o problema exige apenas uma solução nesse caso . :)
Os resultados são parecidos com este
Para outros 46 caracteres ( 180 caracteres no total), você pode até colorir:
fonte
Postscript,
322270Editar: parece que
realtime
não pode ser usado como semente geradora aleatória adequada. Portanto, usaremos a variável de ambiente para esse fim e executaremos o programa assim:ou
Agora nossas árvores são menos previsíveis. 14 bytes são adicionados à contagem total. Outras alterações: 1) O argumento do programa agora é passado na linha de comando. 2) Nenhum contador explícito de iteração - o tamanho da pilha serve para esse propósito (o ângulo de rotação da ramificação esquerda é armazenado na pilha, para desenhar a ramificação direita posteriormente). 3) Não há variável nomeada para a profundidade necessária - o tamanho da pilha é seu deslocamento, na pilha. É deixado lá na saída, ou seja, não é consumido.
Eu acho que é bastante óbvio - o estado dos gráficos é preparado e o
f
procedimento é chamado recursivamente para cada nível consecutivo de profundidade, duas vezes - para os ramos 'esquerdo' e 'direito'. Trabalhar com retângulos de1x1
tamanho (consulte a escala original) evita o problema de multiplicar pelo comprimento lateral. O ângulo de rotação do ramo esquerdo é randomizado - uma das 5 divisões aleatórias igualmente espaçadas - é usada para evitar possíveis casos feios para uma aleatoriedade uniforme.Pode ser lento para a profundidade necessária de mais de 20 ou mais.
A seguir, é apresentada a versão golf, usando tokens binários codificados em ASCII (consulte a resposta do luser droog no tópico vinculado). Note,
cos
,sin
,rand
não pode usar esta notação..
fonte
-dGraphicsAlphaBits
é um sinalizador para saída de anti-alias para evitar bordas irregulares de quadrados maiores, pode ser omitido (ou 'escondido' em, por exemplo, variável de ambiente). Algumas pessoas podem gostar mais sem essa bandeira (as folhas das árvores ficam mais "volume"). Bem, esses 20 bytes não são muito importantes. Eu diria que 20 a 25% de desconto usando tokens binários codificados em ASCII (a julgar pela resposta do tópico vinculado). Talvez 50% de desconto sem codificação ASCII, 2 bytes binários por token de nome do sistema. Será parecido com algumas linguagens normalmente vencedoras;)Coffeescript
377B352BSinto-me sujo escrevendo coffeescript, mas não consigo encontrar um pacote de desenho decente para python3: - /
Javascript
393B385BUm pouco mais bonito em javascript e estou muito mais feliz com o loop for, mas sem o [x, y, z] = Uma sintaxe que não posso ser curta o suficiente para superar o café
Devo dizer que estou um pouco irritado, isso é quase o dobro da solução mathematica: - / veja em ação: http://jsfiddle.net/FK2NX/3/
fonte
X
retornoX
, você pode encadeá-los. E você pode salvar outro bom grupo de caracteres salvandoM.sin
eM.cos
em variáveis de um caractere.s=M.sin
.rotate
usathis
, esin
não. Você precisaria fazer algo assimR=X.rotate.bind(X)
, mas provavelmente não vale mais a pena.