Desafio
Dada uma lista de números inteiros positivos, descubra se existe uma permutação em que, até um bit de cada um dos números inteiros, um número binário composto por todos os 1
s possa ser criado.
O número de bits no número binário resultante é igual ao MSB mais alto da lista de números inteiros.
Saída
Seu código deve gerar ou retornar um valor de truthy / falsey indicando se existe uma permutação.
Exemplos
Verdade:
Com a lista [4, 5, 2]
e sua representação binária [100, 101, 10]
, podemos usar o terceiro, o primeiro e o segundo bits, respectivamente, para criar 111
:
4 -> 100 -> 100 -> 1
5 -> 101 -> 101 -> 1
2 -> 010 -> 010 -> 1
Result 111
Com a lista [3, 3, 3]
, todos os números têm o primeiro e o segundo bits definidos como 1
, para que possamos escolher com um número de sobra:
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 ->
Result 11
Falsey:
Com a lista [4, 6, 2]
, nenhum dos números tem o primeiro bit definido como 1
, portanto, o número binário não pode ser criado:
4 -> 100
6 -> 110
2 -> 010
Com a lista [1, 7, 1]
, apenas um dos números tem o segundo e o terceiro bits definidos como 1
e o número não pode ser criado:
1 -> 001
7 -> 111
1 -> 001
Obviamente, se o número máximo de bits definidos exceder o número de números inteiros, o número do resultado nunca poderá ser criado.
Casos de teste
Verdade:
[1]
[1, 2]
[3, 3]
[3, 3, 3]
[4, 5, 2]
[1, 1, 1, 1]
[15, 15, 15, 15]
[52, 114, 61, 19, 73, 54, 83, 29]
[231, 92, 39, 210, 187, 101, 78, 39]
Falsey:
[2]
[2, 2]
[4, 6, 2]
[1, 7, 1]
[15, 15, 15]
[1, 15, 3, 1]
[13, 83, 86, 29, 8, 87, 26, 21]
[154, 19, 141, 28, 27, 6, 18, 137]
Regras
As brechas padrão são proibidas. Como se trata de código-golfe , a entrada mais curta ganha!