给定一个无符号的16位整数N,您的任务是确定映射在4x4矩阵内的二进制表示形式是否与tetromino形状匹配,如果匹配,则匹配哪个形状。
矩阵
N的每一位都从最高有效位开始,从左到右,从上到下映射到4x4矩阵内。
范例:
N = 17600
binary representation: 0100010011000000
matrix: [ [ 0, 1, 0, 0 ],
[ 0, 1, 0, 0 ],
[ 1, 1, 0, 0 ],
[ 0, 0, 0, 0 ] ]
Tetromino形状
基本形状
有7种tetromino形状,由字母O,I,S,Z,L,J和T标识:
旋转和平移
如果在4x4矩阵中平移和/或旋转形状,则仍将其视为同一四聚胺的有效变体。例如,应该将17600、1136、2272和1604都标识为J trotrominoes:
不要包!
但是,形状不能环绕或移出矩阵的任何边界。例如,既不是 568 也不 688应当认定为Ĵ tetrominoes(更不用说任何其它形状):
澄清和规则
- 您可以将输入作为整数,也可以直接将其作为16位二进制数字以任何合理的格式输入,例如2D数组,平面数组或定界字符串。
- 确保输入为无符号的16位整数(或其等效表示为数组或字符串)。
- 标识有效形状后,必须以大写或小写字母打印或返回标识该形状的字母。
- 如果未识别出任何形状,则必须打印或返回不与任何Tetromino字母匹配的值。您也可以选择不返回任何内容。
- 为了被认为是有效的,矩阵必须包含确切的四聚体形状,而没有任何其他单元格(在测试案例中请参见1911和34953)。
- 这是代码高尔夫球,因此最短答案以字节为单位!
测试用例
您可以单击此链接将测试用例作为2D数组获取。
0 -> false
50 -> false
51 -> 'O'
1911 -> false
15 -> 'I'
34952 -> 'I'
34953 -> false
1122 -> 'S'
3168 -> 'Z'
785 -> 'L'
1136 -> 'J'
568 -> false
688 -> false
35968 -> 'T'
19520 -> 'T'
0
,即1111011110111101111
for 65535
吗?
15,240,3840,4369,8738,17476,34952,61440
J:71,113,142,226,275,550,802,1100,1136,1604,1808,2272,3208,3616,4400,8800,12832,17600,18176,25664,28928,36352,51328,57856
L:23,46,116,232,368,547,736,785,1094,1570,1856,2188,3140,3712,5888,8752,11776,12560,17504,25120,29696,35008,50240,59392
O:51,102,204,816,1632,3264,13056,26112,52224
S:54,108,561,864,1122,1728,2244,8976,13824,17952,27648,35904
T:39,78,114,228,305,562,610,624,1124,1220,1248,1824,2248,3648,4880,8992,9760,9984,17984,19520,19968,29184,35968,58368
Z:99,198,306,612,1224,1584,3168,4896,9792,19584,25344,50688
func1 . func2 . func3
在JS中使用功能链的技术:P