Inspiriert von http://xkcd.com/1331/
In diesem xkcd-Comic gibt es mehrere Gifs, die alle mit unterschiedlicher Häufigkeit blinken. Ich möchte wissen, wie der Zeitraum aussehen würde, wenn alles ein einziges GIF wäre. Geben Sie anhand einer Liste von Zahlen, die die einzelnen Frequenzen darstellen, die Periode des gesamten GIF aus.
Formale Definition
Eingang:
N
f1
f2
.
.
.
fN
Ausgabe:
P
Wobei N die Anzahl der Frequenzen ist, fi die i-te Frequenz ist und P die resultierende Periode des gesamten GIF ist.
Sie können ein beliebiges Begrenzungszeichen verwenden (anstelle von \ n) und das N ausschließen, wenn Sie dies wünschen. Dies wird durch die Anzahl der Begrenzer abgeleitet.
Einige Besonderheiten
Frequenzen sind die nächstgelegene Gleitkommadarstellung mit doppelter Genauigkeit der als Eingabe bereitgestellten Zahlen.
Die ausgegebene Periode ist eine 64-Bit-Ganzzahl ohne Vorzeichen, auf das nächste Ganze aufgerundet (auf 0,5 aufgerundet). Jede Eingabe, die einen Zeitraum größer als 2 ^ 64-1 erzeugen würde, wird als undefiniertes Verhalten betrachtet.
Ebenso wird jede Eingabe <= 0 als undefiniertes Verhalten betrachtet.
Gewinnbedingung
Code Golf so kürzester Code gewinnt!
Antworten:
APL, 4
∧
ist sowohl logisches UND als auch numerisches LCM (mit Domäne über Ganzzahlen, Gleitkommazahlen, Komplexen, Rationalen, unabhängig davon, welcher Zahlenstapel von der APL-Implementierung unterstützt wird), ebenso∧/
wie das Reduzieren durch LCM oder das Berechnen des LCM eines Arrays.Monadisch
÷
ist numerisch invers. Die Zusammensetzung∧/∘÷
ist also die LCM der Umkehrungen der angegebenen Zahlen.Die andere Formel, umgekehrt zur GCD, wäre
÷∘(∨/)
, wo die Klammern benötigt werden, um die Priorität zwischen∘
und festzulegen/
.Sie können es online unter http://tryapl.com/ versuchen.
Beispiele
quelle
Holy bananas!
Mathematica
4328Zweiter Versuch
Mein erster Versuch war nicht korrekt, obwohl er einige der notwendigen Zutaten enthielt (LCM, Rationalize). Die vollständige Lösung erfordert die Berücksichtigung sowohl des Zählers als auch des Nenners jeder Frequenz (ausgedrückt als gemeinsamer Bruch).
l
ist die Liste der Frequenzen.Durch Rationalisierung von 2.35 wird es in den gemeinsamen Bruch 235/100 konvertiert.
Angenommen, alle GIFs werden bei t = 0 ausgelöst.
Der folgende Ansatz erfordert nicht, dass die Frequenzen als "reelle Zahlen" ausgedrückt werden, d. H. als Dezimalbrüche. Sie können andere Arten von Brüchen sein. Das folgende Beispiel ist ein Fall, in dem die Brüche in Fünfteln, Dritteln, Hundertsteln und Siebteln angegeben sind.
Wenn zwei oder mehr Frequenzen nicht angemessen sind (in diesem Fall muss mindestens eine eine irrationale Zahl sein), gibt es keine Lösung. Mit anderen Worten, es gibt keinen Zeitpunkt t> 0, zu dem alle Komponenten gleichzeitig ausgelöst werden.
Beispiel 1
Beispiel 2
Wenn wir die kleinste Gesamtperiode mit jeder der Frequenzen multiplizieren, finden wir jeweils eine ganze Anzahl von Zyklen:
(1344 Hopfen von 16/5 Einheiten) landet bei 420. (280 Hopfen von 2/3 Einheiten) landet bei 420. (987 Hopfen von 2,35 Einheiten) landet bei 420. (60 Hopfen von 7 Einheiten) landet bei 420.
quelle
Javascript: 191 Zeichen
Das von mir gewählte Eingabeformat (innerhalb der Regeln) sind die durch Kommas getrennten Frequenznummern. Keine Leerzeichen erlaubt und keine Zeilenumbrüche. Das anfängliche N darf nicht angegeben werden. Jede Zahl muss nur eine Serie von mindestens einer [0-9] Stelle mit einem optionalen Punkt irgendwo darin sein. Wenn die Eingabe fehlerhaft ist, ist das Verhalten undefiniert.
Wie es funktioniert:
Der Code:
Testen:
quelle
(⊃x÷z)×∨/z←{⍵×10}⍣{⍵≡⌈⍵}x←⎕
g/d
zud/g
. Ich werde einige Testfälle hinzufügen.