কোণগুলির গড়


15

গল্প, বা কেন আমরা এটি করছি।

কোনটিই নয়। এই ব্যায়ামটি সম্পূর্ণ অর্থহীন ... যদি আপনি স্টিফেন হকিং না হন

চ্যালেঞ্জ

কোণগুলির একটি তালিকা দেওয়া, সেই কোণগুলির গড় সন্ধান করুন। উদাহরণস্বরূপ, 91 ডিগ্রি এবং -91 ডিগ্রি গড় 180 ডিগ্রি। এটি করার জন্য আপনি কোনও প্রোগ্রাম বা ফাংশন ব্যবহার করতে পারেন।

ইনপুট

কোণ পরিমাপের প্রতিনিধিত্ব করে ডিগ্রি মানগুলির একটি তালিকা। আপনি ধরে নিতে পারেন যে তারা পূর্ণসংখ্যা হবে। এগুলি যে কোনও সুবিধাজনক বিন্যাসে ইনপুট করা যেতে পারে বা ফাংশন আর্গুমেন্ট হিসাবে সরবরাহ করা যেতে পারে।

আউটপুট

ইনপুটযুক্ত মানগুলির গড়। যদি গড়ের জন্য একাধিক মান পাওয়া যায় তবে কেবলমাত্র একটিকে আউটপুট করা উচিত। গড় যার মান হিসাবে সংজ্ঞায়িত করা হয়

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

কমানো হয় আউটপুট অবশ্যই (-180, 180] এর মধ্যে হওয়া উচিত এবং দশমিক পয়েন্টের পিছনে কমপক্ষে দুটি স্থানে সঠিক হতে হবে।

উদাহরণ:

> 1 3
2
> 90 -90
0 or 180
> 0 -120 120
0 or -120 or 120
> 0 810
45
> 1 3 3
2.33
> 180 60 -60
180 or 60 or -60
> 0 15 45 460
40
> 91 -91
180
> -89 89
0

মতো যথারীতি ন্যূনতম বাইটস সহ জেতে।

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি আলাদাভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

সমস্যাটি সম্পর্কে যে কোনও প্রশ্নের জন্য এখানে একটি চ্যাটরুম রয়েছে: http://chat.stackexchange.com/rooms/30175/room-for-average-of-angles


90, -90 180 দেওয়া উচিত নয় 91, -91 180 দিলে?
নীল

2
স্বজ্ঞাতভাবে -91 এবং 91 এর গড় হার 0 হয়, 180 নয় your 0- -91) ^ 2 => 16562. সুতরাং 180 অবশ্যই গড় হতে পারে না। আমি এখানে কি মিস করছি?
edc65

91% 360 = 91; -91% 360 = 269; (269 + 91) / 2 = 180 । কিছু মনে করবেন না, ভুল পড়া। হতে পারে? আমি এখন নিশ্চিত নই।
নীল

ঠিক আছে ধন্যবাদ. এটি কীভাবে সন্ধান করবে তা সম্পর্কে এখনও ধারণা নেই
edc65

3
আপনার পরীক্ষার কোনও ক্ষেত্রেই এখন পর্যন্ত সমস্ত অ্যাঙ্গেল মড 360 360 ° নেওয়া, তাদের গড় নিয়ে যাওয়া এবং তারপরে ফলাফলটি 180 than এর চেয়ে বেশি হলে 360 sub বিয়োগের ভুল অ্যালগরিদমকে ভঙ্গ করে না ° আপনার [89 °, −89 °] এর মতো একটি কেস যুক্ত করা উচিত, যা 0 return ফিরে আসবে °
অ্যান্ডারস কাসরগ

উত্তর:


7

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

lambda l:min([sum(((b-a)%360)**2for b in l)*len(l)-s*s,180-(180-a-s/len(l))%360]for a in l for s in[sum((b-a)%360for b in l)])[1]

এই সমস্যাটি বেশ বিভ্রান্তির সৃষ্টি করেছে বলে মনে হচ্ছে। স্বজ্ঞাতভাবে ধারণাটি হ'ল কোনও সময় কোণগুলির বৃত্তটি কাটা, বৃত্তটিকে একটি লাইনে আবদ্ধ করা, সেই লাইনের গাণিতিক গড়টি গণনা করা, এবং তারপরে ফলাফলটি আবার বৃত্তে মোড়ানো। তবে অনেকগুলি পৃথক পয়েন্ট রয়েছে যেখানে আপনি বৃত্তটি কাটা বেছে নিতে পারেন। যথেচ্ছভাবে একটি বেছে নেওয়া যথেষ্ট নয়, যেমন 0 ° বা 180 ° ° আপনাকে তাদের সকলের চেষ্টা করে দেখতে হবে এবং স্কোয়ার দূরত্বের ক্ষুদ্রতম যোগফলের মধ্যে কোনটি ফলাফল করে। আপনার সমাধান যদি এর চেয়ে উল্লেখযোগ্যভাবে কম জটিল হয় তবে এটি সম্ভবত ভুল।


1
@AndreasKaseorg আমার মনে হয় আপনি পরিবর্তন করে এক বাইট সংরক্ষণ করতে পারবেন s**2করারs*s
Ioannes

প্রশ্নে আমার মন্তব্য দেখুন।
এমএস 210

@ msh210 আপনি কেন আমার সম্পর্কে এই মন্তব্যটি বিশেষভাবে পরিচালনা করছেন তা নিশ্চিত নন। আমার সমাধান ইতিমধ্যে সেভাবে কাজ করে।
অ্যান্ডারস ক্যাসরগ

এটি এই উত্তর পোস্টের শেষ বাক্যটির আংশিক উত্তর ছিল।
msh210

4

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

lambda l:180-min(range(72000),key=lambda x:sum((180-(x/200+i)%360)**2for i in l))/200

উত্তরের 1/200একটি ডিগ্রি বৃদ্ধি সহ সমস্ত সম্ভাব্য কোণ চেষ্টা করে কেবলমাত্র দুটি দশমিক পয়েন্টের যথাযথ হওয়া দরকার উত্তরটি গ্রহণ করে । এটি আমার মেশিনে এক সেকেন্ডেরও কম সময় নেয়।

কারণ পাইথন যাক না আমাদের সুবিধামত ভাসে গাণিতিক progressions, আমরা পূর্ণ সংখ্যা যতটা সম্ভব কোণ প্রতিনিধিত্ব তালিকা [0,72000)হিসাবে একটি কোণ থেকে যা রূপান্তর (-180,180]যেমন x -> 180 - x/200। আমরা এর মধ্যে একটি পাই যা স্কোয়ার কৌণিক পার্থক্যের সর্বনিম্ন যোগফল দেয়।

এর একটি কৌণিক স্থানচ্যুতি সহ দুটি কোণের জন্য d, স্কোয়ার্ড কৌণিক দূরত্ব (-180,180]হিসাবে সমতুল্য কোণে রূপান্তর করে পাওয়া যায়180-(d+180)%360 পরে স্কোয়ারিং পাওয়া যায়। সুবিধার্থে, প্রদত্ত কোণ x/200ইতিমধ্যে 180ডিগ্রি দ্বারা অফসেট ।


এর ইনক্রিমেন্ট ব্যবহার 1/200করা আসলে সমস্যাযুক্ত। পরীক্ষার ক্ষেত্রে [1, 3, 3], এই সমাধানটি ফিরে আসে 2.335এবং 2.34সঠিক উত্তরটি হওয়া উচিত বলে গোলাকার হয় 2.33
জোয়েল

@ জোয়েল আমি নিশ্চিত নই আপনি কোথা থেকে রাউন্ডিং পাচ্ছেন, মনে হচ্ছে দশমিক অঙ্কগুলি 2.33উদাহরণটিতে ঠিক আছে। যাই হোক, পরিবর্তন হবে 200থেকে 400বা 2000(এবং 72000সঙ্গতিপূর্ণভাবেই) এটি কাজ করা rounding সত্ত্বেও? এছাড়াও, আবার এই পুরানো সমস্যাটির দিকে তাকিয়ে আমি মনে করি আমি আরও ভাল উপায় দেখতে পাচ্ছি।
xnor

0.01মি=একটিRমিআমিএনএক্স(এক্স)[গুলি,গুলি+ +0.01](গুলি)<(গুলি+ +0.01)|মি-গুলি|<|মি-গুলি+ +0.01|Rতোমার দর্শন লগ করাএন(মি)=গুলি(গুলি)>(গুলি+ +0.01)(গুলি)=(গুলি+ +0.01)round(m)=s+0.01

আপনার পরীক্ষা করার জন্য এখানে একটি টিআইও লিঙ্ক
জোয়েল

ওহ, আমি ঠিক বুঝতে পেরেছি যে আপনি ঠিক বলেছেন। যদি সঠিক উত্তরটি হয় 2.333...এবং আপনার প্রোগ্রামটি ফিরে আসে 2.335তবে গোল না করে দুটি দশমিক স্থান না হওয়া পর্যন্ত এটি সঠিক। তার জন্য দুঃখিত।
জোয়েল

3

অক্টেভ, 97 95 বাইট

p=pi;x=p:-1e-5:-p;z=@(L)sum((p-abs(abs(x-mod(L,360)*p/180)-p)).^2);@(L)x(z(L)==min(z(L)))*180/p

এটি একটি বেনামি ফাংশন তৈরি করে যা কেবলমাত্র একটি গ্রিডে প্রদত্ত ফাংশনটির সর্বনিম্ন সন্ধান করে যা যথেষ্ট পরিমাণে ঠিক। ইনপুট হিসাবে ফাংশন কলাম ভেক্টর গ্রহণ করে, যেমন [180; 60; -60]। পরীক্ষার জন্য আপনাকে ফাংশনটির একটি নাম দেওয়া দরকার। সুতরাং আপনি যেমন উপরের কোডটি চালাতে পারেন এবং তারপরে ব্যবহার করতে পারেন ans([180, 60; -60])


হ্যাঁ, এটা ফেরৎ 180.
flawr

2

জাভাস্ক্রিপ্ট ES6, 87 বাইট

with(Math)f=(...n)=>(t=>180/PI*atan(t(sin)/t(cos)))(f=>n.reduce((p,c)=>p+=f(c*PI/180)))

উদাহরণ রান (ফায়ারফক্সে পরীক্ষিত):

f(-91,91)     // -0
f(-90,90)     // 0
f(0,-120,120) // 0
f(0,810)      // 44.999999999999936

কাজ চলছে

এই সংস্করণটি গড়-সবকিছু-তার-পরে-কর-মডিউলার-গণিতের তুলনায় কিছুটা ভিন্ন দৃষ্টিভঙ্গি নেয়। পরিবর্তে, কোণগুলি ভেক্টরগুলিতে রূপান্তরিত হয়, ভেক্টরগুলি যুক্ত হয় এবং ফলস্বরূপ ভেক্টরের কোণটি পরে গণনা করা হয়। দুর্ভাগ্যক্রমে, এই সংস্করণটি ট্রিগের সাথে খুব অস্থির এবং আমি একটি মডুলার-গণিত সংস্করণে কাজ করব।


1
f(-91,91)180 এ ফিরে আসা উচিত
TheNumberOne

1
এমনকি এটি কার্যকরভাবে প্রয়োগ করা হলেও, একটি ভেক্টর সংযোজন পদ্ধতি নির্দিষ্ট ফলাফলটি গণনা করতে পারে না। ভেক্টর সংযোজন কৌণিক পার্থক্যের স্কোয়ারের যোগফলকে হ্রাস করার পরিবর্তে কৌণিক পার্থক্যের কোসাইনগুলির যোগফলকে সর্বাধিক করে তোলে।
অ্যান্ডারস কাসরগ

2

সিজেম,  44  40 বাইট

Ie3_2*,f-:e-2{ea:~f{-P*180/mcmC2#}:+}$0=

অনলাইনে এটি ব্যবহার করে দেখুন সিজেএম ইন্টারপ্রেটারে

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

$ for i in 1\ 3 90\ -90 0\ -120\ 120 0\ 810 1\ 3\ 3 180\ 60\ -60 0\ 15\ 45\ 460 91\ -91 -89\ 89
> do cjam <(echo 'Ie3_2*,f-:e-2{ea:~f{-P*180/mcmC2#}:+}$0=') $i
> echo
> done
2.0
180.0
0.0
45.0
2.33
60.0
40.0
180.0
0.0

ধারণা

আমরা 0.01 আকারের পদক্ষেপগুলি দিয়ে -179.99 থেকে 180.00 পর্যন্ত সমস্ত সম্ভাব্য গড়ের জন্য বিচ্যুতি গণনা করি এবং সর্বনিম্ন বিচ্যুতি সহ একটি নির্বাচন করি।

এই উদ্দেশ্যে, আমরা কৌণিক দূরত্ব ডিগ্রি বা রেডিয়ান গ্রহণ করি তা বিবেচনা করে না। পার্থক্য ম্যাপিং পরিবর্তে δ মধ্যে ইনপুট থেকে কোণ এবং সম্ভাব্য গড় [0.360 °) এবং শর্তসাপেক্ষে থেকে ফলাফলের বিয়োগ 180 ° , আমরা করতে পারেন কেবল ক্যালকুলেট arccos (কোসাইন্ (πδ ÷ 180 °)) , যেহেতু কোসাইন্ উভয় পর্যায় এবং এমনকি হয়, এবং আরকোসগুলি সর্বদা [0, π) এ একটি মান দেয়

কোড

Ie3        e# Push 18e3 = 18,000.
_2*        e# Copy and multiply by 2. Pushes 36,000.
,          e# Push the range [0 ... 35,999].
f-         e# Subtract each element from 18,000. Pushes [18,000 ... -17,999].
:e-2       e# Divide each element by 100. Pushes [180.00 ... -179.99].
{          e# Sort; for each element A of that array:
  ea:~     e#   Push and evaluate the array of command-line arguments.
  f{       e#   For each input angle, push A and the angle; then:
    -      e#     Subtract the angle from A.
    P*180/ e#     Convert from degrees to radians.
    mcmC   e#     Apply cos, then arccos to the result.
    2#     e#     Square.
  }        e#
  :+       e#   Add the squares. This calculates the deviation.
}$         e# A's with lower deviations come first.
0=         e# Select the first element of the sorted array.

1

ম্যাটল্যাব, 151

p=360;n=mod(input(''),p);a=0:0.01:p;m=[];for b=a e=b-n;f=mod([e;-e],p);c=min(f);d=c.^2;m=[m sum(d)];end;[~,i]=min(m);a=a(i);if a>180 a=a-p;end;disp(a);

ঠিক আছে, সুতরাং যতক্ষণ না আমি আসলে পদ্ধতিটি কী তা বুঝতে পারি, এটিই আমি সামনে এসেছি। এটি হ্যাকের সামান্য অংশ, তবে প্রশ্নটি হিসাবে উত্তরটি উত্তরটি অবশ্যই সঠিকভাবে 2.dp হওয়া উচিত এটির উচিত।

আমি মূলত 0 এবং 360 (0.01 ইনক্রিমেন্টে) এর প্রতিটি কোণ পরীক্ষা করি এবং তারপরে সেই প্রতিটি কোণগুলির জন্য প্রশ্নের সূত্রটি সমাধান করি। তারপরে সবচেয়ে ছোট যোগফলের সাথে কোণটি বাছাই করা হয় এবং -180 থেকে 180 ব্যাপ্তিতে রূপান্তর করা হয়।


কোডটি অষ্টাভের সাথে হওয়া উচিত । আপনি অনলাইন দোভাষী দ্বারা এটি চেষ্টা করতে পারেন


1 °, 183 এর ফলাফল 9288 ° হতে হবে, 92 ° নয় °
অ্যান্ডারস কাসরগ

অ্যান্ডারস ক্যাসরগ এখনই আবার চেষ্টা করুন।
টম কার্পেন্টার

না, কিছু মনে করবেন না। আবার অঙ্কন বোর্ডে ফিরে যান ...
টম কার্পেন্টার

1

জাভাস্ক্রিপ্ট (ES6) 138

একটি অ্যালগরিদমের অবাস্তব ধারণা না পেয়ে, এটি 2 ডিজিটের যথার্থতার সাথে (-179.99 থেকে 180.00) সমস্ত সম্ভাব্য মান চেষ্টা করে। বেশিরভাগ ক্ষেত্রেই পরীক্ষার কেসগুলি সহ দ্রুত

নীচের স্নিপেটটি একটি ইকামাস্ক্রিপ্ট comp অনুবর্তী ব্রাউজারে চালনা পরীক্ষা করুন (তীর ফাংশন এবং ডিফল্ট প্যারামিটারগুলি প্রয়োগ করা হচ্ছে - এএফআইএফ ফায়ারফক্স)

A=l=>(D=(a,b,z=a>b?a-b:b-a)=>z>180?360-z:z,m=>{for(i=-18000;i++<18000;)l.some(v=>(t+=(d=D(v%360,i/100))*d)>m,t=0)||(m=t,r=i)})(1/0)||r/100

// Test
console.log=x=>O.innerHTML+=x+'\n'

;[[1,3],[89,-89],[90,-90],[91,-91],[0,120,-120],[0,810],[1,3,3],[180,60,-60],[0,15,45,460],[1,183]]
.forEach(t=>console.log(t+' -> '+A(t)))

// Less golfed

A=l=>{
  D=(a,b,z=a>b?a-b:b-a) => z>180?360-z:z; // angular distance
  m=1/0;
  for(i=-18000;i++<18000;) // try all from -179.99 to 180
  {
    t = 0;
    if (!l.some(v => (t+=(d=D(v%360,i/100))*d) > m))
    {
      m = t;
      r = i;
    }  
  }  
  return r/100;
}
<pre id=O></pre>

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