quintopia ha publicado aquí un desafío para calcular coeficientes multinomiales (parte del texto aquí se copia desde allí). Hay un algoritmo divertido para calcular coeficientes multinomiales mod 2.
Dada una lista de números, k 1 , k 2 , ..., k m , genera el residuo del coeficiente multinomial:
mod 2. reducido El siguiente algoritmo hace esto de manera eficiente: para cada k i , calcule la expansión binaria de k i , es decir, encuentre un ij tal que cada a ij sea 1 o 0 y
Si hay alguna j tal que a rj = a sj = 1 para r ≠ s, entonces el coeficiente multinomial mod 2 asociado es 0, de lo contrario el coeficiente multinomial mod 2 es 1.
Tarea
Escriba un programa o función que tome m números, k 1 , k 2 , ..., k m , y genere o devuelva el coeficiente multinomial correspondiente. Opcionalmente, su programa puede tomar m como argumento adicional si es necesario.
Estos números pueden ingresarse en cualquier formato que le guste, por ejemplo, agrupados en listas o codificados en unario, o cualquier otra cosa, siempre que su código realice el cálculo real del coeficiente multinomial, y no el proceso de codificación.
La salida puede ser cualquier valor verdadero si el coeficiente multinomial es impar y cualquier valor falsey si el coeficiente multinomial es par.
No están permitidos los elementos integrados diseñados para calcular el coeficiente multinomial.
Se aplican lagunas estándar.
Puntuación
Este es el código de golf: la solución más corta en bytes gana.
Ejemplos:
Para encontrar el coeficiente multinomial de 7, 16 y 1000, expandimos binariamente cada uno de ellos:
Como ninguna columna tiene más de un 1, el coeficiente multinomial es impar y, por lo tanto, deberíamos generar algo verdadero.
Para encontrar el coeficiente multinomial de 7, 16 y 76, expandimos binariamente cada uno de ellos:
Dado que 76 y 7 tienen un 4 en su expansión binaria, el coeficiente multinomial es par y, por lo tanto, arrojamos un valor de falsey.
Casos de prueba:
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
==
para la igualdad podrían haber salvado un byte si se permitiera cambiar la verdad y la falsey.