Tugas
Tulis fungsi L () yang mengambil dua argumen Tuple dari koordinat dalam bentuk (x, y), dan mengembalikan fungsi liniernya masing-masing dalam bentuk (a, c), di mana a adalah koefisien dari istilah x dan c adalah intersepsi y.
Anda dapat mengasumsikan bahwa input tidak akan menjadi garis tegak lurus sumbu x, dan bahwa kedua input adalah titik yang terpisah.
Mencetak gol
Ini Golf Code: program terpendek menang.
Harap Dicatat: Tidak ada penggunaan fungsi matematika selain dari operator dasar (+, -, /, *).
Contoh
Ini solusi un-golfed saya di Python.
def L(Point1, Point2):
x = 0
y = 1
Gradient = (float(Point1[y]) - float(Point2[y])) / (float(Point1[x]) - float(Point2[x]))
YIntercept = Point1[y] - Gradient * Point1[x]
return (Gradient, YIntercept)
Keluaran:
>>> L( (0,0) , (1,1) )
(1.0, 0.0)
>>> L( (0,0) , (2,1) )
(0.5, 0.0)
>>> L( (0,0) , (7,1) )
(0.14285714285714285, 0.0)
>>> L( (10,22.5) , (5,12.5) )
(2.0, 2.5)
L( (0,0) , (0,1) )
?L((0,0),(0,0))
?Jawaban:
J - 23 char
Cukup mudah. Mendefinisikan kata kerja diad
L
untuk digunakan sebagai(x1,y1) L (x2,y2)
.Penjelasan:
Contoh:
sumber
GNU dc ,
3024 byteMenentukan makro
L
sedemikian rupa sehingga (x 1 , y 1 , x 2 , y 2 ) harus didorong ke tumpukan dalam urutan itu sebelum memanggil, dan setelah memanggilL
, (a, c) dapat muncul dari tumpukan (dalam urutan terbalik dari Tentu saja - itu adalah tumpukan).Testcase (simpan sebagai "linear.dc" dan jalankan
dc linear.dc
):Output adalah:
Penjelasan L macro:
sy
pop y 2 untuky
mendaftarsx
pop x 2 untukx
mendaftarly
y
daftar push (y 2 )-
kurangi y 2 dari y 1r
swap (y 1 - y 2 ) dan x 1 pada stacklx
x
daftar push (x 2 )-
kurangi x 2 dari x 1/
bagi (y 1 - y 2 ) dengan (x 1 - x 2 ) untuk mendapatkan gradiend
duplikat gradienlx
x
daftar push (x 2 )*
kalikan (x 2 ) dengan gradienly
y
daftar push (y 2 )r
swap (y 2 ) dan (x 2 * gradien) pada stack-
kurangi (x 2 * gradien) dari (y 2 )sumber
Haskell, 41 karakter
Tidak banyak bermain golf di sini. Cukup banyak apa yang biasanya Anda tulis minus spasi.
sumber
Mathematica,
5538 byteIni mengejutkan panjang (nama-nama fungsi panjang sial ...)EDIT: Mengubah pendekatan untuk mencegat sumbu (mengambil beberapa inspirasi dari jawaban OP sendiri). Ternyata menghitungnya secara langsung bukanlah ide yang paling pintar.Gunakan seperti
Berkat Mathematica Anda juga dapat memperoleh hasil umum:
(Contoh terakhir ini menunjukkan bagaimana saya awalnya menerapkan ini.)
Hanya sebagai catatan
yang secara teknis benar.
sumber
ComplexInfinity
dan tidak tua biasaInfinity
? (Saya tidak tahu Mathematica)JavaScript,
6248Terima kasih kepada @Michael untuk bermain golf dengan ES 6.
Versi lama:
Input sampel:
Output sampel:
Untuk catatan:
sumber
L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
Python3 (51)
sumber
C # 105 byte
Ini bukan hanya fungsi dan akan dikompilasi sepenuhnya pada itu sendiri. Aku telah menempatkan
L
diSystem
namespace untuk korslet menggunakan, tetapi lebih baik untuk sepenuhnya memenuhi syarat dan menghemat menggunakan namespace. Disimpan kurung. Juga penghematan darireturn new z[]
kereturn new[]
sumber
(c*a[0])
perlu? Tidak bisakah Anda menghilangkan tanda kurung itu dan menghemat 2 byte?namespace
deklarasi, atau mengubahnya menjadiSystem.Single
, agar solusi ini valid.Lua 5.1.4:
6664 byteContoh penggunaan:
sumber
C ++ 88 (dulu 106)
Ditingkatkan: terima kasih atas komentar Anda.
Golf:
Sumber
sumber
typedef
?z
:u.x=(v.y-u.y)/(v.x-u.x); u.y=v.y-z.x*v.x; return u;
Apple Swift
9586Ini mungkin entri Swift pertama di PCG.SE ??
Saya tidak melihat bahasa ini menjadi hit besar bagi komunitas Code Golf.
sumber
Golfscript: 25 byte
Karena fungsi perlu dinamai 'L', saya menyimpannya sebagai 'L.gs' secara lokal.
Tangkapannya, seperti yang dijelaskan oleh @Dennis dalam posting ini , adalah bahwa kita perlu mengelabui Golfscript agar menggunakan bilangan rasional alih-alih bilangan bulat. Jadi ini berfungsi jika Anda bersedia menerima masukan
X1 Y1 X2 Y2
dalam notasi skrip golfsumber
Ruby - 48 karakter
Hampir identik dengan jawaban JavaScript:
sumber
Python3 -
6457 BytesAnda dapat menurunkannya menjadi 43 jika Anda tidak menggunakan Tuple, yang dilakukan banyak orang ...
sumber
return(a,q[1]-a*q[0])
PHP (75 karakter)
uji :
print_r(L([0,0],[7,1]));
keluaran:
(terima kasih @ace)
sumber