Quintopia опубликовала здесь задачу по вычислению многочленных коэффициентов (часть текста здесь скопирована оттуда). Есть забавный алгоритм для вычисления коэффициентов многочлена mod 2.
Учитывая список чисел, k 1 , k 2 , ..., k m , выведите остаток множителя:
приведенного по модулю 2. Следующий алгоритм делает это эффективно: для каждого к я , вычислить двоичное разложение к я , то есть, найти в Ij таким образом, что каждая IJ либо 1 , либо 0 и
Если существует такое j, что a rj = a sj = 1 для r ≠ s, то ассоциированный полиномиальный коэффициент mod 2 равен 0, в противном случае полиномиальный коэффициент mod 2 равен 1.
задача
Напишите программу или функцию, которая принимает m чисел, k 1 , k 2 , ..., k m , и выводит или возвращает соответствующий коэффициент многочлена. Ваша программа может дополнительно принять m в качестве дополнительного аргумента, если это необходимо.
Эти числа могут быть введены в любом понравившемся формате, например, сгруппированы в списки или закодированы в унарном виде, или что-либо еще, при условии, что фактическое вычисление коэффициента многочлена выполняется вашим кодом, а не процессом кодирования.
Вывод может быть любым истинным значением, если коэффициент многочлена нечетен, и любым значением Ложь, если коэффициент многочлена четен.
Встроенные модули, предназначенные для вычисления коэффициента многочлена, не допускаются.
Применяются стандартные лазейки.
счет
Это код гольф: выигрывает самое короткое решение в байтах.
Примеры:
Чтобы найти мультиномиальный коэффициент 7, 16 и 1000, мы двоично расширяем каждый из них:
Поскольку ни один столбец не имеет более одного 1, коэффициент многочлена нечетен, и поэтому мы должны вывести что-то правдивое.
Чтобы найти коэффициент многочлена 7, 16 и 76, мы двоично разлагаем каждый из них:
Так как 76 и 7 имеют 4 в двоичном разложении, коэффициент многочлена является четным, и поэтому мы выводим значение Фолси.
Тестовые случаи:
Input: [2, 0, 1]
Output: Truthy
Input: [5,4,3,2,1]
Output: Falsey
Input: [1,2,4,8,16]
Output: Truthy
Input: [7,16,76]
Output: Falsey
Input: [7,16,1000]
Output: Truthy
Input: [545, 1044, 266, 2240]
Output: Truthy
Input: [1282, 2068, 137, 584]
Output: Falsey
Input: [274728976, 546308480, 67272744, 135004166, 16790592, 33636865]
Output: Truthy
Input: [134285315, 33849872, 553780288, 544928, 4202764, 345243648]
Output: Falsey
==
равенством могли бы спасти байт, если бы истину и фальшивость можно было перевернуть.