quintopia ha pubblicato qui una sfida per calcolare i coefficienti multinomiali (parte del testo qui viene copiato da lì). Esiste un algoritmo divertente per calcolare i coefficienti multinomiali mod 2.
Dato un elenco di numeri, k 1 , k 2 , ..., k m , genera il residuo del coefficiente multinomiale:
ridotta mod 2. Il seguente algoritmo fa questo efficiente: per ogni k i , calcolare l'espansione binario di k i , cioè, trovare un ij tale che ciascuna un ij è 1 o 0 e
Se esiste una j tale che a rj = a sj = 1 per r ≠ s, il coefficiente multinomiale mod 2 associato è 0, altrimenti il coefficiente multinomiale mod 2 è 1.
Compito
Scrivere un programma o funzione che prende m numeri, k 1 , k 2 , ..., k m , e le uscite o ritorni corrispondente coefficiente multinomiale. Il tuo programma può facoltativamente prendere m come argomento aggiuntivo, se necessario.
Questi numeri possono essere inseriti in qualsiasi formato uno preferisca, ad esempio raggruppati in elenchi o codificati in unario, o qualsiasi altra cosa, purché il calcolo effettivo del coefficiente multinomiale sia eseguito dal codice e non dal processo di codifica.
L'output può essere qualsiasi valore di verità se il coefficiente multinomiale è dispari e qualsiasi valore di falsità se il coefficiente multinomiale è pari.
Non sono ammessi incorporati progettati per calcolare il coefficiente multinomiale.
Si applicano scappatoie standard.
punteggio
Questo è il codice golf: vince la soluzione più breve in byte.
Esempi:
Per trovare il coefficiente multinomiale di 7, 16 e 1000, espandiamo binariamente ciascuno di essi:
Poiché nessuna colonna ha più di 1, il coefficiente multinomiale è dispari e quindi dovremmo produrre qualcosa di vero.
Per trovare il coefficiente multinomiale di 7, 16 e 76, espandiamo binariamente ciascuno di essi:
Dato che sia 76 che 7 hanno un 4 nella loro espansione binaria, il coefficiente multinomiale è pari e quindi produciamo un valore di falso.
Casi 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
==
per l'uguaglianza avrebbero potuto salvare un byte se fosse possibile capovolgere la verità e la falsità.