Gere um floco de neve Koch
Um floco de neve Koch é um triângulo que, para cada um n
, é adicionado outro ponto equilateral no meio de cada lado: http://en.wikipedia.org/wiki/Koch_snowflake#Properties
Já tínhamos um desafio para o Koch Snowflake de complexidade kolmogrov . O novo desafio é desenhar um floco de neve Koch entre e .n=4
n
1
10
Regras
Os flocos de neve podem não estar codificados no programa ou em arquivos - eles devem ser gerados pelo seu programa.
Seu programa deve suportar todos os tamanhos
n
entre 1 e 10.O número de lados deve ser inserido pelo usuário por meio de entrada padrão.
Você deve imprimir uma representação gráfica do floco de neve na tela.
Amostra de flocos de neve Koch n
iguais a 1, 2, 3 e 4 (linhas verdes apenas para maior clareza, não os reproduzem):
No caso de um desempate, o programa com o maior número de upvotes vence (concurso pop).
fonte
n=7
, você não pode ver os triângulos recém-adicionados no floco de neve na tela do computador. Existe algum "melhor esforço" aqui? Existe uma resolução mínima para soluções baseadas em pixel?Respostas:
Mathematica 72
n = 3
Obrigado por alefhalpha.
fonte
AnglePath
no Mathematica 10.1.Graphics@Line@AnglePath[Nest[Join@@({-1,2,-1,#}&/@#)&,{2,2,2},Input[]-1]Pi/3]
ListLinePlot@AnglePath[Nest[Join@@({#,1,4,1}&/@#)&,{4,4,4},Input[]-1]π/3]
MATLAB,
119115Em uma virada incomum de eventos, descobri que esse programa realmente funcionava melhor quando jogava golfe. Primeiro, ficou muito mais rápido devido à vetorização. Agora, ele exibe um prompt útil
~n:~
lembrando ao usuário qual quantidade inserir!Novas linhas não fazem parte do programa.
n = 9:
o
é uma corda arbitrária que é igual ao[0 2 4 0]
módulo 6. e iπ / 3 elevado a essas potências fornece os vértices de um triângulo equilátero no plano complexo. O primeirokron
é usado para fazer uma cópia da lista de pontos com cada um duplicado 4 vezes.~~o
é a maneira conveniente de obter um vetor de 4. Em segundo lugar,diff(P)
encontra o vetor entre cada par de pontos consecutivos. Múltiplos deste vetor (0, 1/3, (1 + e -iπ / 3 ) / 3 e 2/3) são adicionados a cada um dos pontos antigos.fonte
T-SQL: 686 (excluindo formatação)
Para o SQL Server 2012 ou superior.
Mesmo que isso nunca seja um candidato, eu tinha que ver se conseguia fazê-lo no T-SQL. Acabou a abordagem de começar com as três arestas iniciais, recorrendo a cada aresta e substituindo-as por 4 arestas para cada nível. Finalmente, unindo tudo em uma única geometria para o nível especificado para @i
fonte
LOGO: 95
Define a função
k
com um parâmetro de nível único.Editar
No editor online deste http://www.calormen.com/jslogo/, você pode adicionar
k readword
para usar o prompt de entrada, mas por algum motivo esse comando não suporta a abreviação padrãorw
.A solução de 102 caracteres abaixo funciona no USBLogo com entrada padrão, conforme especificado na pergunta. No entanto, o código precisou de pequenas alterações, pois o UCBLogo possui um analisador estranho. Requer
to
eend
deve estar em linhas e espaço separados antes que:
seja necessário, mas, por outro lado,:
são opcionais.fonte
BBC BASIC, 179
REV 1
Como antes, mas em preto e branco, nas versões não-golfadas (mas simplificadas) e golfe. Não é um vencedor, apesar de fazê-lo dessa maneira, evita a necessidade de um tratamento especial para n = 1.
REV 0
De acordo com a resposta do OP ao @xnor, flocos de neve preenchidos são aceitáveis. Esta resposta foi inspirada no comentário do xnor. As cores são apenas para diversão e para mostrar como é construído. Pegue um triângulo (magenta neste caso) e plote com 6 triângulos 1/3 da base.
fonte
Mathematica - 177
Clipe de bônus de variação do ângulo da peça do meio
fonte
Python 3-139
Usa a biblioteca de gráficos da tartaruga.
fonte
"G">j
,"Q"<j
e usarfd(9/b)
para salvar 3 bytes? Além disso, você pode evitar que asif
declarações se multipliquem, por exemplo,("G">j)
com o argumento9/b
e colocá-las todas em uma linha atrásfor
. Oh! Depois, você pode até combinarrt
elt
usar120*(...)-60*(...)
Python 3, 117 bytes
Método:
n
éinput - 1
0000
, juntamos todos os caracteres com101
n
tempos iterativamente com o repetidas truque eval (graças a @xnor por isso).1
ou0
) e depois avançamos um comprimento (99/3^n
) que garante um tamanho semelhante para todosn
.0
da string será inútil, mas apenas redesenha a mesma linha do primeiro0
desenha.Exemplo de saída para
input = 3
:fonte
R:
240175Porque eu estou tentando entender o R, aqui está outra versão. É provável que haja maneiras muito melhores de fazer isso, e fico feliz em receber dicas. O que eu fiz parece muito complicado.
fonte
Sábio fwom youw gwave ...
Eu sabia que gostaria de tentar implementar isso no Befunge-98 usando o TURT, mas não consegui descobrir como fazer isso e fiquei sentado por vários meses. Agora, apenas recentemente, descobri uma maneira de fazer isso sem usar a auto-modificação! E entao...
Befunge-98 com a impressão digital TURT, 103
Vamos resolver alguns detalhes da implementação primeiro:
I
"imprima" a imagem em um arquivo SVG. Se você executar isso no CCBI sem o argumento de comando--turt-line=PATH
, ele sairá como um arquivo chamado CCBI_TURT.svg por padrão. Este é o mais próximo que pude "imprimir uma representação gráfica do floco de neve na tela" com os intérpretes disponíveis do Funge que pude encontrar. Talvez um dia haja um intérprete melhor por aí que tenha uma exibição gráfica para a tartaruga, mas por enquanto ...Basicamente, isso funciona usando a pilha como uma espécie de sistema L improvisado e expandindo-a rapidamente. Em cada passagem, se o número superior na pilha for:
f
na última linha);n-1, -1, n-1, 0, n-1, -1, n-1
.Pois
n = 10
esse processo leva muito tempo (alguns minutos no meu sistema) e o SVG resultante tem aproximadamente 10 MB de tamanho e fica invisível quando visualizado no navegador, porque você não pode ajustar o tamanho do pincel usando TURT. O IrfanView parece funcionar decentemente se você tiver os plugins certos. Não conheço muito bem o SVG, portanto não sei qual é o método preferido para exibir esses arquivos (especialmente quando eles são realmente grandes).Ei, pelo menos funciona - o que, considerando o Befunge, é algo para agradecer por si só.
fonte
Python 2, 127 bytes
fonte