Votre tâche consiste à calculer la racine carrée de 2 en utilisant la méthode de Newton - avec une légère torsion. Votre programme consiste à calculer une itération à l'aide de la méthode de Newton et à générer le code source de l'itération suivante (qui doit pouvoir faire de même).
La méthode de Newton est décrite de manière assez exhaustive sur Wikipedia
Pour calculer la racine carrée 2 à l'aide de la méthode Newtons, vous:
- Définir
f(x) = x^2 - 2
- Définir
f'(x) = 2x
- Définir
x[0]
(la supposition initiale)= 1
- Définir
x[n+1] = x[n] - (f[n] / f'[n])
Chaque itération rapproche x [n] de la racine carrée de deux. Alors -
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
- etc
Votre programme:
- Calculez
x[n]
où sen
trouve le nombre d'exécutions du programme - Sortie du code source dans un programme valide dans la même langue qui doit calculer
x[n+1]
et satisfaire les mêmes critères de cette question. - La première ligne du code source doit être le résultat du calcul, correctement commenté. Si la source nécessite quelque chose de particulier (comme un shebang) sur la première ligne, le résultat peut être mis sur la deuxième ligne.
Notez que
- Votre programme doit utiliser une estimation initiale de
x[0] = 1
- Les échappatoires standard s'appliquent
- Toutes les fonctions de puissance, racine carrée ou xroot intégrées sont interdites
- Votre programme ne doit accepter aucune entrée quelle qu'elle soit. Il doit être entièrement autonome.
Votre score est la taille de votre programme initial en octets UTF-8. Le score le plus bas l'emporte.
x = x-(x*x-2)/(2*x)
?Réponses:
Lisp commun,
223956866Maintenant que j'ai lu l'énoncé du problème plus attentivement (merci, primo !), J'ai remarqué que la première ligne doit être le résultat du calcul, pas qu'elle doit contenir le résultat. Ainsi, je pense que mes tentatives précédentes n'ont pas tout à fait suivi les règles. Celui-ci devrait.
Exemple d'utilisation (SBCL 1.1.15):
la source
Python 60 octets
J'ai légèrement simplifié la formule, en utilisant les substitutions suivantes:
J'espère que ce n'est pas un problème.
Le programme se déroule de la manière suivante:
etc.
la source
g="x=%s;o=%r;print o%%(x/2+1/x,o)";print g%(1.5,g)
@ 50 caractères.CJam, 20 octets
Essayez-le en ligne.
Sortie
Comment ça marche
la source
ECMAScript 6,
3836JavaScript, 51
C'est la même chose que ci-dessus, pour les navigateurs plus anciens.
la source
print
,putstr
,console.log
, etc.).Lua 129
Probablement beaucoup trop longtemps, mais le quine Lua est nul parce que l'imbriqué
[[ ]]
est une fonctionnalité obsolète. Mais cela fonctionne malgré tout:C'est un peu plus agréable de voir si vous ajoutez des sauts de ligne au lieu des deux points:
la source
J -
10288 octetsC'est aussi horrible que de faire des quines (je réviserai probablement cela quand j'aurai de meilleures idées). Les flottants de J sont limités à 5 décimales, mais en remplaçant la première ligne par
x=:1x
ce serait une fraction avec une précision infinie.Premières itérations:
Explication
la source
1%x
est le même que%x
. Au lieu de cela(x%2)+1%x
, vous pouvez le faire(%&2+%)x
.Ruby, 65 ans
Comme cela arrive trop souvent, il s'agit presque d'un port direct de la solution Python.
la source