Escreva o menor programa possível para criar fractais afins. Você pode usar qualquer método que achar que gere os mesmos resultados que as regras abaixo. Você não precisa usar nenhuma idéia dos métodos sugeridos!
Seu programa terá duas entradas, a primeira a definir o padrão no formato 074
de três dígitos de 0 a 7. A segunda entrada definirá o tamanho, 3
será 8x8, 4
será 16x16 e assim por diante (2 ^ n). Seu programa deve gerar o resultado correto para todos os tamanhos, de 0 (1x1) a pelo menos 5 (32x32). Se produzir qualquer saída para números mais altos, deve estar correta, ou seja, deve produzir a saída correta até um determinado tamanho, mas não produzirá saída acima desse tamanho, se estiver errado. Você pode assumir um tamanho máximo de 15 (32768x32768), já que esse é um tamanho insano para a arte ASCII (1 GB)!
Um padrão 8x8 será semelhante a abaixo (regra 160
). O dígito mais à esquerda será para o bloco A
, o dígito do meio (sem pensamentos rudes, por favor!) Para o bloco B
e o dígito mais à direita para o bloco C
. Para construir o fractal, reduza-o pela metade em ambas as dimensões e aplique a regra de rotação / espelhamento para o bloco. Para reduzir o padrão, divida-o igualmente em áreas 2x2. Haverá 3 caracteres visíveis ou nenhum em cada área. Se houver caracteres visíveis, coloque um caractere no local apropriado no bloco menor, caso contrário, coloque um espaço. Regras 0
- 3
não são espelhadas, regras 4
- 7
são espelhadas. Regras 0
e 4
não são rotacionadas, 1
e 5
são giradas 90 graus no sentido horário, 2
e6
são girados 180 graus 3
e 7
girados 270 graus no sentido horário. Costure os três blocos juntos na ordem mostrada, A
no canto superior esquerdo, no canto B
inferior esquerdo e no C
canto inferior direito.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Encolhido, girado e espelhado pelo número da regra:
0 1 2 3 4 5 6 7
---- ---- ---- ---- ---- ---- ---- ----
AA BAA CCB C C BCC AAB AA
A BB A CBB CC CC BBC A BB A
BBC CC A A BB BB A A CC CBB
BCC C AA AAB BAA AA C CCB
Regras:
- Não espelhado, girado 90 graus no sentido horário
- Não espelhado, girado 180 graus no sentido horário
- Não espelhado, girado 270 graus no sentido horário
- Espelhado, mas não girado
- Espelhado e girado 90 graus no sentido horário
- Espelhado e girado 180 graus no sentido horário
- Espelhado e girado 270 graus no sentido horário
- Regra 0: Não espelhado, Não girado
O espelhamento é sempre feito primeiro e é feito diagonalmente no canto em branco, por exemplo, regra 0 vs regra 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Apenas regras 1
, 6
e 0
são usados no padrão acima, nessa ordem. Após as transformações terem sido aplicadas e os blocos costurados, eles se parecerão com os abaixo, exceto que espaçei cada bloco um do outro por um espaço. Seu código não terá esse espaço extra. Se você compará-lo com a imagem "pai", verá que ele possui caracteres visíveis nas mesmas posições.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Outra maneira de gerar a imagem sem diminuir é a seguinte: Comece com um caractere:
X
Aplique as transformações para cada um dos três blocos (nenhum, pois é apenas um caractere) e costure os blocos:
X
XX
Aplique as transformações para cada um dos três blocos novamente:
1
--
XX
X
6 0
-- --
XX X
X XX
Costure-os juntos:
XX
X
XXX
XXX
Aplique as transformações para cada um dos três blocos novamente:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Costure-os juntos:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Você pode usar qualquer caractere ou caracteres imprimíveis (0x21 - 0x7E) para a parte visível do padrão, mas apenas o caractere de espaço (0x20) para os espaços em branco. Espaços finais são permitidos, mas não deve haver espaços em branco fora do quadrado inteiro (por exemplo, para um quadrado 8x8, não pode haver caracteres após a coluna 8).
Existem 512 regras diferentes, mas algumas produzem o mesmo padrão. Como observação lateral, qualquer padrão que contenha apenas 0
e 4
produzirá o triângulo de Sierpinski (8 regras diferentes).
Opcionalmente, você pode postar seu padrão favorito e a regra que o gera. Se o fizer, verifique se o tamanho é pelo menos 3 (8x8) para diferenciá-lo de regras semelhantes.
Respostas:
CJam,
63 57 5452 bytesComo funciona :
A idéia básica é que você execute um loop, o segundo número de entrada de vezes. Em cada loop, a partir de uma única matriz de array contendo
0
([[0]]
), construímos o fractal para a próxima etapa usando as três regras, preenchemos o quadrante vazio e preparamos os quadrantes para o próximo loop.Experimente online aqui
fonte
0
e James Bond tiver uma licença para matar.007
: IndexOutOfBoundsExceptionAPL (Dyalog Classic) , 47 bytes
Experimente online!
fonte