ঘুরানো নম্বর গণনা করুন


15

দ্য ঘুর সংখ্যা নেট বামাবর্তে বিপ্লব একটি পর্যবেক্ষক একটি প্রদত্ত বদ্ধ পথ অবলম্বন করেছি আবশ্যক পূর্ণসংখ্যা সংখ্যা। নোট করুন যে কোনও ঘড়ির কাঁটার বিবর্তনগুলি ঘোরের সংখ্যার দিকে নেতিবাচক গণনা করে। পথটি নিজের ছেদ করার অনুমতি দেওয়া হয়েছে।

কিছু উদাহরণ (নির্লজ্জভাবে উইকিপিডিয়া থেকে নেওয়া) নীচে দেওয়া হয়েছে:

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

আপনার লক্ষ্যটি কোনও নির্দিষ্ট পথের জন্য ঘুরানো নম্বর গণনা করা।

ইনপুট

পর্যবেক্ষক ধারণা করা হয় উত্স হতে হবে (0,0)

ইনপুটটি কোনও পছন্দসই ইনপুট উত্স থেকে পয়েন্টের সীমাবদ্ধ ক্রম (পূর্ণসংখ্যার সংখ্যার জুটির মতো) যা খণ্ড-ভিত্তিক লিনিয়ার পাথ বর্ণনা করে। আপনি চাইলে এটি পূর্ণসংখ্যার 1D ক্রমানুসারে সমতল করতে পারেন এবং সমস্ত y স্থানাঙ্ক / ভাইস-বিপরীত পূর্বে সমস্ত এক্স কোঅর্ডিনেট নিতে ইনপুটটি সুইজল করতে পারেন। আপনি জটিল নম্বর হিসাবে ইনপুটটিও নিতে পারেনa+b i । পাথটি নিজে থেকে ছেদ করতে পারে এবং শূন্য দৈর্ঘ্যের অংশ থাকতে পারে। প্রথম পয়েন্টটি পাথের শুরু এবং ধনাত্মক এক্স অক্ষের কোথাও মিথ্যা বলে মনে করা হয়।

পথের কোনও অংশই মূলটিকে ছেদ করবে না। পথটি সর্বদা বন্ধ থাকবে (অর্থাত্ প্রথম এবং হারানো পয়েন্ট একই) আপনার কোড হয় হয় শেষ পয়েন্ট বোঝায় বা এটি অন্তর্ভুক্ত করা প্রয়োজন।

উদাহরণস্বরূপ, আপনার পছন্দ অনুসারে উভয় ইনপুট একই বর্গক্ষেত্র নির্দিষ্ট করে:

অন্তর্নিহিত শেষ পয়েন্ট

1,0
1,1
-1,1
-1,-1
1,-1

সুস্পষ্ট শেষ পয়েন্ট

1,0
1,1
-1,1
-1,-1
1,-1
1,0

আউটপুট

আউটপুটটি বাতাসের সংখ্যাটির জন্য একক পূর্ণসংখ্যা। এটি যে কোনও উত্সের (রিটার্ন মান, স্টডআউট, ফাইল, ইত্যাদি) হতে পারে।

উদাহরণ

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

1. বেসিক পরীক্ষা

1,0
1,1
-1,1
-1,-1
1,-1
1,0

আউটপুট

1

2. পুনরাবৃত্তি পয়েন্ট পরীক্ষা

1,0
1,0
1,1
1,1
-1,1
-1,1
-1,-1
-1,-1
1,-1
1,-1
1,0

আউটপুট

1

3. ক্লকওয়াইজ পরীক্ষা

1,0
1,-1
-1,-1
-1,1
1,1
1,0

আউটপুট

-1

4. পরীক্ষা বাইরে

1,0
1,1
2,1
1,0

আউটপুট

0

5. মিশ্র ঘুরানো

1,0
1,1
-1,1
-1,-1
1,-1
1,0
1,-1
-1,-1
-1,1
1,1
1,0
1,1
-1,1
-1,-1
1,-1
1,0
1,1
-1,1
-1,-1
1,-1
1,0

আউটপুট

2

স্কোরিং

এটি কোড গল্ফ; সংক্ষিপ্ততম কোড জয় স্ট্যান্ডার্ড লুফোলস প্রযোজ্য। আপনি যে কোনও বিল্টিন ফাংশন এতক্ষণ ব্যবহার করতে পারেন কারণ সেগুলি বিশেষভাবে ঘুরানো নম্বর গণনা করার জন্য ডিজাইন করা হয়নি।


2
ইনপুট জটিল সংখ্যার হিসাবে নেওয়া যেতে পারে (বা তাদের কোনও স্ট্রিং উপস্থাপনা, যেমন "1-i"বা "1-1i"?)
স্তর নদী সেন্ট

হ্যাঁ, যে কোনও ধরণের জুড়ি অনুমোদিত।
helloworld922

উত্তর:


10

ES6, 83 বাইট

a=>a.map(([x,y])=>r+=Math.atan2(y*b-x*c,y*c+x*b,b=x,c=y),b=c=r=0)&&r/Math.PI/2

জটিল সংখ্যা হিসাবে ব্যাখ্যা করা হয় যা পয়েন্ট জোড় জোড় একটি অ্যারে ইনপুট হিসাবে নেয়। প্রতিটি পয়েন্টকে একটি কোণে রূপান্তরিত করার পরিবর্তে, পয়েন্টগুলি পূর্ববর্তী বিন্দু দিয়ে ভাগ করা হয়, যা ম্যাথ.টান 2 তারপরে -π এবং between এর মধ্যে একটি কোণে রূপান্তর করে, এইভাবে স্বয়ংক্রিয়ভাবে নির্ধারণ করে যে কোন পথে পথটি ঘোরানো হচ্ছে। কোণগুলির যোগফলটি ঘুরানো সংখ্যার 2π গুণ হয়।

যেহেতু ম্যাথ.টান 2 এর তর্কগুলির স্কেল সম্পর্কে চিন্তা করে না আমি তার z / w = (z * w*) / (w * w*)পরিবর্তে আসলে পুরো বিভাগটি সম্পাদন করি না আমি কেবল প্রতিটি পয়েন্টটি পূর্ববর্তী পয়েন্টের জটিল সংযোগ দিয়ে গুণ করি by

সম্পাদনা করুন: @ এডক 65 এর জন্য 4 টি বাইট সংরক্ষণ করা হয়েছে।


সুন্দর এবং দ্রুত। এবং আমি আপনার গণিত বুঝতে পারি না। তবে reduceপ্রায় সবসময়ই খারাপ পছন্দ।
edc65

a=>a.map(([x,y])=>r+=Math.atan2(y*b-x*c,y*c+x*b,b=x,c=y),b=c=r=0)&&r/Math.PI/2পরিবর্তে মানচিত্র ব্যবহার বা হ্রাস। আপনার যাইহোক আমার ভোট আছে
edc65

@ edc65 ধন্যবাদ; আমি ব্যবহার করেছি reduceকারণ আমি বুঝতে পারি নি যে ম্যাথ.টান 2 (0,0) 0 হয় (ভাল, এটি আপনার 0s এর মধ্যে কোনওটি আসলে -0 হয় কিনা তার উপর নির্ভর করে) গণিতগুলি জটিল বিভাগের উপর ভিত্তি করে, যা সাধারণত হিসাবে গণনা করা হয় z / w = z * w* / |w|², তবে আমি প্রস্থের বিষয়ে চিন্তা করি না, সুতরাং এটি জটিল সংঘবদ্ধ দ্বারা কেবল গুণ। এছাড়াও কিছুটা বিভ্রান্তিকরভাবে ম্যাথ.টান 2 আর্গুমেন্ট গ্রহণ করে (y, x)।
নীল

আমি স্বীকার করি আমি কোডটি বুঝতে পারি না তবে যদি আপনার বিবরণটি সঠিক হয় তবে আমি বিশ্বাস করি আপনার উত্তরটি ভুল। প্রকৃতপক্ষে, যদি আপনার কাছ থেকে পয়েন্ট ইনপুট এই পথ (আমি বৃহত্তর স্বচ্ছতার জন্য একটি ছবি দিচ্ছি) তাহলে ঘুর 1 নম্বর, যখন আপনার সমস্যা would আউটপুট 2.
Wojowu

@ ভোজাউউ দুঃখিত, বহুভুজের বাহ্যিক কোণগুলির চেয়ে মূল থেকে প্রাপ্ত পয়েন্টগুলির মধ্যে কোণটি বোঝাতে চেয়েছি, সুতরাং আপনার ছবিটির জন্য আমার কোডটি অবশ্যই উত্তরটি 1 হিসাবে গণনা করা উচিত
নীল

3

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

X/Z/0)2/YP/

ইনপুটটি শেষ পয়েন্ট সহ জটিল সংখ্যার ক্রম।

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

ব্যাখ্যা

বেশিরভাগ কাজ Z/ফাংশন ( unwrap) দ্বারা সম্পন্ন হয় , যা রেডিয়ানের কোণগুলিকে আনপ্রেপ করে তাদের 2 * পাই পরিপূরক থেকে পাই বা তার সমান বৃহত্তর জাম্প পরিবর্তন করে।

X/       % compute angle of each complex number
Z/       % unwrap angles
0)       % pick last value. Total change of angle will be a multiple of 2*pi because 
         % the path is closed. Total change of angle coincides with last unwrapped
         % angle because the first angle is always 0
2/       % divide by 2
YP/      % divide by pi

1
এমএটিএল এবং জেলি ইদানীং বেশিরভাগ ম্যাথিক চ্যালেঞ্জগুলি বেঁধে রেখেছে। আমি মুগ্ধ, আপনি ডেনিসের ভাষা প্রায় মেটা-গল্ফ করেছেন ...
ETH প্রোডাকশনগুলি

আপনার প্রিয় শব্দের জন্য ধন্যবাদ! হ্যাঁ, তারা সাম্প্রতিক কয়েকটি চ্যালেঞ্জের সাথে আবদ্ধ হয়েছে। অন্যদিকে, আমি বেশ কয়েকটি সমস্যা দেখেছি যেখানে জেলির বাইট গণনা এমএটিএল হিসাবে প্রায় অর্ধেক :
লুইস মেন্ডো

2

জেলি, 11 বাইট

æAI÷ØPæ%1SH

Y- স্থানাঙ্কের তালিকা এবং এক্স-স্থানাঙ্কের একটি তালিকা হিসাবে এটি ইনপুট নেয়।

এখানে চেষ্টা করুন


1

পাইথন, 111

এখন পর্যন্ত দীর্ঘতম উত্তর। আমার প্রেরণাগুলি হ'ল 1) অজগর শিখুন এবং 2) সম্ভবত এটি অজগরকে পোর্ট করুন।

from cmath import *
q=input()
print reduce(lambda x,y:x+y,map(lambda (x,y):phase(x/y)/pi/2,zip(q[1:]+q[:1],q)))

জটিল সংখ্যার একটি তালিকা হিসাবে ইনপুট দেওয়া হয়।

Ideone।

আমি মনে করি পদ্ধতিটি ES6 উত্তরের অনুরূপ।

2 টি জটিল সংখ্যা যখন গুণিত হয় তখন পণ্যের আর্গুমেন্ট বা পর্ব হ'ল দুটি সংখ্যার যুক্তি বা পর্বের যোগফল। সুতরাং যখন একটি জটিল সংখ্যা অন্য দ্বারা বিভক্ত হয়, তখন ভাগফলের পর্ব হ'ল সংখ্যা এবং ডিনোমিনেটরের পর্যায়গুলির মধ্যে পার্থক্য। সুতরাং আমরা প্রতিটি পয়েন্ট এবং পরবর্তী পয়েন্টের জন্য অতিক্রমকৃত কোণ গণনা করতে পারি। এই কোণগুলি যোগ করুন এবং 2π দ্বারা ভাগ করুন প্রয়োজনীয় বাতাসের নম্বর দেয়।

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