रैखिक कार्य सॉल्वर दो बिंदुओं से (x, y)


10

काम

एक फंक्शन L () लिखें जो फॉर्म (x, y) में निर्देशांक के दो टपल तर्क लेता है, और फॉर्म (a, c) में अपने संबंधित रैखिक फ़ंक्शन को लौटाता है, जहाँ x टर्म और c का सह-गुणांक है वाई-इंटरसेप्ट है।

आप मान सकते हैं कि इनपुट एक्स अक्ष के लंबवत रेखा नहीं होगी, और यह कि दोनों इनपुट अलग-अलग बिंदु हैं।

स्कोरिंग 

यह कोड गोल्फ है: सबसे कम कार्यक्रम जीतता है।

कृपया ध्यान दें: बुनियादी ऑपरेटरों (+, -, /, *) के अलावा किसी भी गणितीय कार्यों का कोई उपयोग नहीं।

उदाहरण

यहाँ पायथन में मेरा बिना गोल्फ वाला घोल है।

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)

आउटपुट:

>>> 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)

4
L( (0,0) , (0,1) )?
हावर्ड

1
आप मान सकते हैं कि इनपुट एक्स अक्ष के समानांतर एक रेखा नहीं है।
हैरी बेदले

2
आप मान सकते हैं कि इनपुट एक्स अक्ष के समानांतर एक रेखा नहीं है। क्या आपका मतलब वाई अक्ष है?
हावर्ड

क्षमा करें, पोस्ट पर संपादन सही था, एक्स अक्ष के लंबवत था।
हैरी बीडल

2
L((0,0),(0,0))?
user12205

जवाबों:


1

जे - 23 चार

काफी सरल। के Lरूप में इस्तेमाल किया जा करने के लिए एक dyadic क्रिया को परिभाषित करता है (x1,y1) L (x2,y2)

L=:%~/@:-,-/@(*|.)%-&{.

स्पष्टीकरण:

L=:%~/@:-,-/@(*|.)%-&{.  NB. the function L
                    &{.  NB. x coord of both points
                   -     NB. left x minus right x
             ( |.)       NB. flip right argument: (y2,x2)
              *          NB. pointwise multiplication of (x1,y1) and (y2,x2)
          -/@            NB. subtract the two results: (x1*y2)-(y1*x2)
                  %      NB. divide: (x1*y2 - y1*x2)/(x1-x2)
        -                NB. pointwise subtraction
   %~/@:                 NB. divide y difference by x diff: (y1-y2)/(x1-x2)
         ,               NB. append results together
L=:                      NB. assign function to L

उदाहरण:

   L=:%~/@:-,-/@(*|.)%-&{.
   0 0 L 1 1
1 0
   0 0 L 2 1
0.5 0
   0 0 L 7 1
0.142857 0
   10 22.5 L 5 12.5
2 2.5
   0 0 L 0 1  NB. __ is negative infinity
__ 0

7

जीएनयू डीसी , 30 24 बाइट्स

[sysxly-rlx-/dlx*lyr-]sL

एक मैक्रो को परिभाषित करता है Lजैसे कि (x 1 , y 1 , x 2 , y 2 ) को कॉल करने से पहले उस क्रम में स्टैक पर धकेल दिया जाना चाहिए, और कॉल करने के बाद L, (a, c) स्टैक से पॉप किया जा सकता है (रिवर्स ऑर्डर में रिवर्स ऑर्डर पाठ्यक्रम - यह एक ढेर है)।

टेस्टकेस ("रैखिक के रूप में सहेजें" और चलाएँ dc linear.dc):

[sysxly-rlx- / dlx * lyr-] sL # परिभाषित L मैक्रो

स्टैक पर 10 # पुश
22.5 # स्टैक के लिए y1 पुश
स्टैक पर 5 # पुश 2
12.5 # पुश y2 स्टैक के लिए

lLx # कॉल एल मैक्रो
f # स्टैक डंप करें

आउटपुट है:

$ dc linear.dc 
2.5
2
$ 

एल मैक्रो की व्याख्या:

  • syपॉप 2y रजिस्टर करने के लिए
  • sxपॉप 2x रजिस्टर करने के लिए
  • lyपुश yरजिस्टर (y 2 )
  • -y 2 को y 1 से घटाएं
  • rस्टैक पर स्वैप (y 1 - y 2 ) और x 1
  • lxपुश xरजिस्टर (x 2 )
  • -घटाना एक्स 2 से एक्स 1
  • /विभाजित (y 1 - y 2 ) द्वारा (x 1 - x 2 ) क्रमिक प्राप्त करने के लिए
  • d डुप्लिकेट ढाल
  • lxपुश xरजिस्टर (x 2 )
  • *ढाल द्वारा (x 2 ) गुणा करें
  • lyपुश yरजिस्टर (y 2 )
  • rस्टैक पर स्वैप (वाई 2 ) और (एक्स 2 * ग्रेडिएंट)
  • -घटाव (x 2 * ढाल) (y 2 ) से

1
धन्यवाद, बुरा नहीं है। मैं पिटने के लिए मानता हूं। ;)
मार्टिन एंडर

1
@ m.buettner फिर से गोल्फ और फिर से समझाया।
डिजिटल ट्रामा

5

हास्केल, 41 अक्षर

f(x,y)(u,v)=(a,y-a*x)where a=(y-v)/(x-u)

यहाँ गोल्फ के लिए बहुत कुछ नहीं है। यह बहुत ज्यादा है जो आप सामान्य रूप से माइनस व्हाट्सएप लिखेंगे।


4

गणितज्ञ, 55 38 बाइट्स

यह आश्चर्यजनक रूप से लंबा था (उन pesky लंबे फ़ंक्शन नाम ...) EDIT: अक्ष अवरोधन के लिए दृष्टिकोण को बदल दिया (ओपी के स्वयं के उत्तर से कुछ प्रेरणा ले रहा है)। यह पता चला है कि यह सीधे सबसे चालाक विचार नहीं था।

L={g=1/Divide@@(#2-#),#[[2]]-g#[[1]]}&

का उपयोग करें

L[{10,22.5},{5,12.5}]
> {2., 2.5}

गणितज्ञ के लिए धन्यवाद आप सामान्य परिणाम भी प्राप्त कर सकते हैं:

L[{r,s},{p,q}]
> {(p - r)/(q - s), (q r - p s)/(q - s)}

(यह अंतिम उदाहरण दिखाता है कि मैंने मूल रूप से इसे कैसे लागू किया था।)

सिर्फ रिकार्ड के लिए

L[{0,0},{0,1}]
> {ComplexInfinity, Indeterminate}

जो तकनीकी रूप से सही है।


आह, बहुत बढ़िया, मेरा मन थोड़ा सा काला था कि मुझे लगा, मैं इसे अपनी थकान पर दोष लगाऊंगा
हैरी बेदले

1
+1। ComplexInfinityसादा और पुराना क्यों नहीं Infinity? (मैं गणितज्ञ नहीं जानता)
डिजिटल ट्रॉमा

3
@DigitalTrauma मुझे लगता है कि क्योंकि यह स्पष्ट रूप से गणितज्ञों को यह बताए बिना है कि यह वास्तविक रूप में काम कर सकता है, यह हमेशा जटिल संख्याओं के लिए अंतरिक्ष में अंतरिक्ष को मानता है, ताकि वास्तविक समीकरणों के जटिल समाधानों को न फेंके।
मार्टिन एंडर

2

जावास्क्रिप्ट, 62 48

@ 6 के लिए इसे नीचे गोल्फ के लिए @Michael के लिए धन्यवाद।

L=(a,b)=>[s=(b[1]-a[1])/(b[0]-a[0]),a[1]-s*a[0]]

पुराना संस्करण:

function L(a,b){return[s=(b[1]-a[1])/(b[0]-a[0]),a[1]-s*a[0]]}

नमूना इनपुट:

L([0,0],[7,1])

नमूना उत्पादन:

[0.14285714285714285, 0]

रिकार्ड के लिए:

L([0,0],[0,1])
[Infinity, NaN]

४६ ईएस ६ का उपयोग कर:L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
माइकल एम।

@ मिचेल कूल। मैं एक जेएस नौसिखिया की तरह हूं, इसलिए मुझे नहीं पता था कि आप ऐसा कर सकते हैं। धन्यवाद।
user12205

@ m.buettner तुम ठीक कह रहे हो ... फिक्स्ड
user12205

1
अब सभी उत्तर बिल्कुल दस वर्णों के अलग हैं। : डी
मार्टिन एंडर

1
Awww। बनिया बदल गया!
जस्टिन


2

C # 105 बाइट्स

यह केवल कार्य नहीं है और यह पूरी तरह से अपने आप में संकलित करेगा। मैंने उपयोग को छोटा करने के Lलिए Systemनाम स्थान में रखा था , लेकिन नाम स्थान का उपयोग करने पर पूरी तरह से योग्य होने और बचाने के लिए बेहतर है। कोष्ठक को बचाया। return new z[]में से एक बचत भीreturn new[]

using z=System.Single;class P{z[] L(z[]a,z[]b){z c=(a[1]-b[1])/(a[0]-b[0]);return new[]{c,a[1]-c*a[0]};}}

है (c*a[0])आवश्यक? क्या आप उन कोष्ठकों को खत्म नहीं कर सकते हैं और 2 बाइट बचा सकते हैं?
काइल कानोस

@KyleKanos हाँ, धन्यवाद। हालांकि c # BODMAS का उपयोग नहीं करता है, गुणन पहले किया जाएगा (मुझे लगता है)।
नाथन कूपर

मैं कहता हूं कि आपको इस समाधान को शामिल करने के लिए namespaceघोषणा को शामिल करना होगा या इसे बदलना होगा System.Single
टिम एस

1

लुआ 5.1.4: 66 64 बाइट्स

function L(q,w)a=(q[2]-w[2])/(q[1]-w[1])return a,q[2]-a*q[1];end

उदाहरण उपयोग:

> print(L( {0,0}, {1,0} ))
-0   0
> print(L( {0,0}, {1,1} ))
1    0
> print(L( {0,0}, {7,1} ))
0.14285714285714    0
> print(L( {0,0}, {0,1} ))
-inf   -nan
> print(L( {0,0}, {0,0} ))
-nan   -nan

1

C ++ 88 (106 था)

बेहतर: आपकी टिप्पणियों के लिए धन्यवाद।

struct t{double x,y;};
t L(t u, t v){u.x=(v.y-u.y)/(v.x-u.x);u.y=v.y-u.x*v.x;return u;}

golfed:

typedef struct T{double x,y;}t;
t line(t u, t v){t z;z.x=(v.y-u.y)/(v.x-u.x);z.y=v.y-(z.x*v.x);return z;}

स्रोत

typedef struct T{
    double x,y;
} t;

t line(t u, t v)
{
t z;
z.x=(v.y-u.y)/(v.x-u.x);
z.y=v.y-(z.x*v.x);
return z;
}

मैं एक अनावश्यक स्थान देखता हूं;)
मार्टिन एंडर

1
यदि यह C ++ है, तो क्यों typedef?
DYP

इसके अलावा, मुझे लगता है कि आप छुटकारा पा सकते हैं z:u.x=(v.y-u.y)/(v.x-u.x); u.y=v.y-z.x*v.x; return u;
dyp

1

Apple स्विफ्ट 95 86

यह PCG.SE पर पहली स्विफ्ट प्रविष्टि हो सकती है ??

func L(x:Float...)->(Float,Float){var a=(x[3]-x[1])/(x[2]-x[0]);return(a,x[1]-a*x[0])}

मैं इस भाषा को कोड गोल्फ समुदाय के लिए एक बड़ी हिट नहीं देखता हूं।


0

गोल्फस्क्रिप्ट: 25 बाइट्स

~:y\:x;-\x--1?*.x-1**y+\p

चूंकि फ़ंक्शन को 'एल' नाम देने की आवश्यकता है, इसलिए मैंने इसे स्थानीय रूप से 'एल.जी.एस.' के रूप में सहेजा।

इस पोस्ट में @Dennis द्वारा बताया गया पकड़, यह है कि हमें पूर्णांकों के बजाय परिमेय संख्याओं का उपयोग करके गोल्फस्क्रिप्ट को ट्रिक करने की आवश्यकता है। यदि आप गोल्फस्क्रिप्ट संकेतन में इनपुट स्वीकार करने के इच्छुक हैं तो यह काम करता X1 Y1 X2 Y2 है

# L( (0,0) , (1,1) )
echo "0 0 1 1" | golfscript L.gs
> 1/1
> 0/1
#L( (10,22.5) , (5,12.5) )
echo "10 22 2-1?+ 5 12 2-1?+" | golfscript L.gs
> 2/1
> 5/2

0

रूबी - 48 अक्षर

लगभग जावास्क्रिप्ट उत्तर के समान:

L=->u,v{a,b,c,d=*u,*v;[s=(d-b).fdiv(c-a),b-s*a]}

0

पायथन 3 - 64 57 बाइट्स

def L(q,w):a=(q[1]-w[1])/(q[0]-w[0]);return a,q[1]-a*q[0]

यदि आप टपल का उपयोग नहीं करते हैं, तो आप इसे 43 से नीचे ला सकते हैं, जो कई लोग कर रहे हैं ...

def L(x,y,q,w):a=(x-q)/(y-w);return a,y-a*x

return(a,q[1]-a*q[0])
user12205

@ace धन्यवाद, यह मैला था
हैरी बीडल

0

PHP (75 वर्ण)

function L($u,$v){return[$s=($v[1]-$u[1])/($v[0]-$u[0]),$v[1]-($s*$v[0])];}

परीक्षा : print_r(L([0,0],[7,1]));

आउटपुट:

Array
(
    [0] => 0.14285714285714
    [1] => 0
)

(साभार @ace)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.