Diberikan tiga garis samping segitiga, evaluasi rasio aspeknya AR dengan rumus berikut:
dimana
Semakin dekat ke keseimbangan suatu segitiga, semakin dekat 1
dengan rasio aspeknya. Rasio aspek lebih besar atau sama dengan 1
untuk untuk segitiga yang valid.
Input
Inputnya adalah tiga angka positif nyata yang dapat diringkas dalam daftar atau yang serupa jika perlu.
Program Anda harus menampilkan nilai yang sama, apa pun urutan di mana tiga garis samping dimasukkan.
Ketiga angka tersebut akan selalu menjadi garis miring yang valid dari sebuah segitiga (segitiga yang merosot seperti segitiga dengan garis miring 1
, 1
dan 2
tidak akan diberikan sebagai input). Anda tidak perlu khawatir tentang ketidakakuratan floating point ketika nilai menjadi sangat dekat dengan segitiga yang merosot (misalnya, dapat diterima bahwa program Anda akan melakukan kesalahan division by 0
untuk input [1, 1, 1.9999999999999999]
).
Input dapat diberikan melalui STDIN
, sebagai argumen fungsi, atau yang serupa.
Keluaran
Outputnya adalah bilangan real yang lebih besar atau sama dengan 1
dengan akurasi standar yang dapat diterima dalam bahasa Anda.
Output dapat dicetak ke STDOUT
, dikembalikan dari fungsi, atau yang serupa.
Uji kasus
Inputs Output
1 1 1 1
3 4 5 1.25
42 42 3.14 ≈ 6.9476
14 6 12 1.575
6 12 14 1.575
0.5 0.6 0.7 ≈ 1.09375
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
sumber
42.0
bukan42
.0
?Jawaban:
Jelly , 6 byte
Jawaban ini didasarkan pada jawaban 05AB1E Emigna . Banyak terima kasih kepada Dennis dan Lynn untuk bantuan mereka dalam mencari tahu jawaban ini. Selamat datang saran bermain golf! Cobalah online!
Tidak melakukanolf
sumber
⁸÷
terlepas dari rantai sebagai satu unit, dan harus dibaca sebagai membagi argumen kiri awal dengan ini , atau sesuatu.Jelly , 7 byte
Cobalah online!
Penjelasan
Mari kita baca rantai ini:
Argumen implisit adalah daftar
[a, b, c]
.Pertama kita baca
S
. Ini mengambil jumlah tersebut:a + b + c
.Lalu, kita baca
H
. Ini bagian itu:(a + b + c)/2
. (Inis
.)Kemudian, kita membaca angka dua
_
(kurangi), diikuti oleh angka dua lain. Ini adalah sebuah kait : tidak memiliki argumen yang benar, sehingga ia menerima argumen untuk rantai ini[a, b, c]
, memberi kita[s-a, s-b, s-c]
. (Ini adalah pola rantai kelima dalam tabel di sini .)Kemudian, kita membaca pasangan diad-monad
÷@H
. Ini adalah percabangan :÷@
adalah pembagian dengan argumen terbalik, dan dibagiH
dua, sehingga nilai kerja kami dapatH
pula argumen ke rantai ini÷
dengan itu. Ini vektorisasi; kita pergi dengan[(a/2)/(s-a), (b/2)/(s-b), (c/2)/(s-c)]
. (Ini adalah pola rantai kedua dalam tabel di sini .)Akhirnya, kami membawa produk
P
, mendapatkan kamiabc/(8(s-a)(s-b)(s-c))
.Lihat grafik seperti pohon tentang bagaimana tautannya cocok.
sumber
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
³⁴⁵
argumen ...JavaScript, 38 byte
Ini adalah lambda ( kari ):
(Jika Anda menetapkannya ke variabel,
f
Anda harus menyebutnya sepertif(3)(4)(5)
)sumber
s = 1/2(a+b+c)
ke dalam rumus dan sederhanakan: D (mis.s-a = .5*b+.5*c-.5*a
, Dan tiga faktor.5
pembatalan dengan8
)(a,b,c)=>
adalah panjang yang sama, dan biaya lebih murah byte untuk menelepon;)05AB1E ,
117 byte05AB1E menggunakan pengkodean CP-1252 .
Cobalah online!
Penjelasan
sumber
MATL ,
87 byteCobalah online!
Penjelasan
Mari kita gunakan input
[3 4 5]
sebagai contohsumber
R,
3429 byteMembaca input dari stdin dan menyimpan sebagai R-vektor
x
. Kemudian gunakan vektorisasi R untuk membentuk penyebut.sumber
Haskell, 36 byte
Ini mendefinisikan fungsi
#
yang membutuhkan tiga argumen.Anda harus menyebutnya sebagai berikut:
(3#4)5
Sedikit lebih lama tetapi mungkin lebih golf:
sumber
MATLAB,
64 3825 byteIni adalah fungsi apa pun yang mengimplementasikan rumus seperti yang disediakan:
Ini mengasumsikan input menjadi daftar tiga nilai misalnya
[3,4,5]
. Contoh ini digunakan dalam penjelasan berikut:sumber
Mathematica, 20 byte
Mengambil input sebagai daftar tiga nilai, yang disebut sebagai
#
di dalam fungsi.Tr@
adalah cara terpendek untuk menjumlahkan daftar (untuk mendapatkan2s
) dan1##&@@(...)
mengalikan tiga faktori/(2s-2i)
untuki
masuka, b, c
.Jika input bilangan bulat atau bilangan rasional, Anda akan mendapatkan hasil yang pasti.
sumber
Python 3 , 42 byte
Cobalah secara Online!
sumber
OCaml, 51 byte
Yay, operator terpisah untuk kendaraan ...
sumber
Bertanya-tanya , 48 byte
MENINGGAL DUNIA
Pemakaian:
Penjelasan
Panggilan fungsi mahal di Wonder jika dibandingkan dengan operator infix dalam bahasa lain. Karena itu, saya memuat semua istilah dalam sebuah array dan mendapatkan produk dari hasil alih-alih mengalikan setiap istilah. Kode akan sama dengan sesuatu seperti:
sumber
Sebenarnya ,
108 byteJawaban ini didasarkan pada jawaban Jelly yang sangat baik dari Dennis . Selamat datang saran bermain golf! Cobalah online!
Tidak melakukanolf
sumber
Minecraft 1.8, 1607 byte + 85 blok = 1692 blytes
Peringatan: Tidak golf. Golfed akan memakan waktu hingga 1 / 3 kurang blytes.
Berikut ini adalah tangkapan layar yang dikomentari:
Input adalah
a
,b
, danc
, dan output adalahfin
fin
, dan semua variabel lainnya di Minecraft adalah bilangan bulat, sehingga akurasi standar Minecraft adalah 0 poin desimalPerbatasan hijau: blok perintah di sebelah kiri akan aktif setelah yang di sebelah kanan, yang hanya inisialisasi variabel.
Tuas (persegi panjang abu-abu di kanan bawah) adalah pemicu alat
Dibutuhkan begitu banyak karena cara Minecraft menangani variabel . Gambaran yang sangat sederhana:
/scoreboard objectives add name dummy
membuat variabel baru bernama "name
"/scoreboard players set @p name number
set variabelname
menjadinumber
. Angka harus berupa bilangan real, bukan variabel./scoreboard players operation @p name += @p name2
selisihname
olehname2
.name2
harus berupa variabel, bukan angka.-=
,/=
,*=
,=
Dan lebih dapat digunakan sebagai pengganti+=
untuk pengurangan, perkalian, pembagian, dllSaya tidak akan memposting semua 43 perintah di sini. Ini akan membantu bermain golf ini, tetapi juga akan membantu saya melakukan copypasting yang gila
Jika 1.9 blok perintah akan digunakan, solusinya akan (setidaknya) menggunakan 42 blok lebih sedikit. Jika variabel satu huruf akan digunakan, hampir 200 byte akan disimpan.
sumber
Java, 38 byte
Menguji dan tidak berkhianat
Menguji!
Keluaran
sumber
(a,b,c)
agak curang di sini, karena tidak mengandung informasi jenis. IMO antarmuka lambda implisit (dalam kasus AndaF
) harus dihitung dalam jumlah byte total.Ubur-ubur ,
1716 byteTerima kasih kepada Zgarb karena telah menghemat 1 byte.
Cobalah online!
Penjelasan
Ini didasarkan pada formula timbal balik yang sama dengan jawaban Dennis .
Dalam notasi fungsional yang lebih tradisional, program di atas berbunyi sebagai berikut:
Di mana
i
daftar input. Perhatikan bahwafold(multiply, ...)
hitung saja produk danfold(add, ...)
jumlahnya, sehingga kami dapat lebih menyederhanakan ini menjadi:The
sum(i) / i
diimplementasikan melalui hook)/+
yang mendefinisikan fungsi unary baru untuk melakukan kedua langkah sekaligus.sumber
Dyalog APL ,
109 byteIni adalah fungsi kereta anonim (di atas garpu dari garpu garpu), yang berarti bahwa setiap sub-fungsi diterapkan pada argumen, di dalam struktur berikut:
TryAPL online!
×/
produk dari⊢
argumen÷
dibagi dengan+/
jumlah argumen-
minus+⍨
argumen digandakan (lit. ditambahkan ke diri mereka sendiri)Latar belakang matematika.
ngn mencukur satu byte.
sumber
2sable , 6 byte
Port jawaban Dennis 'Jelly .
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
dc, 49 byte
Implementasi langsung dari formula yang diberikan. Anjuran untuk tiga input pada saat pemanggilan pada tiga baris terpisah dan mengeluarkan nilai titik-mengambang dengan 5 digit setelah titik desimal ke baris berikutnya.
Penjelasan
sumber
TI-Basic, 11 byte
Masukan harus dalam bentuk daftar, seperti
{A B C}
.Mungkin visual ini akan membantu (ingat itu
2s = a+b+c
):sumber
Perl 6 , 44 byte
sumber
Python, 55 byte
Penghargaan untuk Dennis . Saya baru saja porting. Dalam Python, bahasa yang banyak diabaikan.
sumber
Keempat, 83 byte
Mengasumsikan parameter floating point dimulai pada tumpukan floating point. Meninggalkan hasilnya pada tumpukan floating point. Menggunakan tumpukan untuk params / kembali adalah standar untuk Keempat.
Cobalah online - berisi semua kotak uji
Menggunakan formula
a*b*c * 1/ ( -(a+b-c) * -(b+c-a) * (a+c-b) )
. Hampir seluruh program hanya menggunakan tumpukan floating point. Pengecualian adalah3
di3 fpick
. Program ini membutuhkan juru bahasa yang mendukungfpick
(Ideone berfungsi, repl.it tidak).Penjelasan: sedikit kurang golf
sumber
ised : 19 byte
Sebut saja sebagai
ised --l 'inputfile.txt' '@*$1/@*{@+$1-2.*$1}'
tempatinputfile.txt
file dengan array yang dipisahkan ruang, atau-
untuk menerima dari pipe / stdin.Versi Unicode (bytecount yang sama tetapi 3 karakter lebih sedikit):
Sayangnya,
ised
membuang banyak karakter untuk sintaks argumen inputnya.sumber
vba, 76
Telepon dengan
atau unggul dengan
sumber
Public Function r(a,b,c):r=a*b*c/(b+c-a)/(a-b+c)/(a+b-c):End Function
C #, 82 byte
Pemakaian:
sumber
Pyke, 12 byte
Coba di sini!
Nah, BlueEyedBeast, Anda punya kesempatan. Saya menggunakan algoritma yang bagus di sini.
sumber
k, 19 byte
Mengevaluasi kanan ke kiri - Membagi daftar x dengan 2, jumlah hasilnya dan kurangi dari yang asli x. Negasikan jawabannya dan dapatkan produk dari hasilnya dan 8. Hasilnya adalah penyebutnya, pembilangnya adalah produk dari daftar.
sumber
Lua, 45 byte
Sangat berdasarkan pada jawaban JavaScript.
sumber