英语和大多数编程语言都是从左到右,从上到下编写和读取的,但并非必须如此。
实际上对于文本块
ABC
DEF
我可以想到八种相关的阅读方式:
- 从左到右,从上到下(LTR-TTB):
ABCDEF
- 从上到下,从左到右(TTB-LTR):
ADBECF
- 从左到右,从下到上(LTR-BTT):
DEFABC
- 从下到上,从左到右(BTT-LTR):
DAEBFC
- 从右到左,从上到下(RTL-TTB):
CBAFED
- 从上到下,从右到左(TTB-RTL):
CFBEAD
- 从右到左,从下到上(RTL-BTT):
FEDCBA
- 从下到上,从右到左(BTT-RTL):
FCEBDA
挑战
编写一个矩形的文本块,以您选择的语言将其作为八个单行程序以上述八种方式读取。这些程序中的每一个都应输出一个从1到8的不同整数。
哪个读取方向输出哪个数字都没有关系,它们不必与上面的数字匹配。例如,如果您的文本块仍然
ABC
DEF
然后该程序ABCDEF
可能输出5
和FEDCBA
力量输出2
,而其他六个方案将输出1
,3
,4
,6
,7
,和8
一些秩序。
文本块可以包含除行终止符之外的任何字符。
如果您的语言没有正确的标准输出,则输出应转到标准输出或类似的替代方法。没有输入。您可能会假定程序在REPL环境中运行。
Pietu1998慈善地编写了一个JSFiddle,当给出一段文本时,它给出了8种不同的单行程序。我已经将其放入堆栈片段中:
<script>function f(n){n=n.split("\n");var e=n.map(function(n){return n.length}).sort()[n.length-1];n=n.map(function(n){return(n+Array(e+1).join(" ")).substring(0,e)});var t=n[0].split("").map(function(e,t){return n.map(function(n){return n[t]}).join("")});n=[n.join(""),n.reverse().join(""),t.join(""),t.reverse().join("")],n=n.concat(n.map(function(n){return n.split("").reverse().join("")})),document.getElementById("a").innerHTML=n.map(function(n,e){return document.getElementById("b").checked?n+" "+"LLTTRRBB"[e]+"T"+"RRBBLLTT"[e]+"-"+"TBLRBTRL"[e]+"T"+"BTRLTBLR"[e]:n}).join("\n")}</script><textarea onkeyup="f(this.value)" id="c" placeholder="Code"></textarea><br/><input type="checkbox" id="b" onchange="f(document.getElementById('c').value)" checked/> <label for="b">Show directions</label><br/><pre id="a"></pre>
计分
分数是文本块的面积(宽度乘以高度)。得分最低的提交者获胜。(从本质上讲,最小的代码获胜,因此赢得了代码高尔夫标签。)Tiebreaker转到了较早发布的提交。
这个例子是2 x 3,所以它的分数是6。分数小于4(2 x 2)是不可能的,因为那样8个程序中的一些将是相同的,并且不能输出两个不同的值。
String.prototype.repeat()
还是有点新。还确认现在可以在IE中工作。新提琴