Tantangan
Tantangan ini sangat mudah. Diberi empat titik 3 dimensi, hitung luas permukaan tetrahedron yang mereka bentuk. Ini kode-golf , jadi kode terpendek menang. Celah standar berlaku, dengan ketentuan tambahan bahwa fungsi bawaan untuk melakukan tugas ini diberikan empat poin dilarang.
Anda dapat mengasumsikan keempat poin akan berbeda, dan akan diberikan melalui STDIN, 1 poin per baris. Setiap titik akan terdiri dari tiga bilangan bulat 16-bit unsigned. Format tepat dari setiap titik dapat dimodifikasi jika itu membuat segalanya lebih mudah, seperti tiga bilangan bulat yang dipisahkan ruang. Memiliki masing-masing titik pada jalur yang terpisah adalah wajib namun. Output harus melalui STDOUT, ke setidaknya 2 tempat desimal.
Bagi Anda yang tidak tahu, tetrahedron adalah padatan 3-d, dibentuk oleh 4 wajah segitiga.
Contoh
# input (format is up to you, see clarification above)
[23822, 47484, 57901]
[3305, 23847, 42159]
[19804, 11366, 14013]
[52278, 28626, 52757]
# output
2932496435.95
Silakan tinggalkan catatan jika Anda melihat matematika saya salah.
[[list],[of],[lists]]
?Jawaban:
Python,
198 178161 karakterFormat input seperti yang diberikan dalam pertanyaan.
Ini menghitung panjang tepi yang berdekatan dengan masing-masing wajah dan kemudian menggunakan rumus Heron .
sumber
Matlab / Oktaf 103
Saya menganggap nilai yang akan disimpan dalam variabel
c
. Ini menggunakan fakta bahwa luas segitiga adalah setengah panjang dari produk silang dari dua vektor sisinya.sumber
Input[]
Input[]
,InputString[]
,Import[]
, danImportString[]
.APL, 59
Bekerja dengan menghitung produk silang
Penjelasan
Baris pertama mendefinisikan fungsi yang mengambil dua argumen (secara implisit dinamai
⍺
dan⍵
), secara implisit mengharapkannya menjadi array numerik dengan panjang 3, memperlakukannya sebagai vektor 3d, dan menghitung besarnya kuadrat dari produk silang mereka.Baris kedua melakukan sisanya.
sumber
Python 3,
308 298 292 279 258254Ini menggunakan:
sumber
for i in">"*4
cerdasx**0.5
, bukanmath.sqrt(x)
.def a(t,u,v)
satu baris seperti:def a(t,u,v):w=(t+u+v)/2;return(w*(w-t)*(w-u)*(w-v))**0.5
.Mathematica
168154Ini menemukan panjang tepi tetrahedron dan menggunakan rumus Heron untuk menentukan area wajah.
Ada rute yang lebih langsung yang hanya membutuhkan 60 karakter , tetapi melanggar aturan sejauh menghitung daerah masing-masing wajah dengan built-in fungsi,
Area
:sumber
Sage - 103
Bagian pembacaan input diadaptasi dari jawaban Keith Randall .
sumber
Python - 260
Saya tidak yakin apa etiket posting jawaban untuk pertanyaan Anda sendiri, tetapi dia adalah solusi saya, yang saya gunakan untuk memverifikasi contoh saya, golf:
Ia menggunakan prosedur yang sama dengan laurencevs.
sumber
r=range
.lambda
lebih pendek daridef
.math.sqrt
dapat digantikan oleh(…)**.5
.p=copy.copy(P);p.pop(j);
dapat disingkat menjadip=P[:j-1]+P[j:]
.A
hanya digunakan satu kali.C, 303
Tidak termasuk spasi putih yang tidak perlu. Namun, masih banyak golf yang harus dilakukan di sini (saya akan mencoba untuk kembali dan melakukannya nanti.) Ini pertama kalinya saya menyatakan
for
loop dalam sebuah#define
. Saya selalu menemukan cara untuk mengurangi jumlah loop sebelumnya.Saya harus berubah dari
float
untukdouble
mendapatkan jawaban yang sama dengan OP untuk kasus uji. Sebelum itu, itu adalah 300 putaran.scanf
berfungsi sama apakah Anda memisahkan input Anda dengan spasi atau baris baru, sehingga Anda dapat memformatnya menjadi sebanyak atau sesedikit baris yang Anda suka.sumber