Ihre Aufgabe ist es, die Quadratwurzel von 2 mit der Newtonschen Methode zu berechnen - mit einer leichten Drehung. Ihr Programm berechnet eine Iteration nach der Newton-Methode und gibt den Quellcode für die folgende Iteration aus (die dazu in der Lage sein muss).
Newtons Methode ist auf Wikipedia ziemlich ausführlich beschrieben
So berechnen Sie die Quadratwurzel 2 mit der Newton-Methode:
- Definieren
f(x) = x^2 - 2
- Definieren
f'(x) = 2x
- Definieren
x[0]
(die anfängliche Vermutung)= 1
- Definieren
x[n+1] = x[n] - (f[n] / f'[n])
Jede Iteration rückt x [n] näher an die Quadratwurzel von zwei. So -
x[0] = 1
x[1] = x[0] - f(x[0])/f'(x[0]) = 1 - (1 ^ 2 - 2) / (2 * 1) = 1.5
x[2] = x[1] - f(x[1])/f'(x[1]) = 1.5 - (1.5 ^ 2 - 2) / (2 * 1.5) = 1.416666667
x[3] = x[2] - f(x[2])/f'(x[1]) = 1.416666667 - (1.416666667 ^ 2 - 2) / (2 * 1.416666667) = 1.414215686
- und so weiter
Ihr Programm wird:
- Berechnen Sie,
x[n]
won
ist die Höhe der Zeit , das Programm ausgeführt wurde - Den Quellcode an ein gültiges Programm in derselben Sprache
x[n+1]
ausgeben, das die gleichen Kriterien für diese Frage berechnen und erfüllen muss . - Die erste Zeile des Quellcodes muss das korrekt kommentierte Berechnungsergebnis sein. Wenn die Quelle in der ersten Zeile etwas Bestimmtes (wie einen Schebang) erfordert, kann das Ergebnis in die zweite Zeile gestellt werden.
Beachten Sie, dass
- Ihr Programm muss eine erste Schätzung von verwenden
x[0] = 1
- Es gelten die Standard-Regelungslücken
- Alle eingebauten Power-, Quadratwurzel- oder Xroot-Funktionen sind verboten
- Ihr Programm darf keinerlei Eingaben akzeptieren. Es muss völlig in sich geschlossen sein.
Ihre Punktzahl entspricht der Größe Ihres ursprünglichen Programms in UTF-8-Bytes. Die niedrigste Punktzahl gewinnt.
x = x-(x*x-2)/(2*x)
?Antworten:
Common Lisp,
223956866Nachdem ich die Problembeschreibung genauer gelesen habe (danke, primo !) , Ist mir aufgefallen, dass die erste Zeile das Ergebnis einer Berechnung sein muss und nicht das Ergebnis enthalten muss . Daher glaube ich, dass meine früheren Versuche nicht ganz den Regeln entsprachen. Dieser sollte.
Anwendungsbeispiel (SBCL 1.1.15):
quelle
Python 60 Bytes
Ich habe die Formel mit den folgenden Ersetzungen leicht vereinfacht:
Ich hoffe, das ist kein Problem.
Das Programm läuft folgendermaßen ab:
etc.
quelle
g="x=%s;o=%r;print o%%(x/2+1/x,o)";print g%(1.5,g)
@ 50 Zeichen verkürzen .CJam, 20 Bytes
Probieren Sie es online aus.
Ausgabe
Wie es funktioniert
quelle
ECMAScript 6,
3836JavaScript, 51
Dies ist dasselbe wie oben für ältere Browser.
quelle
print
,putstr
,console.log
, etc.).Lua 129
Wahrscheinlich viel zu lang, aber die Lua quine ist scheiße, weil das verschachtelte
[[ ]]
Feature veraltet ist. Aber es funktioniert trotzdem:Es ist ein bisschen schöner zu sehen, ob Sie Zeilenumbrüche anstelle von Doppelpunkten hinzufügen:
quelle
J -
10288 BytesDas ist so schrecklich, wie ich Quines mache (ich werde das wahrscheinlich korrigieren, wenn ich bessere Ideen bekomme). Die Gleitkommazahlen von J sind auf 5 Dezimalstellen begrenzt, aber durch Ersetzen der ersten Zeile
x=:1x
wäre dies ein Bruch mit unendlicher Genauigkeit.Erste Iterationen:
Erläuterung
quelle
1%x
ist das gleiche wie%x
. Stattdessen(x%2)+1%x
können Sie tun(%&2+%)x
.Rubin, 65
Wie so oft ist dies fast ein direkter Port der Python-Lösung.
quelle