Anda dapat menentukan volume objek berdasarkan kumpulan dimensi yang diberikan:
- Volume bola dapat ditentukan menggunakan angka tunggal, jari-jari (
r
) - Volume silinder dapat ditentukan dengan menggunakan dua angka, jari-jari (
r
) dan tinggi (h
) - Volume kotak dapat ditentukan menggunakan tiga angka, panjang (
l
), lebar (w
) dan tinggi (h
) - Volume piramida segitiga tidak teratur dapat ditentukan dengan menggunakan empat angka, panjang sisi (
a, b, c
) dan tinggi (h
).
Tantangannya adalah untuk menentukan volume objek yang diberikan salah satu dari input berikut:
- Satu angka
(r)
atau(r, 0, 0, 0)
=>V = 4/3*pi*r^3
- Dua angka
(r, h)
atau(r, h, 0, 0)
=>V = pi*r^2*h
- Tiga angka
(l, w, h)
atau(l, w, h, 0)
=>V = l*w*h
- Empat angka
(a, b, c, h)
=>V = (1/3)*A*h
, di manaA
diberikan oleh rumus Bangau :A = 1/4*sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))
Aturan dan klarifikasi:
- Input dapat berupa bilangan bulat dan / atau desimal
- Anda dapat mengasumsikan semua dimensi input akan positif
- Jika Pi sulit dikodekan itu harus akurat hingga:
3.14159
. - Output harus memiliki setidaknya 6 digit signifikan, kecuali untuk angka yang dapat diwakili secara akurat dengan digit lebih sedikit. Anda dapat menampilkan
3/4
sebagai0.75
, tetapi4/3
harus1.33333
(lebih banyak digit OK)- Cara membulatkan nilai yang tidak akurat adalah opsional
- Perilaku untuk input yang tidak valid tidak ditentukan
- Aturan standar untuk I / O. Input dapat berupa daftar atau argumen terpisah
Ini adalah kode golf, jadi solusi terpendek dalam byte menang.
Kasus uji:
calc_vol(4)
ans = 268.082573106329
calc_vol(5.5, 2.23)
ans = 211.923986429533
calc_vol(3.5, 4, 5)
ans = 70
calc_vol(4, 13, 15, 3)
ans = 24
code-golf
math
arithmetic
geometry
Stewie Griffin
sumber
sumber
Jawaban:
MATL ,
57535144 byteInput adalah array dengan angka 1, 2, 3 atau 4.
Cobalah online!
Penjelasan
Alih-alih menggunakan
if
loop bersarang , yang mahal dalam hal byte, ini menghitung empat hasil yang mungkin untuk input apa pun, dan kemudian mengambil hasil yang sesuai tergantung pada panjang input.Saat menghitung hasilnya, meskipun hanya satu yang valid, yang lain tidak bisa memberikan kesalahan. Ini berarti misalnya bahwa pengindeksan elemen keempat dari input tidak diperbolehkan, karena input mungkin memiliki kurang dari empat elemen.
sumber
Vitsy, 49 byte
Saya pikir Anda menyerahkan yang ini kepada saya di atas piring, tetapi saya menemukan bug yang belum terselesaikan untuk diatasi. Tapi tidak menyakitiku.
Pada dasarnya, dengan input yang panjang tertentu untuk fungsi yang berbeda, Anda sendok memberi saya sintaks metode saya untuk melakukan hal ini. Jadi, yay, sukses!
Penjelasan, satu baris sekaligus:
Input diterima sebagai argumen baris perintah dalam kebalikan yang tepat seperti yang muncul dalam pertanyaan, tanpa nol tambahan.
Cobalah online!
Selain itu, ada sesuatu yang saat ini sedang dalam pengembangan.
Paket Java w / Vitsy
Perhatikan bahwa paket ini sedang dalam proses; ini hanya untuk menunjukkan bagaimana ini akan bekerja di masa depan (dokumentasi untuk ini belum diunggah) dan ini tidak di- golf, dan merupakan terjemahan literal:
sumber
C,
10097 bytesunting 1: hapus desimal yang tidak perlu
.
, terima kasih Immibis!sumber
4./3.
begitu4/3.
? Dan dapat2.
dan12.
hanya menjadi2
dan12
?JavaScript ES6,
12912612511611490 byteMenyimpan banyak byte (9) dengan formula yang luar biasa, terima kasih kepada Stewie Griffin! Karena input harus bukan nol,
variable?
cukup untuk pemeriksaan-definisi.Uji itu!
sumber
Uncaught SyntaxError: Unexpected token =
(merujuk keZ=a*a
)h
, yang tampaknya agak kelewatan.Haskell,
11410910710199 byteMengambil daftar angka dan mengembalikan volume. Sebut saja seperti
untuk bola, dll. Fungsi ini polimorfik untuk semua jenis yang mengimplementasikan
sqrt
(jadi, pada dasarnyaFloat
atauDouble
).Itu tidak akan memenangkan kontes untuk singkatnya. Tetapi perhatikan seberapa mudah dibaca itu. Bahkan jika Anda tidak benar-benar mengenal Haskell, Anda dapat mengetahui apa yang dilakukannya dengan mudah. Sintaks pencocokan pola Haskell membuatnya sangat mudah untuk mendefinisikan fungsi aneh yang melakukan sesuatu yang sangat berbeda tergantung pada bentuk input.
sumber
(1/3)*(1/4)*h
,,, mengapa tidakh/12
? Menghemat banyak byte!.
dan#
dan$
dan itu menjadi Mathematica Soup.PowerShell,
165161 byteJadi ... Banyak ... Dolar ... (31 dari 161 karakter adalah
$
, untuk 19,25% dari kode) ... tetapi, disimpan 4 byte berkat Stewie Griffin!Kami menerima empat input, dan kemudian secara progresif mengindeks ke pernyataan pseudo-ternary berdasarkan pada mereka dalam urutan terbalik. Misalnya,
(..., ...)[!$h]
tes luar apakah input keempat hadir. Jika demikian,!$h
kemauan sama0
dan babak pertama dieksekusi (volume piramida triagonal tidak beraturan). Kalau tidak,!$h
dengan$h = $null
(seperti yang tidak diinisialisasi) akan sama1
, jadi ia pergi ke babak kedua, yang itu sendiri adalah pseudo-ternary berdasarkan[!$c]
dan seterusnya.Ini kemungkinan mendekati optimal, karena rumus yang seharusnya lebih pendek yang (misalnya) digunakan oleh Cᴏɴᴏʀ O'Bʀɪᴇɴ sebenarnya 2 byte lebih lama di PowerShell berkat kurangnya
^
operator ... Satu-satunya penghematan nyata berasal dari(1/3)*(1/4)*A*$h
bermain golfA*$h/12
, dan pengaturan$p
nanti untuk menyimpan beberapa byte alih-alih[math]::PI
panggilan yang panjang .sumber
CJam,
6766 byteSaya akan segera memperpendeknya. Cobalah online !
Penjelasan yang akan datang.
sumber
Serius,
655955 byteCobalah online!
Penjelasan
Yang ini doozy. Saya akan memecah penjelasan menjadi beberapa bagian.
Tubuh utama:
Fungsi 0:
Fungsi 1:
Fungsi 2:
Fungsi 3 (21 byte; hampir setengah dari panjang program!)
sumber
Matlab, 78 byte
Cukup yakin itu tidak bisa lebih pendek dari ini.
~b
,~c
dan~d
,0
jika masing-masing dimensi bukan nol. Rumus dengan dimensi nol hanya akan memberikan nol. Dengan begitu, masing-masing formula dapat dengan mudah dijumlahkan. Tidakif
danelse
wajibSebut saja seperti ini (atau coba online di sini ):
sumber
Python
32,127119116 bytePenghargaan kepada seseorang dan Mego atas semua bantuan mereka dalam bermain golf. Penghargaan juga untuk Cᴏɴᴏʀ O'Bʀɪᴇɴ dan Josh ketika saya meminjam sebagian dari jawaban mereka untuk yang satu ini.
Tidak Disatukan:
sumber
def v(a,b,c,d):z=a*a;p=355/113;return[x for x in[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,p*z*b,p*z*a*4/3]if x][0]
dengan asumsi input diisi dengan0
s.def v(a,b,c,d):z=a*a;P=3.14159;return filter(int,[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,P*z*b,P*z*a*4/3])[0]
Mathematica, 114 (103)
Fungsi murni: 114
Tidak Disatukan:
Pemakaian:
Jika fungsi-fungsi yang disebutkan diizinkan: 103
Pemakaian:
sumber
#1==#
, Saya pikirQuiet[x_]:=Quiet[x,All]
dan π (Alt-P pada Mac) cocok untuk ASCII yang diperluas.#1 #2 #3
dengan1##
? Jangan lupa#==#1
Faktor, 783 byte
Yah, ini butuh waktu lama.
Panggil
{ array of numbers } volume
.sumber