quintopia hat hier eine Herausforderung zur Berechnung multinomialer Koeffizienten veröffentlicht (ein Teil des Textes hier wird von dort kopiert). Es gibt einen unterhaltsamen Algorithmus zur Berechnung von Multinomialkoeffizienten mod 2.
Ausgehend von einer Liste von Zahlen, k 1 , k 2 , ..., k m , wird der Rest des Multinomialkoeffizienten ausgegeben:
Der folgende Algorithmus führt dies effizient aus: Berechne für jedes k i die binäre Expansion von k i , dh finde ein ij, so dass jedes a ij entweder 1 oder 0 ist und
Wenn es irgendein j gibt, so dass ein rj = ein sj = 1 für r ≠ s ist, dann ist der zugehörige multinomiale Koeffizient von mod 2 0, andernfalls ist der multinomiale Koeffizient von mod 2 1.
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die m Zahlen, k 1 , k 2 , ..., k m , annimmt und den entsprechenden Multinomialkoeffizienten ausgibt oder zurückgibt. Ihr Programm kann gegebenenfalls m als zusätzliches Argument verwenden.
Diese Zahlen können in einem beliebigen Format eingegeben werden, zum Beispiel in Listen gruppiert oder in Unary oder irgendetwas anderem codiert, solange die eigentliche Berechnung des Multinomialkoeffizienten von Ihrem Code durchgeführt wird und nicht der Codierungsprozess.
Die Ausgabe kann ein beliebiger Wahrheitswert sein, wenn der Multinomialkoeffizient ungerade ist, und ein beliebiger Falschwert, wenn der Multinomialkoeffizient gerade ist.
Integrierte Funktionen zur Berechnung des Multinomialkoeffizienten sind nicht zulässig.
Es gelten Standardlücken.
Wertung
Das ist Codegolf: Kürzeste Lösung in Bytes gewinnt.
Beispiele:
Um den Multinomialkoeffizienten von 7, 16 und 1000 zu ermitteln, erweitern wir jeden von ihnen binär:
Da keine Spalte mehr als eine 1 hat, ist der Multinomialkoeffizient ungerade, und daher sollten wir etwas Wahres ausgeben.
Um den Multinomialkoeffizienten von 7, 16 und 76 zu ermitteln, erweitern wir jeden von ihnen binär:
Da sowohl 76 als auch 7 eine 4 in ihrer binären Expansion haben, ist der Multinomialkoeffizient gerade und wir geben einen Falsey-Wert aus.
Testfälle:
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
==
gleichberechtigte Sprachen hätten ein Byte sparen können, wenn Wahrheit und Falschheit umgedreht worden wären.