Dado um número inteiro de 16 bits N não assinado , sua tarefa é determinar se sua representação binária mapeada dentro de uma matriz 4x4 corresponde a uma forma de tetromino e, em caso afirmativo, qual é a forma.
Matriz
Cada bit de N é mapeado dentro de uma matriz 4x4, da esquerda para a direita e de cima para baixo, começando pela mais significativa.
Exemplo :
N = 17600
binary representation: 0100010011000000
matrix: [ [ 0, 1, 0, 0 ],
[ 0, 1, 0, 0 ],
[ 1, 1, 0, 0 ],
[ 0, 0, 0, 0 ] ]
Formas de Tetromino
Formas básicas
Existem 7 formas de tetromino, identificadas pelas letras O , I , S , Z , L , J e T :
Rotações e traduções
Se uma forma é traduzida e / ou girada dentro da matriz 4x4, ainda é considerada uma variação válida do mesmo tetromino. Por exemplo, 17600, 1136, 2272 e 1604 devem ser todos identificados como J tetrominos:
Não embrulhe!
No entanto, as formas não podem ser contornadas ou deslocadas além de qualquer limite da matriz. Por exemplo, nem 568 nem 688 devem ser identificados como J tetrominós (quanto mais qualquer outra forma):
Esclarecimentos e regras
- Você pode receber a entrada como um número inteiro ou diretamente como 16 dígitos binários em qualquer formato razoável, como uma matriz 2D, uma matriz plana ou uma sequência delimitada.
- A entrada é garantida como um número inteiro de 16 bits não assinado (ou sua representação equivalente como uma matriz ou uma sequência de caracteres).
- Quando uma forma válida é identificada, você deve imprimir ou retornar a letra que a identifica, em maiúsculas ou minúsculas.
- Se nenhuma forma for identificada, você deverá imprimir ou retornar um valor que não corresponda a nenhuma letra tetromina. Você também pode optar por não devolver nada.
- Para ser considerada válida, a matriz deve conter a forma exata de tetromino sem células adicionais (consulte 1911 e 34953 nos casos de teste).
- Isso é código-golfe , então a resposta mais curta em bytes vence!
Casos de teste
Você pode seguir este link para obter os casos de teste como matrizes 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
, ou seja, 1111011110111101111
para 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
em JS: P