Ini agak mirip dengan pusat-pusat segitiga , tetapi dengan titik berbeda. The Fermat Titik adalah titik P di segitiga ABC sehingga nilai AP + BP + CP diminimalkan. Ada dua kasus:
Jika ada sudut lebih besar dari 120 derajat, titik itu adalah titik kulit. Jika tidak, gambar segitiga sama sisi pada masing-masing sisi ABC. Hubungkan titik jauh dari setiap segitiga sama sisi ke sudut berlawanan dari segitiga ABC. Melakukan ini untuk masing-masing dari tiga segitiga sama sisi menghasilkan titik persimpangan tunggal untuk ketiga garis, yaitu Fermat Point.
Ini harus berjalan dalam 5 detik pada mesin yang masuk akal.
Input : Satu set 3 poin, tidak harus bilangan bulat. Ini dapat diambil sebagai array bersarang, string, daftar tupel, dll. (Apa pun yang sesuai dengan bahasa Anda).
Output : Koordinat titik Fermat, sekali lagi, namun bahasa Anda paling baik menangani poin. Ketidakakuratan titik mengambang tidak akan dihitung terhadap Anda.
Kasus uji :
[[1, 1], [2, 2], [1, 2]] --> [1.2113248654051871, 1.788675134594813]
[[-1, -1], [-2, -1], [0, 0]] --> [-1, -1]
[[-1, -1], [1, -1], [0, 1]] --> [0, -0.42264973081037427]
[[0, 0], [0.5, 0.8660254037844386], [-5, 0]] --> [0, 0]
[[0, 0], [0, -5], [-0.8660254037844386, 0.5]] --> [0, 0]
Ini golf kode sehingga kode terpendek menang!
-0.0
output menggantikan beberapa0.0
s?Jawaban:
Haskell,
346291285 bytesKode yang sama dengan beberapa penjelasan
Tes:
Keluaran:
sumber
£
dan¤
sebagai operator 2 byte, tetapi tidak ketika dikodekan sebagai ISO-8859-1 dengan£
dan¤
sebagai operator 1 byte. Tersedia operator 1 byte dalam UTF-8 adalah!
,#
,%
,&
,?
. Anda harus mengganti operator 2 byte atau menyesuaikan jumlah byte Anda.Python,
475448440 byteSetiap bantuan untuk bermain golf lebih dihargai.
Tidak Disatukan:
Memasukkan:
Keluaran:
sumber
from math import*
adalah golf yang cukup umum. Ini juga akan membiarkan Anda menggunakanpi
alih-alih mengkodekannya (dengan panjang yang sama2*pi/3
). Anda juga dapat menjatuhkan banyak spasi seperti:d=lambda x,y:(...
.Python 3.5,
10191016998982969953 byte:Sangat lama dibandingkan dengan jawaban lain, tapi hei, setidaknya itu berhasil! Saya tidak bisa lebih bahagia dengan hasil yang saya dapatkan karena ini harus menjadi salah satu tantangan tersulit yang pernah saya lakukan. Saya sangat senang bahwa itu benar-benar berfungsi! : D Sekarang, ke catatan yang lebih teknis:
H((1,1),(2,2),(1,2))
akan berhasil, tetapi juga akanH([1,1],[2,2],[1,2])
.-0.0
menggantikan0.0
beberapa input. Misalnya, output untuk input[-1, -1], [1, -1], [0, 1]
adalah[-0.0, -0.4226497308103744]
.Saya harap ini baik-baik saja, meskipun jika tidak, saya akan mengubahnya, meskipun akan dikenakan biaya beberapa byte lagi.Ini tidak apa-apa, seperti yang dikonfirmasi oleh OP .13
hingga14
angka signifikan.Saya akan mencoba dan bermain golf ini seiring waktu. Penjelasan, mungkin sangat panjang, segera hadir.
Cobalah secara Online! (Ideone)
sumber
Mathematica, 39 byte
Membangun persamaan berdasarkan jarak antara titik dan titik
{x,y}
. Kemudian gunakanNArgMin
fungsi untuk menemukan minimum global untuk persamaan itu, yang akan menjadi Fermat Point menurut definisi.sumber