Escreva um bloco de texto retangular que, quando organizado em um tapete Sierpinski , usando espaços do mesmo tamanho para as partes vazias, cria um programa que gera o número de iteração do tapete.
Por exemplo, se o seu bloco de texto for
TXT
BLK
então executando o programa
TXTTXTTXT
BLKBLKBLK
TXT TXT
BLK BLK
TXTTXTTXT
BLKBLKBLK
deve sair 1
porque a forma do programa representa a primeira iteração do tapete Sierpinski.
Da mesma forma, executando
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
TXT TXTTXT TXTTXT TXT
BLK BLKBLK BLKBLK BLK
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
TXTTXTTXT TXTTXTTXT
BLKBLKBLK BLKBLKBLK
TXT TXT TXT TXT
BLK BLK BLK BLK
TXTTXTTXT TXTTXTTXT
BLKBLKBLK BLKBLKBLK
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
TXT TXTTXT TXTTXT TXT
BLK BLKBLK BLKBLK BLK
TXTTXTTXTTXTTXTTXTTXTTXTTXT
BLKBLKBLKBLKBLKBLKBLKBLKBLK
deve gerar 2 porque esse é o formato da segunda iteração do tapete de Sierpinski.
Executando o bloco de texto como está
TXT
BLK
deve sair 0
porque pode ser considerada a iteração zero.
Isso deve funcionar para todas as iterações adicionais. (Pelo menos teoricamente, supondo que o computador tenha memória e tudo.)
Detalhes
- Os programas podem não ler ou acessar informações sobre seu código-fonte. Trate isso como um desafio estrito à questão.
- A saída vai para stdout ou alternativa semelhante. Somente imprima o número e uma nova linha opcional à direita. Não há entrada.
- O bloco de texto pode conter caracteres que não sejam considerados terminadores de linha . O bloco de texto pode conter espaços.
- O "espaço vazio" no tapete deve consistir inteiramente em caracteres de espaço .
- Opcionalmente, você pode assumir que todos os programas têm uma nova linha à direita.
Você pode usar esse snippet de pilha para gerar um tapete para um determinado bloco de texto em qualquer iteração:
<style>#o,#i{font-family:monospace;}</style><script>function c(e){e=e.split("\n");for(var n=new Array(3*e.length),t=0;t<n.length;t++){var l=t%e.length;n[t]=e[l]+(t>=e.length&&t<2*e.length?e[l].replace(/./g," "):e[l])+e[l]}return n.join("\n")}function f(){for(i=document.getElementById("i").value,n=parseInt(document.getElementById("n").value);n>0;)i=c(i),n--;document.getElementById("o").value=i}</script><textarea id='i'placeholder='code block...'rows='8'cols='32'></textarea><br>Iterations <input id='n'type='text' value='1'><br><br><button type='button'onclick='f()'>Generate</button><br><br><textarea id='o'placeholder='output...'rows='8'cols='32'style='background-color:#eee'readonly></textarea>
Pontuação
O envio cujo bloco de texto inicial é menor por área (largura x altura) é o vencedor. O TXT\nBLK
exemplo é 3 por 2 para uma pontuação de 6. (Basicamente, o código mais curto vence, daí a tag code-golf.)
O desempatador vai para o envio que usa o menor número de caracteres distintos em seu bloco de texto. Se ainda estiver empatado, responda as primeiras vitórias postadas.