Вызов
По заданному списку натуральных чисел найдите, если существует перестановка, в которой, взяв до одного бита от каждого из целых чисел, можно создать двоичное число, состоящее из всех 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]
правила
Стандартные лазейки запрещены. Поскольку это код-гольф , выигрывает самый короткий вход!
Ответы:
Желе , 11 байт
Попробуйте онлайн!
Как это работает
источник
J , 30 байт
Вся заслуга моему коллеге Маршаллу .
Безымянная функция молчаливого префикса.
Попробуйте онлайн!
(
@
это функциональная композиция)#:
antibase-2|:
транспонирования(
…)^:2
Примените следующую функцию дважды:1-
Булево отрицание>./
максимум@
из$
длина оси{.
взять (заполнение нулями) от|:
транспонированный аргумент+./ .*
"сумасшедший детерминант магии" *[:
не подключаться (no-op - служит для создания предыдущей части с остальными)* По словам Маршалла.
источник
JavaScript (ES6),
104...9383 байтаВозвращает
0
или1
.Контрольные примеры
Показать фрагмент кода
метод
Учитывая входной массив A = [a 0 , a 1 , ..., a N-1 ] , мы ищем перестановку [a p [0] , a p [1] , ..., a p [N- 1] ] из A и целого числа x ≤ N, такого что:
Отформатировано и прокомментировано
источник
Шелуха , 14 байт
Попробуйте онлайн!
объяснение
источник
05AB1E ,
232220 байт-1 байт благодаря Mr.Xcoder
True: 1, False: 0
Попробуйте онлайн!
Пояснения:
источник
Wolfram Language (Mathematica) , 65 байт
Попробуйте онлайн!
объяснение
Мы начнем с преобразования всех входных данных в двоичные списки.
Затем мы дополняем все эти списки нулями слева, чтобы сделать массив прямоугольным. Результат сохраняется
n
на потом.Да, грубая сила, давайте получим все возможные перестановки ввода.
Это получает след для каждой перестановки, то есть сумму диагональных элементов в перестановке. Другими словами, мы складываем MSB из первого числа, следующий за MSB из второго числа и так далее. Если перестановка действительно, все это будет 1 и будет как много 1 с , как наибольшее число входного широко.
Мы получаем максимальный след, потому что след никогда не может быть больше, чем у действительной перестановки.
Правая часть - просто версия для игры в гольф
Length @ First @ n
, то есть она получает ширину прямоугольного массива и, следовательно, ширину наибольшего входного числа. Мы хотим убедиться, что след некоторой перестановки равен этому.источник
PHP,
255243160 байт-12 байт,
убрал сортировку -83 байта (!) Благодаря Титу
Попробуйте онлайн!
Отпечатки 1 для правды, ничего для фальси.
Оригинальная версия ungolfed:
источник
function f($a,$v=NULL,$b=[]){($v=$v??(1<<log(max($a),2)+1)-1)||die("1");if($p=array_pop($a))while($p-=$i)($b[$i=1<<log($p,2)]|$v<$i)||f($a,$v-$i,[$i=>1]+$b);}
true
:die("1")
→die(!0)
.Lua 5.2, 85 байт
Это устанавливает x как функцию, которая принимает переменное число входных данных (ожидается, что это 32-разрядные целые числа) и печатает в стандартный вывод "true" или "false".
Использование:
источник
[1,15,3,1]
кажется, чтобы вернутьсяtrue
вместо,false
например. Вот ваш код онлайн компилятора TIO. Два других тестовых случая, которые терпят неудачу,[1,7,1]
и[15,15,15]
. Все остальные тесты показывают правильные результаты.PHP, 121 байт
Попробуйте онлайн .
сломать
источник
J , 49 байт
Нужно ли считать также «g =.»? Я готов добавить это.
Длинный явный глагол на этот раз. Я попробовал молчаливый для того же алгоритма, но он оказался еще длиннее и страшнее, чем этот. Вдали от решения Адама.
Пояснение: (у - правильный аргумент функции)
Попробуйте онлайн!
источник
Python 3 ,
126120 байтСохранено 6 байтов благодаря мистеру Xcoder
Попробуйте онлайн!
источник
[0]+[...]
Это бессмысленно, не так ли?any(g(x[:i]+x[i+1:],n-1)for i in range(len(x))if x[i]&2**n)
должно хватить.Желе , 17 байт
Монадическая ссылка, берущая список чисел и возвращающая
1
(истинно) или0
(фальси).Попробуйте онлайн!
Это будет время ожидания для TIO для самого длинного из каждого тестового случая.
Как?
источник
R ,
247 байт221 байтПопробуйте онлайн!
Неуправляемая версия
Я понял, что проверка
drop=F
аргументов без необходимости в строке не нужна . Также удалены некоторые неприятные пробелы.источник
PHP, 152 байта
Ничего не печатает за ложь, 1 за правду.
Ungolfed:
источник
Желе , 17 байт
Тестирование.
источник
C, 79 байтов
источник
try it online
ссылка будет полезной.[1, 7, 1]
должен возвращать false и[52, 114, 61, 19, 73, 54, 83, 29]
возвращать true