这是数字0到9的像素化5 x 7字体:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(如果您在浏览器控制台或以javascript:
:开头的URL栏中运行此JavaScipt代码,则此字体和此页面的外观可能会更好$('#question pre,.answer pre').css('line-height',1)
。)
编写两个相等大小的矩形文本块,一个代表.
上面字体中的空白(),另一个代表实心的空格(█
)。
当将这两个文本块排列为与上述数字之一相同的5×7模式时,则所得的大文本块应为将该数字打印到stdout的程序。这应该适用于所有10位数字。
例如,如果您的.
文本块是
---
'''
你的█
文字块是
ABC
123
然后程序
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
应该输出0
。同样,程序
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
应该输出1
,依此类推直到程序为止9
。
您可以使用此堆栈片段制作数字形状的程序:
<style>textarea{font-family:monospace;}</style><script>function go(){var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");for(var e=document.getElementById("empty").value.split("\n"),n=document.getElementById("filled").value.split("\n"),l=[],o=0;o<7*e.length;o++){l[o]="";for(var d=0;5>d;d++)l[o]+=font[t][Math.floor(o/e.length)][d]?n[o%n.length]:e[o%e.length]}document.getElementById("output").value=l.join("\n")}font=[[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,0,1,0,0],[1,1,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,1,0,0],[0,1,0,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,0,0,1,0],[1,0,0,1,0],[1,0,0,1,0],[1,1,1,1,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,0,1,0]],[[1,1,1,1,1],[1,0,0,0,0],[1,0,0,0,0],[0,1,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,0],[1,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,1,1,1,1],[0,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,1,0,0],[0,0,1,0,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,1],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]]]</script><textarea id='empty' rows='8' cols='32' placeholder='empty space text block...'></textarea><textarea id='filled' rows='8' cols='32' placeholder='filled space text block...'></textarea><br>Digit <input id='digit' type='text' value='0'> <button type='button' onclick='go()'>Generate</button><br><br><textarea id='output' rows='16' cols='64' placeholder='output...' style='background-color: #eee;' readonly></textarea>
细节
- 10个大文本块程序均不需要输入。仅输出一位数字和可选的尾随换行符。输出到stdout或类似的替代方法。
- 这些程序均不能读取或访问其自己的源代码。将此视为严格的奎因挑战。
- 文本块可能不相同,并且必须具有非零尺寸。
- 文本块可以包含除行终止符之外的任何字符。
- 这10个程序必须是用相同语言编写的完整程序,它们不是REPL代码段。您可以选择在所有行尾添加换行符,也可以不添加。
计分
分数是一个文本块的面积(宽度乘以高度)。(它们的大小相同,因此对两个块进行计数是没有意义的。)示例的区域为3 x 2,得分为6。
最低分获胜。如果是平局,则以投票最高的答案为准。
text blocks may not be identical
真?我想看到有人通过提供两个相同的代码块来打破这一规则,当每个数字都是完全相同的代码时,它们会神奇地返回不同的数字^^
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
可以写成var t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
,虽然相同,但更短。您还可以改善其他方面,但是看起来确实很棒!