Schreiben Sie einen rechteckigen Textblock, der bei Anordnung in einem Sierpinski-Teppich unter Verwendung gleich großer Leerzeichenblöcke für die leeren Teile ein Programm erstellt, das die Iterationsnummer des Teppichs ausgibt.
Zum Beispiel, wenn Ihr Textblock ist
TXT
BLK
Führen Sie dann das Programm aus
TXTTXTTXT
BLKBLKBLK
TXT TXT
BLK BLK
TXTTXTTXT
BLKBLKBLK
sollte ausgegeben werden, 1
da die Form des Programms die erste Iteration des Sierpinski-Teppichs darstellt.
Ebenso läuft
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
sollte 2 ausgeben, da dies die Form der zweiten Sierpinski-Teppichiteration ist.
Ausführen des Textblocks wie er ist
TXT
BLK
sollte ausgegeben werden, 0
da dies als nullte Iteration angesehen werden kann.
Dies sollte für alle weiteren Iterationen funktionieren. (Zumindest theoretisch, vorausgesetzt, der Computer hat den Speicher und alles.)
Einzelheiten
- Programme können möglicherweise keine Informationen über ihren Quellcode lesen oder darauf zugreifen. Behandle dies wie eine strenge Herausforderung für Quine.
- Die Ausgabe erfolgt an stdout oder eine ähnliche Alternative. Geben Sie nur die Nummer und einen optionalen Zeilenumbruch aus. Es erfolgt keine Eingabe.
- Der Textblock kann beliebige Zeichen enthalten, die nicht als Zeilenendezeichen gelten . Der Textblock darf Leerzeichen enthalten.
- Der "leere Raum" im Teppich muss vollständig aus Leerzeichen bestehen .
- Sie können optional davon ausgehen, dass alle Programme einen nachgestellten Zeilenumbruch haben.
Sie können dieses Stapel-Snippet verwenden, um bei jeder Iteration einen Teppich für einen bestimmten Textblock zu generieren:
<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>
Wertung
Die Einsendung, deren anfänglicher Textblock flächenmäßig am kleinsten ist (Breite mal Höhe), gewinnt. Das TXT\nBLK
Beispiel ist 3 mal 2 für eine Punktzahl von 6. (Grundsätzlich gewinnt der kürzeste Code, daher der Code-Golf-Tag.)
Tiebreaker geht zu dem Beitrag über, der die wenigsten unterschiedlichen Zeichen in seinem Textblock verwendet. Wenn immer noch unentschieden, antworte zuerst und gewinne.