Escriba un bloque rectangular de texto que, cuando se arregla en una alfombra Sierpinski , utilizando bloques de espacios del mismo tamaño para las porciones vacías, crea un programa que genera el número de iteración de la alfombra.
Por ejemplo, si su bloque de texto es
TXT
BLK
luego ejecuta el programa
TXTTXTTXT
BLKBLKBLK
TXT TXT
BLK BLK
TXTTXTTXT
BLKBLKBLK
debería salir 1
porque la forma del programa representa la primera iteración de la alfombra Sierpinski.
Del mismo modo, corriendo
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
debería dar salida 2 porque esta es la forma de la segunda iteración de la alfombra Sierpinski.
Ejecutando el bloque de texto como está
TXT
BLK
debería salir 0
porque puede considerarse la iteración cero.
Esto debería funcionar para todas las iteraciones posteriores. (Al menos en teoría, suponiendo que la computadora tenga la memoria y todo).
Detalles
- Los programas no pueden leer o acceder a información sobre su código fuente. Trate esto como un estricto desafío de quine.
- La salida va a stdout o una alternativa similar. Solo muestra el número y una nueva línea final opcional. No hay entrada
- El bloque de texto puede contener caracteres que no se consideran terminadores de línea . El bloque de texto puede contener espacios.
- El "espacio vacío" en la alfombra debe consistir completamente en caracteres espaciales .
- Opcionalmente, puede suponer que todos los programas tienen una nueva línea final.
Puede usar este fragmento de pila para generar una alfombra para un bloque de texto dado en cualquier iteración:
<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>
Puntuación
El envío cuyo bloque de texto inicial es más pequeño por área (ancho por alto) es el ganador. El TXT\nBLK
ejemplo es 3 por 2 para una puntuación de 6. (Básicamente gana el código más corto, de ahí la etiqueta de código de golf).
Tiebreaker va al envío que utiliza la menor cantidad de caracteres distintos en su bloque de texto. Si todavía está empatado, la respuesta obtuvo las primeras victorias.