Tugas Anda adalah menghitung akar kuadrat dari 2 menggunakan Metode Newton - dengan sedikit twist. Program Anda adalah menghitung iterasi menggunakan Metode Newton, dan mengeluarkan kode sumber untuk iterasi berikut (yang harus dapat melakukan hal yang sama).
Metode Newton dijelaskan secara mendalam di Wikipedia
Untuk menghitung akar 2 menggunakan metode Newtons, Anda:
- Menetapkan
f(x) = x^2 - 2
- Menetapkan
f'(x) = 2x
- Tentukan
x[0]
(tebakan awal)= 1
- Menetapkan
x[n+1] = x[n] - (f[n] / f'[n])
Setiap iterasi akan bergerak x [n] lebih dekat ke akar kuadrat dari dua. Jadi -
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
- dan seterusnya
Program Anda akan:
- Hitung di
x[n]
manan
adalah berapa kali program telah dijalankan - Keluarkan kode sumber ke program yang valid dalam bahasa yang sama yang harus menghitung
x[n+1]
dan memenuhi kriteria yang sama dari pertanyaan ini. - Baris pertama dari kode sumber harus hasil perhitungan, dikomentari dengan benar. Jika sumber membutuhkan sesuatu yang khusus (seperti shebang) pada baris pertama, hasilnya dapat diletakkan pada baris kedua.
Catat itu
- Program Anda harus menggunakan tebakan awal
x[0] = 1
- The Standard Celah berlaku
- Setiap fungsi built-in, root kuadrat atau xroot dilarang
- Program Anda tidak boleh menerima input apa pun. Itu harus sepenuhnya mandiri.
Skor Anda adalah ukuran program awal Anda dalam UTF-8 byte. Skor terendah menang.
x = x-(x*x-2)/(2*x)
?Jawaban:
Common Lisp,
223956866Sekarang saya membaca pernyataan masalah lebih hati-hati (terima kasih, primo !) Saya perhatikan bahwa baris pertama harus merupakan hasil perhitungan, bukan karena itu perlu mengandung hasilnya. Jadi, saya pikir upaya saya sebelumnya tidak cukup mengikuti aturan. Yang ini seharusnya.
Contoh penggunaan (SBCL 1.1.15):
sumber
Python 60 byte
Saya sedikit menyederhanakan formula, menggunakan penggantian berikut:
Saya harap itu bukan masalah.
Program berlanjut dengan cara berikut:
dll.
sumber
g="x=%s;o=%r;print o%%(x/2+1/x,o)";print g%(1.5,g)
@ 50 karakter.CJam, 20 byte
Cobalah online.
Keluaran
Bagaimana itu bekerja
sumber
ECMASkrip 6,
3836JavaScript, 51
Ini sama dengan di atas, untuk browser lama.
sumber
print
,putstr
,console.log
, dll).Lua 129
Mungkin terlalu lama, tetapi Lua quine menyebalkan karena bersarang
[[ ]]
adalah fitur yang sudah ketinggalan zaman . Tapi itu berhasil terlepas dari:Agak lebih baik untuk melihat apakah Anda menambahkan baris baru daripada titik dua:
sumber
J -
10288 byteIni sama mengerikannya dengan saya membuat quines (saya mungkin akan merevisi ini ketika saya mendapatkan ide yang lebih baik). Mengapung J terbatas pada 5 tempat desimal, tetapi dengan mengganti baris pertama dengan
x=:1x
itu akan menjadi sebagian kecil dengan presisi tak terbatas.Beberapa iterasi pertama:
Penjelasan
sumber
1%x
sama dengan%x
. Alih-alih(x%2)+1%x
, Anda bisa melakukannya(%&2+%)x
.Ruby, 65
Seperti yang sering terjadi, ini hampir merupakan port langsung dari solusi Python.
sumber