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
la source
==
pour l'égalité auraient pu sauver un octet si la vérité et le falsey avaient été autorisés à être inversés.Réponses:
Gelée , 4 octets
Essayez-le en ligne!
Testez si la somme est égale au bit ou à la somme (ie
a+b+c == a|b|c
).la source
Python
32,554342 octets-12 octets de M. Xcoder
-1 octet de Rod
Essayez-le en ligne!
Explication: Vérifie si la somme des nombres est égale au bit ou des nombres.
la source
lambda l:sum(l)==eval("|".join(map(str,l)))
Python 2 , 37 octets
Essayez-le en ligne!
Un autre port de l'algorithme de pizzapants184 ...
la source
Nettoyer , 38 octets
Essayez-le en ligne!
Encore un autre port.
la source
Japt, 6 octets
Un autre port des solutions de pizzapants184 et de Leaky Nun.
Essaye-le
la source
JavaScript (ES6),
373534 octetsEnregistré 2 octets grâce à @ Mr.Xcoder
Enregistré 1 octet grâce à @ETHproductions
La comparaison de la somme avec l'OR au niveau du bit (comme l'ont fait pizzapants184 et Leaky Nun ) est
134 octets plus courte que mon approche initiale:Cas de test
Afficher l'extrait de code
Alt. version, 38 octets
Cas de test
Afficher l'extrait de code
la source
a=>(q=c=>eval(a.join(c)))`|`==q`+`;
Haskell , 38 octets
(==).sum<*>foldl1 xor
est une fonction anonyme renvoyant un fichierBool
. Utiliser comme((==).sum<*>foldl1 xor) [2,0,1]
.Essayez-le en ligne!
À peu près la même astuce de pizzapants184 et Leaky Nun que tout le monde utilise, sauf qu'avec les noms d'opérateurs Haskell, il enregistre un octet à utiliser (bit à bit)
xor
au lieu de(.|.)
(bit à bit ou).(==).sum<*>foldl1 xor
est une version sans point de\l->sum l==foldl1 xor l
.la source
Java 8, 53 octets
Port de la réponse Jelly de @LeakyNun .
Explication:
Essayez-le ici.
la source
Pyth , 6 octets
Suite de tests.
la source
Husk , 5 octets
Essayez-le en ligne!
la source
Perl 6 , 15 octets
Essaye-le
Étendu:
la source
Rouge , 78 octets
Comment ça fonctionne:
Non golfé:
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 15 octets
Essayez-le en ligne!
la source
Lot, 73 octets
Sorties
1
pour vérité, rien pour fausse. Un autre port évident de l'algorithme de pizzapants184 / Leaky Nun.la source
J , 10 octets
Encore un autre port des solutions de pizzapants184 et de Leaky Nun.
Comment ça fonctionne?
+/.&.#:
- convertir les nombres en binaire, appliquer au niveau du bit ou aux puissances de deux et reconvertir du binaire en décimal+/
- réduire l'entrée par addition=
- les éléments ci-dessus sont-ils égaux?Essayez-le en ligne!
Alternative simple
J , 12 octets
Comment ça fonctionne?
+/@#:
- convertir chaque nombre en binaire et trouver la somme de chaque puissance de 2>./
- trouver le maximum2>
- est-ce moins de 2? -> véridiqueEssayez-le en ligne!
la source
Triangularité , 31 octets
Essayez-le en ligne!
Solution alternative, 31 octets
Essayez-le en ligne!
la source