একটি পোলার গ্রাফ চার্টে ভ্রমণ দুটি পয়েন্টের মধ্যে দূরত্ব


23

সংক্ষিপ্ত সমস্যার ব্যাখ্যা

উত্স থেকে উদ্ভূত কেবল রশ্মি এবং বৃত্তের কেন্দ্রিক কেন্দ্রে ভ্রমণকারী দুটি পয়েন্টের মধ্যে সর্বনিম্ন দূরত্ব নির্ধারণের জন্য একটি প্রোগ্রাম লিখুন।

অনুধাবনের ব্যাখ্যা

এখন আসুন কল্পনা করুন যে আমরা একটি বিমানে আছি এবং এই বিমানে আমাদের কেবলমাত্র বিশেষ উপায়ে ভ্রমণ করার অনুমতি দেওয়া হয়েছে। আমাদের উত্স থেকে উদ্ভূত কোনও রশ্মিতে ভ্রমণ করার অনুমতি দেওয়া হয়েছে।

যে পথে আমরা ভ্রমণ করতে পারি

আমরা বৃত্তকে কেন্দ্র করে যে কোনও বৃত্তে ভ্রমণ করতে পারি

চেনাশোনাগুলিতে আমরা ভ্রমণ করতে পারি

এখন আমাদের লক্ষ্য এই বিমানের এক স্থান থেকে অন্য পয়েন্টে ভ্রমণ। তবে, আমরা কেবল একটি সাধারণ ইউক্যালিডিয়ান পথে ভ্রমণ করতে পারি না, কেন্দ্রটি থেকে বের হওয়া কোনও রশ্মির উপর পয়েন্টগুলি পড়লে আমরা কেবল এটি করতে পারি।

এখানে চিত্র বর্ণনা লিখুন

আমরা এটির উপর ভ্রমণ করতে পারি কারণ এটি আমাদের রশ্মির একটিতে পড়ে।

এখানে চিত্র বর্ণনা লিখুন

আমরা উত্সকে কেন্দ্র করে চেনাশোনাগুলিতেও ভ্রমণ করতে পারি।

এখানে চিত্র বর্ণনা লিখুন

উদাহরণ

এখন এখানে চ্যালেঞ্জ:

আমরা একটি পয়েন্ট থেকে অন্য সংক্ষিপ্ততম পথে পৌঁছতে পেরেছি; প্রায়শই এটি বৃত্ত এবং রশ্মিতে ভ্রমণের সংমিশ্রণ।

এখানে চিত্র বর্ণনা লিখুন

এটি তবে এটি দুটি রশ্মিতেও ভ্রমণ করতে পারে।

এখানে চিত্র বর্ণনা লিখুন

কখনও কখনও দুটি পথ থাকে যা সর্বনিম্ন দূরত্ব ভ্রমণ করে।

এখানে চিত্র বর্ণনা লিখুন

সমস্যা

আপনার চ্যালেঞ্জটি হ'ল একটি প্রোগ্রাম লিখুন যে দুটি পয়েন্ট দেওয়া হলে আমাদের যদি এই নিয়মগুলি অনুসরণ করি তবে তাদের মধ্যে সর্বনিম্ন দূরত্ব দিন। ইনপুটগুলি আয়তক্ষেত্রাকার বা মেরু আকারে দেওয়া যেতে পারে এবং আউটপুটটি এক নম্বর হওয়া উচিত, এর মধ্যে দূরত্ব।

পরীক্ষার মামলা

(আয়তক্ষেত্রাকার ইনপুট সহ)

(1,1) (1,-1) -> ~ 2.22144
(0,0) (1, 1) -> ~ 1.41421
(1,0) (-0.4161 , 0.90929) -> ~ 2
(1,1) (1, 0) -> ~ 1.19961
(1,2) (3, 4) -> ~ 3.16609

আয়তক্ষেত্রাকার বা মেরু আকারে পরীক্ষার উদাহরণগুলি কি? এছাড়াও: বেভুটিন
অ্যাঙ্গস

তারা আয়তক্ষেত্রাকার আকারে আছে, আমার তা স্পষ্ট করে বলা উচিত
Ando বান্দো

শেষ উদাহরণটি কি সঠিক? আমি পেয়ে করছি ~ 3,166
Angs

6
@ পিটার টেলর কারণ তারা আসলে একই পথ নয়। একইভাবে x এবং সমুদ্রের দিকের পরিবর্তে ছোট পদক্ষেপের মাধ্যমে xy প্লেনে 0,0 থেকে 1,1 অবধি কোনও পাথ দৈর্ঘ্যের শূন্যের দিকে ঝোঁক হওয়ায় সরাসরি তির্যক পথের সমান প্রদর্শিত হয়। তবে তির্যক পাথটির দৈর্ঘ্য স্কয়ার্ট (2) থাকে এবং ধাপে পাথের সর্বদা দৈর্ঘ্য 2 থাকে
পেনগুইনো

1
আমি মনে করি চিত্রগুলি এত বড় না হলে চ্যালেঞ্জটি আরও ভাল দেখাচ্ছে। বর্তমানে তারা পাঠ্যটি অনুসরণ করা কঠিন করে তোলে
লুইস মেন্ডো

উত্তর:


5

হাস্কেল, 49 48 বাইট

(a!q)c r=min(q+r)$abs(q-r)+acos(cos$a-c)*min q r

ব্যবহার:

> let rect2polar (x,y)=(atan2 y x, sqrt(x^2+y^2))
> let test c1 c2=let [(a1,r1),(a2,r2)]=rect2polar<$>[c1,c2] in (a1!r1)a2 r2
> test (1,0) (-0.4161, 0.90929)
1.9999342590038496

বাইট সংরক্ষণের জন্য @ জগারবকে ধন্যবাদ


(a!q)c rপরিবর্তে সংজ্ঞা দিয়ে আপনি একটি বাইট সংরক্ষণ করতে পারেন d a q c r
Zgarb

4

জাভাস্ক্রিপ্ট (ES6), 65 বাইট

with(Math)(r,t,s,u,v=acos(cos(t-u)))=>v<2?abs(r-s)+v*min(r,s):r+s

মেরু স্থানাঙ্ক নেয়। একটি কোণকে 0 থেকে between এর মধ্যে হ্রাস করার জন্য @ অংগসের কৌশলটি ব্যবহার করে π আয়তক্ষেত্রাকার স্থানাঙ্কগুলির জন্য, এর মতো কিছু কাজ করে:

with(Math)g=(r,t,s,u,v=acos(cos(t-u)))=>v<2?abs(r-s)+v*min(r,s):r+s
with(Math)f=(x,y,v,w)=>g(hypot(y,x),atan2(y,x),hypot(w,v),atan2(y,v))

3

এমএটিএল , 22 বাইট

|ttsGZ}/X/bX<*|bd|+hX<

ইনপুট দুটি জটিল সংখ্যার একটি অ্যারে।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

|       % Implicitly input array and take absolute value of its entries
tt      % Duplicate twice
s       % Sum. This is the length of the path that follows the two radii
GZ}     % Push input again and split into the two numbers
/X/     % Divide and compute angle. This gives the difference of the angles
        % of the two points, between -pi and pi
bX<     % Bubble up a copy of the array of radii and compute minimum
*|      % Multiply and take absolute value. This is the arc part of the
        % path that follows one arc and the difference of radii
bd|     % Bubble up a copy of the array of radii and compute absolute
        % difference. This is the other part of the second path
+       % Add. This gives the length of second path
hX<     % Concatenate and take minimum to produce the smallest length.
        % Implicitly display

2

রুবি, 64 বাইট

প্রথম, আমার জমা। যুক্তি সহ লাম্বদা ফাংশন distance 1, angle 1, distance 2, angle2

->r,a,s,b{([d=(b-a).abs,?i.to_c.arg*4-d,2].min-2)*[r,s].min+s+r}

এখন এখানে f=by 66 বাইটের দুটি ভিন্ন সমাধান (অ্যাসাইনমেন্ট বাদে ) আমার আসল জমাটি আবার 64৪ বাইটে অনুসরণ করবে।

Solution 1:Using include Math, 66 bytes excluding f=
include Math;f=->r,a,s,b{[acos(cos(b-a)),2].min*[r,s].min+(s-r).abs}

Solution 2:Using complex number to define PI instead, 66 bytes excluding f=
f=->r,a,s,b{[d=(b-a).abs,?i.to_c.arg*4-d,2].min*[r,s].min+(s-r).abs}

SUBMISSION AGAIN, 64 bytes excluding f=
f=->r,a,s,b{([d=(b-a).abs,?i.to_c.arg*4-d,2].min-2)*[r,s].min+s+r}

জমা 2 সমাধানের উপর ভিত্তি করে তৈরি করা হয়েছে তবে কোডটি 2 বাইট দ্বারা সংক্ষিপ্ত করতে পরিচয় (s-r).abs= ব্যবহার করে s+r-[s,r].min*2, তাই -2বন্ধনীগুলির অভ্যন্তরে।

অন্যান্য উল্লেখযোগ্য বৈশিষ্ট্যটি হ'ল এক্সপ্রেশন ?i.to_c.arg*4= 2 * পিআই ব্যবহার না করে include Math। নিম্ন নির্ভুলতা গ্রহণযোগ্য হলে এটি আক্ষরিক দ্বারা প্রতিস্থাপন করা যেতে পারে।

সমাধান 2 পরীক্ষা প্রোগ্রামে মন্তব্য করেছে

f=->r,a,s,b{          #r,s are distances, a,b are angles for points 1 and 2 respectively.                       
    [d=(b-a).abs,       #From nearer point we can take arc of length d radians perhaps crossing zero angle to the ray of the further point
    ?i.to_c.arg*4-d,    #or go the other way round which may be shorter (?i.to_c.arg*4 == 2*PI, subtract d from this.)
    2].min*             #or go through the centre if the angle exceeds 2 radians.
  [r,s].min+          #Multiply the radians by the distance of the nearer point from the origin to get the distance travelled. 
  (s-r).abs           #Now add the distance to move along the ray out to the further point.
}

#test cases per question (given as complex numbers, converted to arrays of [distance,angle]+[distance,angle] (+ concatenates.)
#the "splat" operator * converts the array to 4 separate arguments for the function.
p f[*("1+i".to_c.polar + "1-i".to_c.polar)]
p f[*("0".to_c.polar + "1+i".to_c.polar)]
p f[*("1".to_c.polar + "-0.4161+0.90929i".to_c.polar)]
p f[*("1+i".to_c.polar + "1".to_c.polar)]
p f[*("1+2i".to_c.polar + "3+4i".to_c.polar)]

আউটপুট

2.221441469079183
1.4142135623730951
1.9999342590038496
1.1996117257705434
3.1660966740274357

2

গণিত 66 বাইট

এটি আয়তক্ষেত্রাকার স্থানাঙ্ক গ্রহণ করে এবং একটি সঠিক প্রতীকী সমাধান আউটপুট করতে পারে

Min[If[(m=Min[{p,q}=Norm/@#])>0,m*VectorAngle@@#,0]+Abs[p-q],p+q]&

ব্যবহার:

%/@{
{{1,1},{1,-1}},
{{0,0},{1,1}},
{{1,0},{-.4161,.90929}},
{{1,1},{1,0}},
{{1,2},{3,4}}
}

উৎপাদনের: প্রতীকী ফলাফল

এন @% ফলন:

{2.221441469, 1.414213562, 1.999934259, 1.199611726, 3.166096674}


1
নিফটি! আপনি যদি প্রতীকী পথে চলেছেন তবে আপনি পরীক্ষার কেস {1,0} {- 4161, .90929 replace সাথে 1,0 0 {কোস (2), পাপ (2) And
আন্দো বান্দো

1

পাইথন 2, 164 126 125 132 বাইট:

def A(a,b,c,d,p=3.1415926535):z=abs(a-c);M=lambda f:2*p*f*abs(b-d)/360.0;print min((a==c)*min(a+c,M(a))+(b==d)*z or'',M(a)+z,M(c)+z)

যদিও আমি বর্তমানে এটি আরও গল্ফিংয়ের দিকে তাকাচ্ছি। পোলার স্থানাঙ্ক গ্রহণ করে। বিন্যাসে কল করা উচিত A(r1,θ1,r2,θ2)12উল্লেখযোগ্য পরিসংখ্যানগুলিতে নির্ভুল ভাসমান পয়েন্টের মান আউটপুট করে ।

এটি অনলাইন চেষ্টা করুন! (Ideone)

একটি সাধারণ, সরল বাস্তবায়ন যা সর্বাধিক 3 টি মূল্যের অ্যারে থেকে সর্বনিম্ন মানকে গণনা করে এবং আউটপুট দেয়:

  1. দুটি দৈর্ঘ্যের যোগফলের যোগফলের ( r1+r2) বা দুটি পয়েন্টকে সংযোগকারী চাপের দৈর্ঘ্যের মধ্যে ন্যূনতম মান যদি r1==r2 ;
  2. পার্থক্য দুই দূরত্বের মধ্যে ( abs(r1-r2)) iff θ1==θ2 (অর্থাত দুই পয়েন্ট সমরৈখিক হয়);
  3. পূর্ববর্তী 2 টি আইটেমের কোনওটি যদি যুক্ত না হয়, তবে ''পাইথন হিসাবে স্পষ্টতই একটি খালি স্ট্রিং ( ) স্ট্রিংটি কোনও সংখ্যার চেয়ে বড় হয় ;
  4. এবং দূরত্ব থেকে প্রদত্ত দুটি চূড়ান্ত মান দুটি বৃত্তের মধ্যে একটি বৃত্ত এবং একটি রশ্মি এবং তদ্বিপরীত দিয়ে ভ্রমণ করেছিল।

কেন হবে না math.pi?
ব্যবহারকারী 202729

0

ওল্ফ্রাম ভাষা (গণিত) , 47 বাইট matic

MinMax@Abs@{##}.{Min[Abs[Arg@#-Arg@#2]-1,1],1}&

এটি অনলাইন চেষ্টা করুন!

(বর্তমানের 66-বাইট উত্তরটি মারধর করে)

2 জটিল সংখ্যা হিসাবে ইনপুট নিন।

ইনপুটটি প্রতীকী হলে কিছু সমস্যা থাকতে পারে। (যেমন, Cos@2 + I Sin@2)

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