Pythagoras diledakkan kakinya dalam perang. Itu harus diamputasi, dan meskipun dia hampir mati, dia berhasil melewati dan membuat pemulihan penuh. Sekarang, setelah setahun berjalan dengan kruk, ia mendapat hak istimewa mendapatkan kaki palsu! Namun, ada beberapa yang cocok, tetapi yang mana?
Tugas
Diberikan bilangan bulat positif sebagai input yang merupakan panjang dari satu kaki triple Pythagoras, menampilkan semua kemungkinan untuk kaki lainnya. Sebagai contoh, triple Pythagoras terkecil adalah (3,4,5), yang membentuk segitiga dengan dua kaki panjang 3 dan 4, dan sisi miring panjang 5.
Contohnya
Leg:5
12
Leg:28
21
45
96
195
Leg:101
5100
Leg:1001
168
468
660
2880
3432
4080
5460
6468
10200
38532
45540
71568
501000
Aturan
- Input akan menjadi bilangan bulat positif tunggal
n
. - Output dapat dalam urutan apa pun, dengan pembatas apa pun, di pangkalan apa pun (meskipun pangkalan ini harus konsisten), dan dengan kawat pembuka dan penutup opsional, dan spasi spasi tambahan opsional. Artinya,
1 2 3
,[1,2,3]
, dan1,11,111
semua cocok spesifikasi output ini. - Anda mungkin berasumsi bahwa
n
tidak akan pernah lebih besar dari seperempat dari akar keempat batas bahasa Anda (tanpa menggunakan perpustakaan). Dalam praktiknya, Anda dapat berasumsi bahwa inputnya akan kurang dari ini atau 10.000, mana yang kurang.
Pythagoras sedang menunggu Anda, jadi lebih baik menulis kode Anda dengan cepat dan singkat!
Jawaban:
Pyth - 13 byte
Brute memaksa semua kemungkinan sampai saat ini
n^2+1
.Test Suite .
sumber
Jelly , 8 byte
Jawaban ini tidak bersaing, karena menggunakan fitur yang telah diterapkan setelah tantangan diposting. Cobalah online!
Pendekatan ini tidak menggunakan matematika floating point, sehingga akan memberikan jawaban yang benar selama daftar intervensi dapat masuk ke dalam memori.
Ide
Jika (a, b, c) adalah tripel Pythagoras, ada bilangan bulat positif k, m, n sehingga kesetaraan himpunan {a, b} = {km 2 - kn 2 , 2kmn} berlaku.
Secara khusus, ini berarti bahwa a <b 2 dan b <a 2 , jadi untuk input a kita cukup memeriksa apakah a 2 + b 2 adalah kuadrat sempurna untuk setiap b dalam {1, ... a 2 } .
Kode
sumber
Julia, 35 byte
Ini adalah fungsi anonim yang menerima integer dan mengembalikan array.
Untuk masing-masing
i
dari 1 hingga input kuadrat, kami menghitung sisi miring menggunakan fungsi bawaan Juliahypot
, dan menentukan apakah bagian pecahan adalah 0. Jika demikian, kami menyimpannya, jika tidak maka dikecualikan.sumber
CJam, 17 byte
Ini adalah fungsi anonim yang mengeluarkan integer dari stack dan mengembalikan array sebagai balasannya.
Cobalah online!
Ide
Jika (a, b, c) adalah tripel Pythagoras, ada bilangan bulat positif k, m, n sehingga kesetaraan himpunan {a, b} = {km 2 - kn 2 , 2kmn} berlaku.
Secara khusus, ini berarti bahwa a <b 2 dan b <a 2 , jadi untuk input a kita cukup memeriksa apakah a 2 + b 2 adalah kuadrat sempurna untuk setiap b dalam {1, ... a 2 } .
Kode
sumber
JavaScript ES6, 60
62Sama seperti jawaban lainnya, memeriksa dari 1 ke a * a-1
Thx to @ Mwr247 cara terpendek untuk membangun rentang di ES6
2 byte disimpan thx @ETHproduksi
sumber
a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))
C, 96 byte
Peningkatan bergantian
y
(kaki lainnya) danz
(sisi miring) sampai perbedaannya turun menjadi 1. Keluarkan setiap kecocokan tepat (c==0
) yang Anda temui di jalan.Panggil program yang dikompilasi dengan n sebagai parameter; itu akan menampilkan daftar angka desimal yang dipisahkan ruang.
Jelas bukan yang terpendek; Saya mungkin menemukan kenyamanan dalam memiliki yang tercepat.
sumber
Bahasa Wolfram (Mathematica) , 40 byte
Saya menggunakan bentuk tidak berdokumen
Solve
: ketika daftar variabel dihilangkan, makaSolve
default untuk menyelesaikan semua simbol dalam ekspresi. Kami dengan demikian menghemat 6 byte lebih seringSolve[#^2+b^2==c^2,{b,c},PositiveIntegers]
.PositiveIntegers
baru dalam versi 12 dari Mathematica dan karenanya tidak tersedia di TIO . Di desktop Mathematica, kita dapatkansumber
Python 2, 53 byte
Solusi mudah menggunakan kompleks
abs
untuk menghitung panjang sisi miring. Aman untuk digunakann*n
sebagai batas atas untuk kaki lainnya karena(n*n)^2 + n^2 < (n*n+1)^2
. Saya mencoba menggunakan rekursi tetapi tidak mendapatkan yang lebih pendek.sumber
Serius, 20 byte
Strategi yang sama dengan jawaban Python xnor: periksa
i in range(1,n*n)
nilai di manaabs(i+nj) % 1 == 0
, dan output daftar. Cobalah onlinePenjelasan:
sumber
PARI / GP, 36 byte
sumber
APL (NARS), 373 karakter, 746 byte
komentar:
Idenya akan menjadi faktor input untuk mengetahui kemungkinan m, n yang menghasilkan menggunakan t semua triple Pythagorian yang memiliki input sebagai leg. Uji:
sumber
APL (Dyalog Extended) ,
1514 byte SBCSFungsi awalan diam-diam anonim.
Cobalah online!
×⍨
kuadrat (lit. selfie multiplikasi) argumen(
...)
terapkan fungsi diam-diam anonim berikut:⍳
eg masukkan 1 melalui argumen⍳
kalikan dengan ɩ ntegers 1 melalui argumen (yaitu kuadrat)⊢(
...)
terapkan fungsi diam-diam anonim berikut dengan argumen sebagai argumen kiri:+
adalah jumlahnya∊
anggota dari⊢
saya t?⍸
Temukan kebenaransumber
Perl 5, 43 byte
Jika Anda ingin skrip dihentikan, kami dapat memeriksa kaki lainnya hingga n² saja, seperti yang dijelaskan oleh xnor , jadi kami memiliki 48 byte:
sumber
Japt , 16 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Stax , 8 byte
Jalankan dan debug itu
Dalam pseudo-code:
sumber
05AB1E , 10 byte
Cobalah secara online atau verifikasi semua kasus uji .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
MathGolf , 9 byte
Cobalah online!
Tidak dapat menemukan cara yang bagus untuk menghapus
²
s, yang membutuhkan 3/9 byte. Kalau tidak, itu cukup lurus ke depanPenjelasan
sumber
Java 8, 72 byte
Cobalah online.
Penjelasan:
sumber