Вызов
По заданному списку натуральных чисел найдите, если существует перестановка, в которой, взяв до одного бита от каждого из целых чисел, можно создать двоичное число, состоящее из всех 1
s.
Количество битов в полученном двоичном числе равно наибольшему значению старшего разряда в списке целых чисел.
Выход
Ваш код должен выводить или возвращать значение true / falsey, указывающее, существует ли такая перестановка.
Примеры
Truthy:
Со списком [4, 5, 2]
и его двоичным представлением [100, 101, 10]
мы можем использовать третий, первый и второй биты соответственно для создания 111
:
4 -> 100 -> 100 -> 1
5 -> 101 -> 101 -> 1
2 -> 010 -> 010 -> 1
Result 111
В этом списке [3, 3, 3]
все числа имеют как первый, так и второй биты 1
, поэтому мы можем выбрать один из оставшихся номеров:
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 ->
Result 11
Falsey:
В списке [4, 6, 2]
ни у одного из чисел не установлен первый бит 1
, поэтому двоичное число не может быть создано:
4 -> 100
6 -> 110
2 -> 010
Со списком [1, 7, 1]
только один из номеров имеет второй и третий биты 1
, и номер не может быть создан:
1 -> 001
7 -> 111
1 -> 001
Очевидно, что если максимальное количество установленных бит превышает количество целых чисел, результирующее число никогда не может быть создано.
Контрольные примеры
Truthy:
[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]
правила
Стандартные лазейки запрещены. Поскольку это код-гольф , выигрывает самый короткий вход!