Écrivez un bloc de texte rectangulaire qui, lorsqu'il est disposé dans un tapis de Sierpinski , en utilisant des blocs d'espaces de même taille pour les parties vides, crée un programme qui affiche le numéro d'itération du tapis.
Par exemple, si votre bloc de texte est
TXT
BLK
puis lancer le programme
TXTTXTTXT
BLKBLKBLK
TXT TXT
BLK BLK
TXTTXTTXT
BLKBLKBLK
devrait sortir 1
car la forme du programme représente la première itération du tapis de Sierpinski.
De même, en cours d'exécution
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
devrait produire 2 car il s’agit de la deuxième itération du tapis de Sierpinski.
Exécuter le bloc de texte tel quel
TXT
BLK
devrait sortir 0
car il peut être considéré comme l'itération zéro.
Cela devrait fonctionner pour toutes les itérations ultérieures. (Du moins théoriquement, en supposant que l'ordinateur ait la mémoire et tout.)
Détails
- Les programmes ne peuvent pas lire ou accéder aux informations concernant leur code source. Traitez cela comme un défi quine strict.
- La sortie passe à stdout ou à une alternative similaire. N'affiche que le numéro et une nouvelle ligne de fin optionnelle. Il n'y a pas d'entrée.
- Le bloc de texte peut contenir des caractères qui ne sont pas considérés comme des fins de ligne . Le bloc de texte peut contenir des espaces.
- "L'espace vide" dans le tapis doit être entièrement composé de caractères d'espace .
- Vous pouvez éventuellement supposer que tous les programmes ont une nouvelle ligne.
Vous pouvez utiliser cet extrait de pile pour générer un tapis pour un bloc de texte donné à n'importe quelle itération:
<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>
Notation
La soumission dont le bloc de texte initial est le plus petit par zone (largeur multipliée par la hauteur) est le gagnant. L' TXT\nBLK
exemple est 3 par 2 pour un score de 6. (Fondamentalement, le code le plus court gagne, d'où le tag code-golf.)
Tiebreaker va à la soumission qui utilise le moins de caractères distincts dans son bloc de texte. S'il y a toujours égalité, répondez posté en premier gagne.