O floco de neve Koch (também conhecido como estrela Koch e ilha Koch) é uma curva matemática e uma das primeiras curvas fractais já descritas. Baseia-se na curva de Koch, que apareceu em um artigo de 1904 intitulado "Em uma curva contínua sem tangentes, construtível a partir da geometria elementar" (título original em francês: "Sur une courbe continue sans tangente, obtenue par une construction geometrique élémentaire") por o matemático sueco Helge von Koch.
Aqui estão algumas representações ascii de várias iterações:
n=1
__
\/
n=2
__/\__
\ /
/_ _\
\/
n=3
__/\__
\ /
__/\__/ \__/\__
\ /
/_ _\
\ /
__/ \__
\ /
/_ __ __ _\
\/ \ / \/
/_ _\
\/
Como obviamente existe um limite para a resolução da representação ascii, devemos aumentar o tamanho do floco de neve em um fator de 3 para cada iteração para mostrar detalhes adicionais.
Escreva o código mais curto para gerar o floco de neve no mesmo estilo para n = 4
Seu programa não deve receber nenhuma entrada.
Seu programa deve gravar o floco de neve no console.
fonte
Respostas:
Python, 338 bytes
Apenas mais uma exploração unicode
correr em ideone
fonte
Python,
650612594574 caracteresIsso funciona expandindo o triângulo por um fator de 3 a cada vez. Para fazer isso, precisamos acompanhar se cada símbolo é um limite esquerdo ou direito (por exemplo, como
/
é expandido depende de qual lado do lado de/
dentro está). Usamos símbolos diferentes para os dois casos possíveis, como a seguir:A
d
variável lida com o caso especial em que a expansão de uma
precisa se estender para o 3x3 na próxima linha.fonte
('acEei',r'_/\\ ')
=>('aecEi','_\/\ ')
economiza mais 1. Você também pode querer verificar ounicode.translate()
.Código de máquina de 16 bits do MS-DOS: 199 bytes
Decodifique usando este site , salve como arquivo 'koch.com' e execute no prompt de comando do WinXP.
Atualizar
Aqui está uma versão do assembler de fácil leitura:
fonte
"scAA...w==".decode("base64")
a decodificação em python2 (não funciona para Python3)Perl,
176175 bytesPostando isso como uma resposta separada, porque ele usa um arquivo de origem binário, que talvez seja um pouco barato. Mas considerando que ainda é o código-fonte Perl , acho notável que ele supera a solução de código de máquina do MS-DOS !
Origem como codificado em base64
Um pouco mais legível
Substitua todas as instâncias
/<[0-9a-f]+>/
pelos dados binários relevantes:Nesta versão, o floco de neve é codificado da seguinte maneira:
Os 8 bits em cada byte são divididos assim:
R
codifica uma série de espaços. A execução mais longa tem 27 caracteres, portanto, todas as execuções cabem em 5 bits.C
codifica uma sequência de caracteres que são simplesmente pesquisados na matriz literal. (Eu costumava ter codificações um pouco mais loucas aqui, onde a matriz continha apenas/ \ _
, mas o código Perl necessário para decodificá-la era mais longo ...)Tenho sorte de que os dados binários não contenham nenhum
"
/'
ou\
que precisariam escapar. Eu não planejei isso. Mas mesmo que isso acontecesse, eu provavelmente poderia ter mudado a ordem dos itens da matriz para corrigir isso.É incrível como essa solução é comparada com as dezenas de outras soluções pelas quais eu passei antes de criar essa solução. Eu experimentei muitas codificações bit a bit diferentes e mais complexas que essa, e nunca me ocorreu que uma mais simples pudesse valer a pena simplesmente porque o código Perl para decodificá-la seria mais curto. Também tentei comprimir repetições nos dados usando interpolação variável (veja a outra resposta), mas com a versão mais recente que não ganha mais caracteres.
fonte
Python, 284
Com um pouco mais de espaço em branco:
O lado esquerdo está comprimido; o lado direito é reproduzido do lado esquerdo.
fonte
Perl,
224223 caracteresUm pouco mais legível
Como funciona
Para uma explicação de como funciona, veja a outra resposta na qual eu publico o mesmo em binário . Sinto muito por não estar realmente gerando o floco de neve Koch, apenas o comprimindo ...
Versões prévias
(359) Codificou o floco de neve inteiro em vez da metade esquerda. Os espaços foram incluídos na codificação de bits; ainda não há duração. Utilizou várias variáveis interpoladas mais uma
@_
matriz que foi acessada usandos/\d/$_[$&]/eg
. Novas linhas foram codificadas como!
.(289) Primeira versão que codificava apenas a metade esquerda do floco de neve.
(267) Primeira versão que usou codificação de execução para os espaços.
(266) Mude
' '
para$"
.(224) Compressão radicalmente diferente, codificada como base-64. (Agora equivalente à versão binária .)
(223) Percebi que posso colocar a impressão dentro do último subst e, assim, salvar um ponto e vírgula.
fonte