Hintergrund
Die metallischen Mittelwerte , beginnend mit dem berühmten goldenen Mittelwert , sind für jede natürliche Zahl (positive ganze Zahl) definiert und jede ist eine irrationale Konstante (sie hat eine unendliche, nicht wiederkehrende Dezimalerweiterung).
Für eine natürliche Zahl ist das metallische Mittel die Wurzel einer quadratischen Gleichung
Die Wurzeln sind immer
aber der metallische Mittelwert wird normalerweise als positive Wurzel angegeben. Für diese Frage wird also definiert durch:
Für das Ergebnis gilt der berühmte goldene Schnitt:
Herausforderung
Ihr Code sollte 2 Eingaben enthalten: n und p (die Reihenfolge ist nicht wichtig, solange sie konsistent ist)
- n ist eine natürliche Zahl, die angibt, welches metallische Mittel
- p ist eine natürliche Zahl, die angibt, wie viele Dezimalstellen genau sind
Ihr Code sollte den n-ten metallischen Mittelwert mit einer Genauigkeit von p Dezimalstellen ausgeben.
Gültigkeit
Ihr Code ist gültig, wenn er für Werte von n und p von 1 bis 65.535 funktioniert.
Sie müssen eine Dezimalstelle im Formular ausgeben
Ziffer (n). Ziffer (n) (ohne Leerzeichen)
Zum Beispiel ist der goldene Mittelwert bis 9 Dezimalstellen
1.618033988
Zeigen Sie die letzte Ziffer ohne Rundung an, da dies bei einer längeren Dezimalerweiterung der Fall wäre. Die nächste Ziffer im goldenen Mittel ist eine 7, die letzte 8 im Beispiel sollte jedoch nicht auf eine 9 aufgerundet werden.
Die Anzahl der Dezimalstellen muss p sein, was bedeutet, dass auch nachfolgende Nullen eingeschlossen werden müssen.
Antworten des Formulars
sind nicht gültig - Sie müssen eine Dezimalerweiterung verwenden.
Sie können bis zu 1 führende Zeile und bis zu 1 nachfolgende Zeile ausgeben. Sie dürfen außer den Ziffern und dem einzelnen Punkt / Punkt / Punkt keine Leerzeichen oder andere Zeichen ausgeben.
Ergebnis
Dies ist Standard Code Golf: Ihre Punktzahl ist die Anzahl der Bytes in Ihrem Code.
Bestenliste
(Mit Martins Leaderboard-Snippet )
R, 116 Bytes
Dadurch werden zwei Ganzzahlen aus STDIN gelesen und das Ergebnis an STDOUT ausgegeben. Sie können es online ausprobieren .
Ungolfed + Erklärung:
Wenn Sie die
Rmpfr
Bibliothek nicht installiert haben, können Sieinstall.packages("Rmpfr")
und alle Ihre Träume werden wahr.quelle
Mathematica, 50 Bytes
Definiert eine anonyme Funktion, die
n
undp
in der richtigen Reihenfolge verwendet. Ich benutzeFloor
, um das Runden zu verhindernSetAccuracy
, was ich brauche, um eine dezimale Ausgabe zu erhalten.quelle
p>15
.CJam, 35 Bytes
Liest zuerst p , dann n .
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
Wir berechnen einfach die Formel aus der Frage für n × 10 p , erhalten den ganzzahligen und den gebrochenen Teil des Ergebnisses geteilt durch 10 p , füllen den gebrochenen Teil mit führenden Nullen auf, um p- Ziffern zu erhalten, und drucken die durch einen Punkt getrennten Teile.
quelle
Python 2, 92 Bytes
Während ich mir jetzt die Antworten ansehe, sieht es so aus, als würde die CJam-Antwort dieselbe grundlegende Methode wie diese verwenden. Es berechnet die Antwort für
n*10**p
und fügt dann den Dezimalpunkt hinzu. Es ist unglaublich ineffizient, weil es den ganzzahligen Teil der Quadratwurzel berechnet (addiere einfach 1, bis es dort ankommt).quelle
PHP,
8578 BytesEs wird die mathematische Erweiterung BC Math verwendet , die auf einigen Systemen nicht verfügbar ist. Es muss in die Kompilierungszeit einbezogen werden, indem die
--enable-bcmath
Befehlszeilenoption angegeben wird. Es ist immer unter Windows verfügbar und scheint auch in der mit OSX gelieferten PHP-Version enthalten zu sein.Update :
Ich habe alle von @blackhole in ihren Kommentaren vorgeschlagenen Hacks angewendet (danke!), Dann habe ich die Initialisierung für
$n
die erste Verwendung zusammengedrückt (3 weitere Bytes gespeichert) und jetzt passt der Code in eine einzelne Zeile im obigen Code-Feld.quelle
echo
, lassen Sie einfach ein Leerzeichen dahinter.bcscale
Rückkehr erwartentrue
, können Sie$n=$argv[bcscale($argv[2])];
2 weitere Bytes verwenden und sparen.bcpow($n,2)
anstattbcmul($n,$n)
dir 1 Byte zu sparen.J, 27 Bytes
Erläuterung:
Nenne es so:
Eine andere, etwas kühlere Lösung:
Was berechnet die Wurzeln des Polynoms x ^ 2 - nx - 1. Leider macht die Art und Weise, wie J das Ergebnis formatiert, das Zurückziehen der gewünschten Wurzel etwas länger.
quelle