quintopia a publié ici un défi pour calculer les coefficients multinomiaux (une partie du texte ici est copiée à partir de là). Il existe un algorithme amusant pour calculer les coefficients multinomiaux mod 2.
Étant donné une liste de nombres, k 1 , k 2 , ..., k m , sortent le résidu du coefficient multinomial:
mod réduit 2. L'algorithme suivant le fait efficacement: pour chaque k i , calculer l'expansion binaire de k i , c'est-à-dire trouver un ij tel que chaque a ij soit 1 ou 0 et
S'il existe un j tel que a rj = a sj = 1 pour r ≠ s, alors le coefficient multinomial mod 2 associé est 0, sinon le coefficient multinomial mod 2 est 1.
Tâche
Écrivez un programme ou une fonction qui prend m nombres, k 1 , k 2 , ..., k m , et génère ou renvoie le coefficient multinomial correspondant. Votre programme peut éventuellement prendre m comme argument supplémentaire si nécessaire.
Ces nombres peuvent être entrés dans n'importe quel format souhaité, par exemple regroupés dans des listes ou codés en unaire, ou toute autre chose, tant que le calcul réel du coefficient multinomial est effectué par votre code, et non le processus de codage.
La sortie peut être toute valeur vraie si le coefficient multinomial est impair et toute valeur de falsey si le coefficient multinomial est pair.
Les éléments intégrés conçus pour calculer le coefficient multinomial ne sont pas autorisés.
Des échappatoires standard s'appliquent.
Notation
Voici le code golf: la solution la plus courte en octets gagne.
Exemples:
Pour trouver le coefficient multinomial de 7, 16 et 1000, nous développons binaire chacun d'eux:
Puisqu'aucune colonne n'a plus d'un 1, le coefficient multinomial est impair, et donc nous devrions produire quelque chose de vrai.
Pour trouver le coefficient multinomial de 7, 16 et 76, nous développons binaire chacun d'eux:
Puisque 76 et 7 ont un 4 dans leur expansion binaire, le coefficient multinomial est pair et nous produisons donc une valeur de falsey.
Cas de test:
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
==
pour l'égalité auraient pu sauver un octet si la vérité et le falsey avaient été autorisés à être inversés.