g o l f a t a n 2 2


18

কখনও কখনও এটি কার্টেসিয়ান স্থানাঙ্কগুলিকে (x,y)পোলার স্থানাঙ্কে রূপান্তর করার জন্য সত্যই লড়াই হয় (r,phi)। আপনি নিরূপণ করতে পারেন যদিও r = sqrt(x^2+y^2)বেশ সহজে, আপনি প্রায়ই ক্ষেত্রে কিছু পার্থক্য প্রয়োজন যখন কোণ গণক phiকারণ arcsin, arccosএবং arctanএবং অন্যান্য ত্রিকোণমিতিক ফাংশন সহ-ডোমেইন প্রতিটি শুধুমাত্র ধারন আছে অর্ধেক বৃত্ত।

অনেক ভাষায় আয়তক্ষেত্রাকারকে মেরু স্থানাঙ্কে রূপান্তর করার জন্য অন্তর্নির্মিত থাকে বা কমপক্ষে একটি atan2কার্য থাকে যা দেওয়া (x,y)- কোণটি গণনা করে phi

কার্য

আপনার কাজটি এমন একটি প্রোগ্রাম / ফাংশন লিখতে হবে যা দুটি (ভাসমান পয়েন্ট, উভয় শূন্য নয়) কার্টেসিয়ান স্থানাঙ্ক করে (x,y)এবং সংশ্লিষ্ট পোলার কোণকে আউটপুট দেয় phi, যেখানে phiডিগ্রি, রেডিয়েন বা গ্রেড থাকতে হবে ( গ্রেড সহ আমি গ্রেডিয়ান যা 1 / সম্পূর্ণ বৃত্তের 400), যেটি আপনার পক্ষে বেশি সুবিধাজনক।

কোণটি ধনাত্মক অভিযোজনে পরিমাপ করা হয় এবং এর জন্য আমাদের শূন্য কোণ রয়েছে (1,0)

বিস্তারিত

বিল্ট-ইনগুলিকে কোণটির গণনা ব্যবহার করতে পারেন না phiদুই স্থানাঙ্ক সহ দেওয়া atan2, rect2polar, argOfComplexNumberএবং অনুরূপ ফাংশন। তবে আপনি সাধারণ ত্রিকোণমিতিক ফাংশন এবং তাদের বিপরীতগুলি ব্যবহার করতে পারেন, এটি কেবল একটি যুক্তিই গ্রহণ করে। যে কোনও ইউনিটের প্রতীক optionচ্ছিক।

ব্যাসার্ধ rঅ নেতিবাচক হতে হবে, এবং phiসীমার মধ্যে থাকতে হবে [-360°, 360°](এটা কোন ব্যাপার না আপনি কিনা আউটপুট 270°বা -90°)।

উদাহরণ

Input       Output
(1,1)       45°
(0,3)       90°
(-1,1)      135°
(-5,0)      180°
(-2,-2)     225°
(0,-1.5)    270°
(4,-5)      308.66°

র‌্যাড / ডিগ্রিগুলিতে প্রয়োজনীয় নির্ভুলতা প্রয়োজন?
লুইস মেন্ডো

আপনি কী প্রয়োগকরণের (ফ্লোট / ডাবল / যাই হোক না কেন) উপর নির্ভর করে মেশিনের নির্ভুলতা সম্পর্কে সঠিক বলতে চাই
flawr

আমরা কি একক জটিল সংখ্যা হিসাবে ইনপুট নিতে পারি?
অ্যাডম

উত্তর:


9

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

yYy/X;0G0<?_

ফলাফল রেডিয়ানে হয়।

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

ব্যাখ্যা

এমএটিএল এর কোনও atanফাংশন নেই (এটি রয়েছে atan2, তবে এটি এই চ্যালেঞ্জের জন্য ব্যবহার করা যাবে না)। তাই আমি অবলম্বন করেছি acos

y     % Take x, y implicitly. Duplicate x onto the top of the stack
Yy    % Compute hypothenuse from x, y
/     % Divide x by hypothenuse
X;    % Arccosine (inverse of cosine function)
0G    % Push y again
0<    % Is it negative?
?_    % If so, change sign. Implicitly end conditional branch. Implicitly display

ম্যাটের কি আসলেই কোনও পরম মান অন্তর্নির্মিত নেই? যদি এটি হয়, আপনি সম্ভবত এটি প্রতিস্থাপন করতে ব্যবহার করতে পারেন 0<?_, কয়েকটি বাইট শেভ করে
জেউই

2
@ জেডউই এটির ( |) রয়েছে। তবে এখানে আমি দ্বিতীয় ইনপুট , এর চিহ্নের উপর ভিত্তি করে ফলাফলের সাইন পরিবর্তন করছি y। এছাড়াও, yহতে পারে 0, তাই আমি গুণ করতে পারি নাy/abs(y))
লুইস মেন্ডো

5

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

(x,y)=>(Math.atan(y/x)||0)+Math.PI*(x<0)

ফলাফল রেডিয়ানে হয়। সম্পাদনা: 10 টি বাইট সংরক্ষিত হয়েছে যখন আমি লক্ষ্য করেছি যে ফলাফলটি -90 ° থেকে 270 between এর মধ্যে হওয়ার অনুমতি দেওয়া হয়েছে ° এর সাথে পূর্ববর্তী সংস্করণ -Math.PI<=result<Math.PI:

(x,y)=>(Math.atan(y/x)||0)+Math.PI*(x<0)*(y>0||-1)

কি ইউনিট? দয়া করে এগুলিকে আপনার উত্তরে রাখুন।
সলোমন উকো

কিসের ||0জন্য?
l4m2

@ l4m2 মামলার জন্য x=y=0
নীল



2

জেলি , 11 বাইট (প্রতিদ্বন্দ্বী)

<0×ØP+÷@ÆṬ¥

আউটপুট রেডিয়ানগুলিতে রয়েছে। দুর্ভাগ্যক্রমে, জেলিটির বিভাগীয় পরমাণুগুলিতে একটি সাইন বাগ ছিল, প্রয়োজনীয় বাগ ফিক্সের কারণে এই উত্তরটি প্রতিযোগিতামূলক করে তুলছে।

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

কিভাবে এটা কাজ করে

<0×ØP+÷@ÆṬ¥  Main link. Left argument x. Right argument: y

<0           Compare x with 0.
  ×ØP        Multiply the resulting Boolean by Pi.
          ¥  Combine the two links to the left into a dyadic chain.
      ÷@     Divide y by x.
        ÆṬ   Apply arctan to the result.
     +       Add the results to both sides.

বাগ-ফিক্সিং কোনও উত্তরকে প্রতিদ্বন্দ্বিতা করা হিসাবে গণনা করে? অদ্ভুত মনে হচ্ছে। যদি সঠিক আচরণটি ইতিমধ্যে অনুমিত করা হয় তবে বাগফিক্সটি সম্পর্কিত নয়। (সর্বোপরি, কারও অজানা প্রান্ত-কেস ঠিক করে আপনি আর কত উত্তর জবাবদিহি করেছেন তা কে জানে?)
মারিও কার্নেইরো

@ মারিও কার্নেরিও পিপিসিজিতে, দোভাষী অনুবাদ করেন । এটি মূলত কারণ উদ্দেশ্যগুলি বিচার করা কঠিন (এবং বেশিরভাগ esolangs এর আসলে একটি সংক্ষিপ্ত ধারণা থাকে না), আপনি কোনও বাস্তবায়নের সাথে তর্ক করতে পারবেন না। নোট করুন যে দোভাষীকে পরিবর্তন করা পুরানো উত্তরের বৈধতাকে প্রভাবিত করে না। তাদের কেবলমাত্র দোভাষীর কিছু প্রকাশিত সংস্করণে কাজ করতে হবে।
ডেনিস

আমি বোঝাতে চাইছি আপনি কিছু ইনপুটটিতে পুরানো উত্তরের আচরণ পরিবর্তন করতে পারেন যা সেই সময়ে চেষ্টা করা হয়নি। পিপিসিজি কীভাবে খারাপ পরীক্ষার ঘটনাগুলি আবিষ্কারের পরে আবিষ্কার করে?
মারিও কার্নেরিও

যদি পরীক্ষার কেসগুলি অপর্যাপ্ত প্রমাণিত হয় তবে আরও পরীক্ষার কেস যুক্ত করা হয়। কেবলমাত্র পরীক্ষার পরীক্ষার ক্ষেত্রে নয়, সমস্ত বৈধ ইনপুটগুলির জন্য সমাধানগুলি আশা করা হয় expected পুনরায়: বাগ ফিক্স। আমার অনুবাদক শুধুমাত্র দ্বারা বিভাজন জন্য ভুল চিহ্ন উত্পাদিত 0 ( -1÷0দিয়েছিলেন infপরিবর্তে -inf), তাই এটি সবচেয়ে চ্যালেঞ্জ প্রভাবিত করার সম্ভাবনা কম।
ডেনিস

2

পাইথন 3, 75 67 বাইট

ডেনিসকে 8 বাইট ধন্যবাদ

from math import*
lambda x,y:pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2

আইডিয়ন!


আপনার কি লিখতে হবে andএবং or?
flawr

আমি আর কী করতে পারেন?
ফাঁস নুন

1
@ ফ্লেয়ার পাইথন কেবলমাত্র andএবং আছে or
ডেনিস

2
pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2কয়েক বাইট সাশ্রয়।
ডেনিস

4
@ ফ্লোয়ার: বিটওয়াস &অপারেটর।
ভোল্টাহ

2

এপিএল (ডায়ালগ ইউনিকোড) , 12 10 বাইট এসবিসিএস

-2 এনএনজি ধন্যবাদ।

বেনামে টাসিট ইনফিক্স ফাংশন। আলেফালফার সূত্র ব্যবহার করে । লাগে xঅধিকার আর্গুমেন্ট হিসাবে এবং yবাম আর্গুমেন্ট হিসাবে। ফলাফল রেডিয়ানে।

11○∘⍟0J1⊥,

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

,yএবং  একত্রীকরণx

0J1⊥ বেস i ডিজিট হিসাবে মূল্যায়ন করুন (যেমন y i ¹ + x i ⁰)

 যে প্রাকৃতিক লগারিদম

 তারপর

11○ এর কাল্পনিক অংশ



আপনাকে ধন্যবাদ
অ্যাডম

11○∘⍟->12○
এনজিএন

@ngn আপনি নাও ব্যবহার করতে পারেন…argOfComplexNumber
Adám

ওহ ... আমি, দুঃখিত
ngn

1

গণিত, 16 বাইট

আমি নিশ্চিত না যে Logএকটি বিল্ট-ইন হিসাবে বিবেচিত হবে যা দুটি স্থানাঙ্কের প্রদত্ত কোণ গণনা করে।

N@Im@Log[#+I#2]&

উদাহরণ:

In[1]:= N@Im@Log[#+I#2]&[1,1]

Out[1]= 0.785398

In[2]:= N@Im@Log[#+I#2]&[4,-5]

Out[2]= -0.896055

এটা একটা চালাক ধারণা! আপনি কীভাবে এই ফাংশনটি কল করবেন একটি উদাহরণ যুক্ত করতে পারেন?
flawr

1

x86 মেশিন ল্যাঙ্গুয়েজ (32 বিট লিনাক্স), 25 13 বাইট (নন-কেপটিং)

0:       55                      push   %ebp
1:       89 e5                   mov    %esp,%ebp
3:       dd 45 08                fldl   0x8(%ebp)
6:       dd 45 10                fldl   0x10(%ebp)
9:       d9 f3                   fpatan  
b:       c9                      leave
c:       c3                      ret

করার অনলাইনে এটিকে পরখ করে , নিম্নলিখিত সি প্রোগ্রাম কম্পাইল (ভুলবেন না -m32, x86_64 থাকা ফ্ল্যাগ)

#include<stdio.h>
#include<math.h>
const char j[]="U\x89\xe5\335E\b\335E\20\xd9\xf3\xc9\xc3";
int main(){
  for(double f=-1;f<1;f+=.1){
    for(double g=-1;g<1;g+=.1){
      printf("%.2f %.2f %f %f\n",f,g,atan2(f,g),((double(*)(double,double))j)(f,g));
    }
  }
}

1

জে , 10 বাইট

বেনামে টাসিট ইনফিক্স ফাংশন। আলেফালফার সূত্র ব্যবহার করে । লাগে xবাম আর্গুমেন্ট হিসাবে এবং yঅধিকার আর্গুমেন্ট হিসাবে। ফলাফল রেডিয়ানে।

11 o.^.@j.

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

j. গণনা x+ y× i

@ তারপর

^. যে প্রাকৃতিক লগারিদম

11 o. এর কাল্পনিক অংশ




0

পাইথন 3, 65 বাইট

from math import*
f=lambda x,y:atan(y/x if x else y*inf)+pi*(x<0)

এটি ডিগ্রির [-π/2, 3π/2)সমতুল্যে রেডিয়ানের আউটপুট দেয় [-90, 270)


0

অ্যাক্সিয়োম, 58 বাইট

f(a,b)==(a=0 and b=0=>%i;sign(b)*acos(a*1./sqrt(a^2+b^2)))

পরীক্ষা (আমি কেবল অ্যাকোস ব্যবহার করি) এটি রেডিয়েন্টগুলি ফিরিয়ে দেয়)

(40) -> [[a,b,f(a,b)*180/%pi] for a in [1,0,-1,-5,-2,0,4] for b in [1,3,1,0,-2,-1.5,-5] ]
   (40)
   [[1.0,1.0,45.0], [0.0,3.0,90.0], [- 1.0,1.0,135.0], [- 5.0,0.0,180.0],
    [- 2.0,- 2.0,- 135.0], [0.0,- 1.5,- 90.0],
    [4.0,- 5.0,- 51.3401917459 09909396]]
                                            Type: List List Complex Float

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