在游戏方块,有7种类型的砖或的TETR 我 minoes,其在数学上被称为的TetR ö minoes,因为它们都与4个平方段制成:
具有名称I,J,L,O,S,T和Z,它们对应于它们的近似形状。计算90°旋转时,总共有19种独特的形状:
I
I
I
I
IIII
J
J
JJ
JJJ
J
JJ
J
J
J
JJJ
L
L
LL
L
LLL
LL
L
L
LLL
L
OO
OO
SS
SS
S
SS
S
TTT
T
T
TT
T
T
TTT
T
TT
T
ZZ
ZZ
Z
ZZ
Z
挑战
编写一个矩形代码块,作为这19个形状的基本段。当此代码排列成一个形状时,应形成一个程序,输出与该形状相关的单个大写字母。这必须适用于所有19种形状。
在19种形状中,有些出现的前导空白区域完全用空格()填充。尾随的空白区域没有填充任何东西(因此程序并不总是完全矩形)。
例
假设这是您的代码块:
ABC
123
然后,将块安排到S Tetris中的任何一种都将是一个打印程序S
:
ABCABC
123123
ABCABC
123123
ABC
123
ABCABC
123123
ABC
123
(请注意,所有前导空白都填充有空格字符,并且没有行尾有空格。)
相同的想法适用于所有其他六个零件及其各自的旋转。
笔记
- 所有19个最终程序都将以相同的编程语言运行。
- 如果需要,您可以在所有程序中添加一个尾随换行符(不只是某些,全部或没有)。
- 您的代码块中可能包含不是行终止符的任何字符(包括空格)。
- 用可选的尾随换行符将字母输出到stdout(或您的语言的最接近的替代品)。
计分
代码块面积最小(宽度乘以高度)的提交将获胜。这实质上意味着最短的代码获胜,这就是为什么将其标记为code-golf的原因。决胜局获得最高的投票答案。
该ABC\n123
示例的面积为3×2 = 6。
片段
给定一个代码块,此代码片段将生成所有19个程序:
<script>function drawShape(X,n,v){for(var t="",e=0;e<v.length;e++)for(var l=0;l<n.length;l++){for(var r=0;r<v[e].length;r++)t+="X"===v[e][r]?n[l]:X[l];t+="\n"}return t}function go(){var X=document.getElementById("input").value;if(0!=X.length){var n=X.replace(/./g," ").split("\n");X=X.split("\n");for(var v="I (v1):|I (v2):|J (v1):|J (v2):|J (v3):|J (v4):|L (v1):|L (v2):|L (v3):|L (v4):|O:|S (v1):|S (v2):|T (v1):|T (v2):|T (v3):|T (v4):|Z (v1):|Z (v2):".split("|"),t="X\nX\nX\nX|XXXX| X\n X\nXX|XXX\n X|XX\nX\nX|X\nXXX|X\nX\nXX| X\nXXX|XX\n X\n X|XXX\nX|XX\nXX| XX\nXX|X\nXX\n X|XXX\n X|X\nXX\nX| X\nXXX| X\nXX\n X|XX\n XX| X\nXX\nX".split("|"),e="",l=0;l<v.length;l++)e+=v[l]+"\n\n"+drawShape(n,X,t[l].split("\n"))+"\n";e=e.substring(0,e.length-2),document.getElementById("output").value=e}}</script><style>html *{font-family: monospace;}</style>Code Block:<br><textarea id='input' rows='8' cols='64'>ABC
123</textarea><br><button type='button' onclick='go()'>Go</button><br><br>All 19 Programs:<br><textarea id='output' rows='24' cols='64'></textarea>