编写一个矩形的文本块,当该文本块布置在Sierpinski地毯中时,使用相同大小的空白区域作为空白部分,以创建一个输出地毯迭代次数的程序。
例如,如果您的文本块是
TXT
BLK
然后运行程序
TXTTXTTXT
BLKBLKBLK
TXT TXT
BLK BLK
TXTTXTTXT
BLKBLKBLK
应该输出,1
因为程序的形状代表了Sierpinski地毯的第一次迭代。
同样,正在运行
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
应该输出2,因为这是第二次Sierpinski地毯迭代的形状。
按原样运行文本块
TXT
BLK
应该输出,0
因为它可以视为第零次迭代。
这应该适用于所有进一步的迭代。(至少从理论上讲,假设计算机具有内存和所有内存。)
细节
- 程序可能无法读取或访问有关其源代码的信息。将此视为严格的奎因挑战。
- 输出到stdout或类似的替代品。仅输出数字和可选的尾随换行符。没有输入。
- 文本块可以包含任何不视为行终止符的字符。文本块可能包含空格。
- 地毯上的“空空间”必须完全由空间字符组成。
- 您可以选择假设所有程序的末尾都有换行符。
您可以在任何迭代中使用此堆栈片段为给定的文本块生成覆盖区:
<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>
计分
初始文本块的面积(宽度乘以高度)最小的提交者为获胜者。该TXT\nBLK
示例是3 x 2,得分为6。(基本上,最短的代码获胜,因此是代码高尔夫球标记。)
Tiebreaker进入使用其文本块中最少的不同字符的提交。如果仍然并列,则答案发布为第一获胜者。