符号なし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 ] ]
テトロミノの形
ベース形状
文字O、I、S、Z、L、J、およびTで識別される7つのテトロミノ形状があります。
ローテーションと翻訳
形状が4x4マトリックス内で平行移動および/または回転した場合でも、同じテトロミノの有効なバリエーションと見なされます。たとえば、17600、1136、2272、および1604はすべてJ tetrominoes として識別される必要があります。
ラップしないでください!
ただし、形状は、マトリックスの境界をラップしたり、マトリックスの境界を超えてシフトしたりすることはできません。例えば、どちらも 568 も 688として識別されなければならないJの tetrominoes(ましてや他の任意の形状):
明確化と規則
- 入力は整数として、または2D配列、フラット配列、区切り文字列などの適切な形式の16桁の2進数として直接受け取ることができます。
- 入力は、符号なし16ビット整数(または配列または文字列としての同等の表現)であることが保証されています。
- 有効な形状が識別されたら、形状を識別する文字を大文字または小文字で印刷または返送する必要があります。
- 形状が識別されない場合は、テトロミノ文字と一致しない値を印刷または返す必要があります。また、何も返さないことも選択できます。
- 有効と見なされるには、マトリックスに追加のセルを含まない正確なテトロミノ形状が含まれている必要があります(テストケースの1911および34953を参照)。
- これはcode-golfなので、バイト単位の最短回答が勝ちです!
テストケース
このリンクをたどって、テストケースを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