এই বহুভুজের ক্ষেত্রফল কত?


19

বহুভুজের ক্ষেত্রফল গণনা করুন।

এই জুতার অ্যালগরিদম ভিডিও দ্বারা অনুপ্রাণিত

কার্য

আপনার কাজটি এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা বহুভুজটির ক্ষেত্রফল গণনা করে। প্রোগ্রাম বা ফাংশন মেটাতে ডিফল্ট সংজ্ঞা অনুযায়ী সংজ্ঞায়িত করা হয়।

ইনপুট

আপনি বহুভুজের প্রতিটি শীর্ষের X এবং Y স্থানাঙ্ক পাবেন। আপনি ইনপুটটি টিপলস ( [[x1, y1], [x2, y2], etc]), একটি ম্যাট্রিক্স বা একটি সমতল তালিকা ( [x1, y1, x2, y2, etc]) এর তালিকা হিসাবে নিতে পারেন । ধারণকারী দুই তালিকা xএবং yস্থানাঙ্ক যথাক্রমে পাশাপাশি অনুমতি দেওয়া হয়। শিখরগুলি ঘড়ির কাঁটার বিপরীতে গণনা করা হয় এবং প্রথম প্রান্তটি প্রদত্ত শেষ প্রান্তের সমান, সুতরাং বহুভুজটি বন্ধ করে দেওয়া হয়।

আপনি যদি চান তবে আপনি শেষ প্রান্তিক চিহ্ন ছাড়াই ইনপুট নিতে পারেন (সুতরাং প্রতিটি স্থানাঙ্ক মাত্র একবারে পান)।

আপনি ধরে নিতে পারেন যে বহুভুজগুলির কিনারা ছেদ করে না। আপনি এটিও ধরে নিতে পারেন যে সমস্ত অনুভূমিকের পূর্ণসংখ্যার স্থানাঙ্ক রয়েছে।

আউটপুট

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

বিজয়ী মানদণ্ড

সবচেয়ে কম কোড জয়!

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

[[4,4],[0,1],[-2,5],[-6,0],[-1,-4],[5,-2],[4,4]]
55

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

[[1,1],[0,1],[1,0],[1,1]]
0.5
1/2

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


ইনপুট কি [x1, x2, x3], [y1, y2, y3]অনুমোদিত?
প্রোগ্রামার

@ প্রোগ্রামার ৫০০০ এবং মার্টিন ইন্দর, হ্যাঁ, আমি এটিকে সম্পাদনা করব :)
জেএডি

আমি সম্মত, পুনরায় খুলতে ভোট দিয়েছি।
প্রোগ্রামার

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

উত্তর:


13

জেলি ,  8  6 বাইট

-1 Emigna করার বাইট ধন্যবাদ (অপ্রয়োজনীয় , ÆḊ2 এর একটি বাম-গভীরতা আছে)
-1 (অর্ধেক, Emigna করার বাইট ধন্যবাদ, আবার Hযাও, ভাসছে বিন্দু কোন প্রয়োজন ÷2)

ṡ2ÆḊSH

একটি মোনাডিক লিঙ্ক উদাহরণ অনুসারে (এক পুনরাবৃত্তির সাথে) উল্টোদিকে ঘড়ির কাঁটার দিকের ফ্যাশনে জোড় স্থানাঙ্কের একটি তালিকা নিয়ে এবং অঞ্চলটি ফিরিয়ে আনছে।

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

কিভাবে?

ভিডিওতে বর্ণিত যেমন জুতোর অ্যালগরিদম প্রয়োগ করা হয় (যা আমি অন্যদিনেও দেখতে পেয়েছি!)

ṡ2ÆḊSH - Link: list of [x,y] coordinate pairs anticlockwise & wrapped, p
ṡ2     - all overlapping slices of length 2
  ÆḊ   - determinant (vectorises)
    S  - sum
     H - halve

দ্বিতীয় টেস্টে-কেস আয় `-0.5` আমার জন্য হে
JAD

ওহ, আমাকে এটি পরীক্ষা করে দেখতে হবে ...
জোনাথন অ্যালান

কারণ এটি [x,y]স্থানাঙ্ক হিসাবে কাউন্টার ক্লকওয়াইসের পরিবর্তে ক্লকওয়াইজ দেওয়া হয়। একটি ইনপুট [[1,1],[0,1],[1,0],[1,1]]ফিরে আসবে a 0.5
জোনাথন অ্যালান

1
ডি: Woops, আমি সম্পাদনা করব
JAD

1
এছাড়াও, এর Hপরিবর্তে÷2
এমিগিনা

29

গণিত, 13 বাইট

Area@*Polygon

এটি আরও তুচ্ছ পেতে পারে?
মিঃ এক্সকোডার

5
@ মিঃ এক্সকোডার শিওর
মার্টিন ইন্ডার

ও_ও - আমি আক্ষরিক অর্থেই মন খারাপ ...
মিঃ এক্সকডার

3
এটা আপনার জন্য ম্যাথমেটিকা। প্রতিটি অনুমেয় জিনিস ভাষাতেই নির্মিত।
ব্রায়ান মিন্টন


16

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

@ রিককে লক্ষ্য করার জন্য ধন্যবাদ যে, আমাদের যদি সার্বক্ষণিক দিকের বিভাজন অনুসারে বাছাইয়ের গ্যারান্টি দেওয়া থাকে এবং 20 বাইট সাশ্রয় করে ইনপুট হিসাবে একটি সমতল তালিকা নেওয়ার পরামর্শ দেওয়ার জন্য আমাদের নিখুঁত মানের প্রয়োজন হয় না!

সর্বশেষ প্রান্তিক সহ, উলম্বের সমতল তালিকা হিসাবে ইনপুট নেয়।

f=([x,y,...a])=>1/a[0]?x*a[1]/2-y*a[0]/2+f(a):0

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

কিভাবে?

n

area=|(x0y1y0x1)+(x1y2y1x2)++(xn1y0yn1x0)2|


খুব চিত্তাকর্ষক! আপনি এটি ব্যাখ্যা করতে পারেন কিভাবে এটি কাজ করে?
রুগনির

দ্বিতীয় পরীক্ষার মামলার শিখরগুলি ভুলভাবে অর্ডার করা হয়েছিল। অ্যাবসগুলির প্রয়োজনীয় হওয়া উচিত নয়।
রিক

আপনি ফ্ল্যাট তালিকায় স্যুইচিং করে 7 বাইটও বাঁচাতে পারবেন:a=>(g=([x,y,...a])=>1-a?0:x*a[1]-y*a[0]+g(a))(a)/2
রিক করুন

@ রিক ঠিক - অ্যাবস দরকার হয় না। এটি ছাড়াই সূত্রটি স্বাক্ষরিত অঞ্চলটি গণনা করে, যা ইতিবাচক কারণ কারণ উল্টো দিকগুলি ঘড়ির কাঁটার বিপরীতে ক্রমে দেওয়া হয়।
অ্যাঙ্গস

@ রিক ধন্যবাদ! আপডেট হয়েছে ... প্রায় 10 মাস পরে: /
আরনৌল্ড

7

আর, 54 52 বাইট

pryr::f({for(i in 2:nrow(x))F=F+det(x[i-1:0,]);F/2})

যা ফাংশন মূল্যায়ন:

function (x) 
{
    for (i in 2:nrow(x)) F = F + det(x[i - 1:0, ])
    F/2
}

পূর্বনির্ধারিত ব্যবহার করে F = FALSE = 0। লিঙ্কযুক্ত ভিডিওতে জুতার অ্যালগরিদমকে কার্যকর করে :)

-2 বাইট জিউসেপ্পিকে ধন্যবাদ


i+-1:0সারি সূচক হিসাবে -1 বাইট
জিউসেপ

পছন্দ করুন আমিও অপসারণ করব +;)
জেএডি

6

পাইথন 3 , 72 71 বাইট

from numpy import*
g=lambda x,y:(dot(x[:-1],y[1:])-dot(x[1:],y[:-1]))/2

মন্তব্যে এটি অনুমোদিত হিসাবে দুটি তালিকা নেয় lists

x = [x0,x1,x2, ...]
y = [y0,y1,y2, ...] 

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

এটি মূলত জুতার-সূত্রের বাস্তবায়ন । আপনি কি এমন গল্ফের জন্য প্লাস পয়েন্ট পেতে পারেন যা আপনি বাস্তবে বাস্তবায়ন করবেন? : ডি

-1, পিছনে কোনও জায়গার দরকার নেই x,y:



দুটি তালিকাগুলি নেওয়া এখন প্রশ্নের
শিরোনামেও

@ জারকো ডাবডেলডাম উহ, আমি কেবল দেখেছি, এটির ক্ষেত্রটি আউটপুট করতে হবে। এই সমাধানটি বর্তমানে কেবল অঞ্চলটি ফিরিয়ে দেয়। এটিও কি অনুমোদিত, নাকি এটি মুদ্রিত হবে?
পি। সিহর

একটি ফাংশন একটি মানকে আউটপুট হিসাবে গণনা করে :)
জাদ

আমি মনে করি যে পাইথন দিয়ে আপনাকে ফাংশনটির নামও দিতে হবে না, তাই শুরু lambda x,y:করা ঠিক।
জেএডি

@ জারকো ডাবডেলডাম কি প্রতিটি ভাষার জন্য কোথাও নিয়ম আছে?
পি। সিহর


4

জেএস (ইএস 6), 98 95 94 93 88 86 82 81 77 73 বাইট

(X,Y)=>{for(i in X){a+=(X[i]+X[i-1])*(Y[i]-Y[i-1]);if(!+i)a=0}return a/2}

মত ইনপুট নেয় [x1, x2, x3], [y1, y2, y3]এবং পুনরাবৃত্তি সমন্বিত জুটি এড়িয়ে যায়।

-3 বাইটস @ জারকোডাবল্ডামকে ধন্যবাদ thanks

-4 বাইটস @ জারকোডাবল্ডামকে ধন্যবাদ thanks

-1 বাইট @ জাচারিটি ধন্যবাদ

-4 বাইটস @ জাচারিটিকে ধন্যবাদ

-4 বাইটস @ রিককে ধন্যবাদ


3

জে, 12 বাইট

ইনপুট ধরে নেওয়া 2 উপাদান তালিকার একটি তালিকা (যেমন, একটি সারণী)

-:+/-/ .*2[\
  • 2[\ - এটিকে জুতো এক্সে বিভক্ত করে, অর্থাত্ 4 টি এলিমের ওভারল্যাপিং স্কোয়ার
  • -/ .* - প্রতিটি নির্ধারক
  • +/ - যোগফল
  • -: - 2 দ্বারা ভাগ করুন

যদি আমরা একক তালিকা হিসাবে ইনপুটটি পাই তবে আমাদের প্রথমে একটি টেবিলের রূপান্তর করতে হবে, আমাদের 20 বাইট দেওয়া:

-:+/-/ .*2[\ _2&(,\)

1
"ধরে নিচ্ছি ইনপুটটি 2 উপাদান তালিকার একটি তালিকা (যেমন একটি টেবিল)" এটি অনুমোদিত is :)
জেএড

3

এমএস-এসকিউএল, 66 বাইট

SELECT geometry::STPolyFromText('POLYGON('+p+')',0).STArea()FROM g

এমএস এসকিউএল ২০০ and এবং উচ্চতর সমর্থন ওপেন জিওপ্যাটিয়াল কনসোর্টিয়াম (ওজিসি) -মানুষিক স্থানিক ডেটা / ফাংশন, যার আমি এখানে সুবিধা নিচ্ছি।

ইনপুট ডেটা ক্ষেত্র মধ্যে সংরক্ষিত হয় পি পূর্ব বিদ্যমান টেবিলের , আমাদের ইনপুট মান অনুযায়ী

ইনপুট একটি পাঠ্য ক্ষেত্র যা নিম্নলিখিত ফর্ম্যাটে অর্ডারযুক্ত জোড়গুলি সহ: (4 4,0 1,-2 5,-6 0,-1 -4,5 -2,4 4)

এখন কেবল মজা করার জন্য, আপনি যদি আমার ইনপুট টেবিলটিকে ওপেন জিওপ্যাটিয়াল কনসোর্টিয়াম-স্ট্যান্ডার্ড জ্যামিতি অবজেক্টগুলিকে (কেবলমাত্র পাঠ্য ডেটার পরিবর্তে) ধরে রাখার অনুমতি দেন তবে তা প্রায় তুচ্ছ হয়ে ওঠে:

--Create and populate input table, not counted in byte total
CREATE TABLE g (p geometry)
INSERT g VALUES (geometry::STPolyFromText('POLYGON((5 5, 10 5, 10 10, 5 5))', 0))

--23 bytes!
SELECT p.STArea()FROM g


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