以下是数字0到9的像素化5×7字体:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.(如果您在浏览器控制台或以javascript:__:$('#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>你的分数是你的一个文本块的面积(宽度、时间、高度)。(它们大小相同,因此没有必要计算这两个区块。)该示例的面积为3乘2,得分为6。
得分最低者获胜。如果发生关系,最高投票的答案将获胜。
发布于 2015-03-04 00:35:42
\ !9
4n; n/
1n;\
\
0n;n7\\\ \; n8/
/!/!v
\ ;6
3n;\ ! /nn
2n;n5< 8;此代码不包含任何逻辑或算术,只使用静态重定向><>'s 2D指令指针(IP)与‘镜像’(/和\)和两个‘箭头’(<和v)。唯一的其他流量控制器是“蹦床”(!),它跳过下一个字符。
IP从左上角向东开始。经过一些重定向,它到达一个数字,它被推到堆栈上,用n打印出来,程序以;结束。
块“识别”程序的当前状态,这是因为IP进入哪个点,并根据它的状态来决定应该释放指针的方向(接下来应该执行哪个块)以及指针应该保留的确切位置(这将是新的状态)。当然,块不执行任何逻辑,所有这些行为都来自重定向器。
https://codegolf.stackexchange.com/questions/47296
复制相似问题