Definisi
"Segitiga integer" adalah yang memiliki koordinat integer. Misalnya segitiga berikut adalah segitiga integer:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.
Tugas
Tujuan dari tantangan ini adalah untuk menghitung semua segitiga integer (hingga kongruensi) dengan perimeter kurang dari n.
Masukan dan keluaran
Argumen akan diberikan sebagai bilangan bulat, dan output harus berupa jumlah segitiga dengan perimeter yang benar-benar kurang dari argumen.
Contohnya
Segitiga integer terkecil dengan perimeter sebangun dengan
(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414
Yang terkecil berikutnya adalah:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650,
(0, 0), (0, 2), (1, 1) with perimeter 2 + 2sqrt(2) ≈ 4.828,
(0, 0), (0, 2), (1, 0) with perimeter 3 + sqrt(5) ≈ 5.236, and
(0, 0), (1, 2), (2, 1) with perimeter sqrt(2) + 2sqrt(5) ≈ 5.886
Kasus uji:
a(1) = 0
a(2) = 0
a(3) = 0
a(4) = 1
a(5) = 3
a(6) = 5
a(7) = 11
a(8) = 18
a(9) = 29
a(10) = 44
a(12) = 94
a(20) = 738
a(30) = 3756
a(40) = 11875
Saya memiliki koordinat untuk masing-masing segitiga di Intisari ini .
Peringatan
Perhatikan bahwa dua segitiga yang tidak kongruen dapat memiliki perimeter yang sama:
(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).
Juga perlu diingat bahwa ketimpangan itu ketat ; segitiga 3-4th pythagoras harus dihitung dengan (13), bukan (12).
Mencetak gol
Ini adalah kode-golf — kode terpendek menang!
sumber
Jawaban:
Jelly ,
28272523 byteCobalah online!
Bagaimana itu bekerja
sumber
Jelly ,
3833 byte-1 terima kasih kepada Erik the Outgolfer (membalikkan
SP¬+÷/E$
dengan menggunakanSẠ>÷/E$
dan menggunakanÇÐf
alih-alihÇÐḟ
) -1 terima kasih kepada Bpk. Xcoder (tidak perlu meratakan sebelum penyortiran)-2 terima kasih kepada Bpk. Xcoder (
S<¥Ðf³L
->S€<³S
)-1 mencuri trik dari sebuah revisi sebelumnya atas jawaban Dennis (
ṗ2’Œc
->p`⁺’
- lebih banyak kasus yang berlebihan tetapi golfier!)Program lengkap mengambil bilangan bulat dan mencetak hasilnya.
Cobalah online! (terlalu lambat untuk menyelesaikan kasus uji 20+ di bawah 60an)
Bagaimana?
sumber
[(a+c)×(b+d)]
->(a+c)×(b+d)
,[c÷a,d÷b]
->[a÷c,b÷d]
,c÷a==d÷b
->a÷c==b÷d
," c÷a==d÷b
->" a÷c==b÷d
. Fungsi .nan
.SP¬
dan tidak benar-benar menyalahgunakan pembagian dengan hasil nol (saya kira itu bisa eksplisit dengan aktual atau)¬+
dengan<
. (EDIT: Anda tidak perlu menggantiP
denganẠ
, karena Anda hanya menggunakan koordinat non-negatif.)7
kembali21
)JavaScript (ES7), 157 byte
Uji kasus
Hanya nilai kecil yang dapat dihitung dengan ukuran tumpukan default sebagian besar mesin JS.
Tampilkan cuplikan kode
Versi non-rekursif, 165 byte
Uji kasus
Versi ini juga berfungsi untuk (30) dan (40) , tetapi itu akan memakan terlalu banyak waktu untuk cuplikan.
Tampilkan cuplikan kode
sumber
Julia 0,6 , 135 byte
Ulangi kemungkinan titik-titik non-asal untuk membentuk segitiga, mewakili mereka sebagai bilangan kompleks, mengurutkan panjang persegi dan menyimpannya dalam satu set untuk memeriksa kesesuaian. Menghindari titik kolinear dengan memeriksa bahwa sudut antara bilangan kompleksnya adalah nol. Kemudian mengembalikan panjang set. Lebih pendek untuk menggunakan panjang secara langsung, tetapi Anda mendapatkan jawaban yang salah
a(40)
. Solusinya terlalu lambat untuk mencapai runa(40)
karena peringatan penghentian, jadi saya memiliki tautan ke versi yang lebih cepat juga.Cobalah online!
Lebih cepat, versi lebih lama dengan penghinaan dihindari. Cobalah online! Penggunaan
sqrt.(g)
di tempat usang√g
untuk akar kuadrat elementwise.sumber
Bersih ,
227... 143 byteCobalah online!
Mendeteksi segitiga kongruen melalui membandingkan tiga nilai yang dijumlahkan untuk membuat garis keliling, dan titik-titik kolinear dengan memverifikasi bahwa dua nilai terkecil tersebut tidak sama dengan yang ketiga.
Berikut adalah versi yang menggunakan pendekatan yang lebih cepat, lebih banyak memori,: Cobalah secara online!
sumber
Start = @ 12.0
saya tidak mendapatkan output, apakah saya melakukan sesuatu yang salah?