দুটি পয়েন্ট (x, y) থেকে লিনিয়ার ফাংশন সলভার


10

কাজটি

একটি ফাংশন এল () লিখুন যা ফর্মের (x, y) দুটি স্থানাঙ্কের টিপল আর্গুমেন্ট গ্রহণ করে এবং তাদের স্বতন্ত্র লিনিয়ার ফাংশনটি (ক, সি) প্রদান করে, যেখানে একটি এক্স টার্ম এবং সি এর সহ-কার্যকর হ'ল ই-ইন্টারসেপ্ট।

আপনি ধরে নিতে পারেন যে ইনপুটটি এক্স অক্ষের উপরের লম্ব হবে না এবং দুটি ইনপুট পৃথক পয়েন্ট।

স্কোরিং 

এটি কোড গল্ফ: সংক্ষিপ্ততম প্রোগ্রামের জয়।

দয়া করে দ্রষ্টব্য: বেসিক অপারেটরগুলি (+, -, /, *) ব্যতীত কোনও গাণিতিক ক্রিয়াকলাপের ব্যবহার নেই।

উদাহরণ

পাইথনে আমার অ-গল্ফযুক্ত সমাধান এখানে।

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
আপনি ধরে নিতে পারেন যে ইনপুটটি X অক্ষের সমান্তরাল নয়।
হ্যারি বিডল

2
আপনি ধরে নিতে পারেন যে ইনপুটটি X অক্ষের সমান্তরাল নয়। আপনি কি ওয়াই অক্ষ বলতে চান?
হাওয়ার্ড

দুঃখিত, পোস্টটিতে সম্পাদনাটি সঠিক ছিল, এক্স অক্ষের জন্য লম্ব।
হ্যারি বিডল

উত্তর:


1

জে - 23 চর

মোটামুটি সহজবোধ্য. Lহিসাবে ব্যবহার করার জন্য একটি ডায়াডিক ক্রিয়া সংজ্ঞায়িত করে (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(ক, সি) স্ট্যাক থেকে পপ করা যেতে পারে (বিপরীত ক্রমে) অবশ্যই - এটি একটি স্ট্যাক)।

টেস্টকেস ("লিনিয়ার.ডিসি" হিসাবে সংরক্ষণ করুন এবং চালান dc linear.dc):

[sysxly-rlx- / dlx * lyr-] sL # এল ম্যাক্রো সংজ্ঞায়িত করুন

10 # স্ট্যাকের দিকে এক্স 1 পুশ করুন
22.5 # স্ট্যাকের কাছে y1 চাপুন
5 # স্ট্যাকের জন্য এক্স 2 পুশ করুন
12.5 # স্ট্যাকের জন্য y2 চাপুন

lLx # কল করুন ম্যাক্রো
f # স্ট্যাকটি ফেলে দিন

আউটপুট হল:

c ডিসি লিনিয়ার.ডিসি 
2.5
2
$ 

এল ম্যাক্রোর ব্যাখ্যা:

  • syপপ Y 2 থেকে yরেজিস্টার করো
  • sxপপ এক্স 2 থেকে xরেজিস্টার করো
  • lyপুশ yরেজিস্টার (y 2 )
  • -Y বিয়োগ 2 Y থেকে 1
  • rসোয়াপ (y 1 - y 2 ) এবং স্ট্যাকের উপর এক্স 1
  • lxপুশ xরেজিস্টার (x 2 )
  • -বিয়োগ x এর 2 থেকে এক্স 1
  • /গ্রেডিয়েন্ট পেতে (x 1 - x 2 ) দ্বারা (y 1 - y 2 ) ভাগ করুন
  • d সদৃশ গ্রেডিয়েন্ট
  • lxপুশ xরেজিস্টার (x 2 )
  • *গ্রেডিয়েন্ট দ্বারা গুন (x 2 )
  • lyপুশ yরেজিস্টার (y 2 )
  • rস্যাকেটে (y 2 ) এবং (x 2 * গ্রেডিয়েন্ট) অদলবদল করুন
  • -(y 2 ) থেকে বিয়োগ (x 2 * গ্রেডিয়েন্ট )

1
ধন্যবাদ, খারাপ না মারধর করার কথা স্বীকার করি। ;)
মার্টিন এন্ডার

1
@ এম.বয়েটনার পুনরায় গল্ফ করেছে এবং পুনরায় ব্যাখ্যা করেছে।
ডিজিটাল ট্রমা

5

হাস্কেল, ৪১ টি অক্ষর

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

এখানে গল্ফ করার মতো অনেক কিছুই নেই। আপনি সাধারণত মাইনাস হোয়াইট স্পেসে যা লিখতে চান এটি অনেক বেশি।


4

গণিত, 55 38 বাইট

এটি আশ্চর্যজনকভাবে দীর্ঘ ছিল (যারা উদ্বেগজনক দীর্ঘ ফাংশনের নাম ...) সম্পাদনা: অক্ষর বাধা দেওয়ার জন্য পদ্ধতির পরিবর্তন করেছে (ওপির নিজস্ব উত্তর থেকে কিছুটা অনুপ্রেরণা গ্রহণ করে)। এটি সরাসরি গণনা করা সবচেয়ে চালাক ধারণা ছিল না।

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
@ ডিজিটাল ট্রুমা আমার মনে হয় কারণ এটি ম্যাথমেটিকাকে স্পষ্টভাবে না জানিয়ে যে এটি বাস্তবে কাজ করতে পারে, এটি সর্বদা প্রশ্নে স্থানটিকে জটিল সংখ্যা হিসাবে ধরে নিয়ে যায়, যাতে বাস্তব সমীকরণগুলির জটিল সমাধানগুলি ফেলে দেওয়া না যায়।
মার্টিন এন্ডার

2

জাভাস্ক্রিপ্ট, 62 48

@ মিশেলকে এটিএস 6 দিয়ে গলফ করার জন্য ধন্যবাদ for

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]

46 ES6 ব্যবহার করে:L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
মাইকেল এম

@ মিশেল কুল আমি একজন জেএস নবাগত ধরণের, তাই আমি জানতাম না যে আপনি এটি করতে পারেন। ধন্যবাদ।
ব্যবহারকারী 12205

@ মি.বেটনার আপনি ঠিক বলেছেন ... স্থির
ব্যবহারকারীর 12205

1
এখন সমস্ত উত্তর হ'ল দশ অক্ষর পৃথক। : ডি
মার্টিন এন্ডার

1
Awww। বনি বদলে গেল!
জাস্টিন


2

সি # 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]};}}

Is (c*a[0])প্রয়োজনীয়? আপনি কি এই প্রথম বন্ধনীটি সরিয়ে 2 বাইট সংরক্ষণ করতে পারবেন না?
কাইল কানোজ

@ কাইলক্যানোস হ্যাঁ, ধন্যবাদ যদিও সি # বোডমাস ব্যবহার করে না তবে গুণটি আগে করা হবে (আমার মনে হয়)।
নাথান কুপার

আমি বলব যে সমাধানটি বৈধ হওয়ার জন্য আপনাকে এই 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

সি ++ 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
যদি এটি সি ++ হয় তবে কেন typedef?
dyp

এছাড়াও, আমি মনে করি আপনি এ থেকে মুক্তি পেতে পারেন z:u.x=(v.y-u.y)/(v.x-u.x); u.y=v.y-z.x*v.x; return u;
ডায়প

1

অ্যাপল সুইফট 95 86

এটি পিসিজি.এসইতে প্রথম সুইফট এন্ট্রি হতে পারে ??

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

যেহেতু ফাংশনটির নাম 'এল' রাখা দরকার, তাই আমি স্থানীয়ভাবে এটিকে 'এল.জেস' হিসাবে সংরক্ষণ করেছি।

এই পোস্টে @ ডেনিসের ব্যাখ্যা অনুসারে ধরাটি হ'ল আমাদের গল্ফস্ক্রিপ্টকে পূর্ণসংখ্যার পরিবর্তে যুক্তিবাদী সংখ্যা ব্যবহার করার কৌশল করতে হবে। সুতরাং আপনি যদি গল্ফস্ক্রিপ্ট স্বরলিপিতে ইনপুট গ্রহণ করতে ইচ্ছুক হন তবে এটি কাজ করে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


@ কেবল ধন্যবাদ, এটি ছিল opালু
হ্যারি বিডল

0

পিএইচপি (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)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.