মোটামুটি পিজ্জা ভাগ করে নেওয়া


13

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

দিকনির্দেশ

একটি প্রোগ্রাম লিখুন যা বৃত্তাকার পিজ্জাতে পেপারোনিসের অবস্থানের তালিকা এবং কতগুলি টুকরোটি তৈরি করা উচিত তা দিয়ে পিজ্জাটি কাটা উচিত এমন কোণগুলির একটি তালিকা বের করে দেয় যাতে প্রতিটি টুকরোতে একই পরিমাণে পেপারোনি থাকে এটা।

  • পিজ্জার একটাই শীর্ষস্থান রয়েছে: পেপারিণী।
  • আপনার বন্ধুরা তাদের স্লাইসের আকারের বিষয়ে চিন্তা করে না, কেবল কোনও পেপারনি থেকে তাদের প্রতারণা করা হয় না।
  • পিজ্জা হ'ল উত্স (0, 0)এবং ব্যাসার্ধের1 কেন্দ্রিক একটি বৃত্ত ।
  • পিপারাজনিস এমন বৃত্ত যা কেন্দ্র যেখানে সেখানে ইনপুট বলে যে সেগুলি কেন্দ্রিক এবং এর ব্যাসার্ধ রয়েছে0.1
  • পূর্ণসংখ্যা হিসাবে ইনপুট নিন যা তৈরি করা টুকরোগুলির সংখ্যা এবং অর্ডারযুক্ত জোড়গুলির একটি তালিকা যা কার্টেসিয়ান সমন্বয় সিস্টেমে পিপারোনিসের অবস্থানের প্রতিনিধিত্ব করে represents (যে কোনও যুক্তিসঙ্গত বিন্যাসে)
  • আউটপুটটি রেডিয়ানে প্রদত্ত কোণগুলির একটি তালিকা হতে হবে যা পিজ্জার ( পরিসীমাতে0 <= a < 2pi ) "কাট" এর অবস্থানের প্রতিনিধিত্ব করে । (যে কোনও যুক্তিসঙ্গত বিন্যাসে) (যথার্থতা কমপক্ষে হওয়া উচিত +/- 1e-5))
  • আপনার একটি স্লাইসে পেপারোনিটির আংশিক টুকরোগুলি থাকতে পারে (যেমন, যদি পিজ্জাতে এটিতে একটি পেপারোনি থাকে এবং এটি 10 ​​জনের দ্বারা ভাগ করা প্রয়োজন, পিৎজা দশ বার কাটা, সমস্ত কাটা পেপারোনিতে কাটা But !)
  • একটি কাটা একাধিক পেপারোনিসের মাধ্যমে টুকরো টুকরো করে থাকতে পারে (হতে পারে)।
  • পেপারোনিস ওভারল্যাপ হতে পারে।

উদাহরণ

ইনপুট:

8 people, pepperonis: (0.4, 0.2), (-0.3, 0.1), (-0.022, -0.5), (0.3, -0.32)

সম্ভাব্য বৈধ আউটপুট:

slices at:
0, 0.46365, 0.68916, 2.81984, 3.14159, 4.66842, 4.86957, 5.46554

এখানে এই উদাহরণটির একটি দৃশ্যায়ন রয়েছে (প্রত্যেকে অর্ধেক পেপারি পায়):

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

আরও উদাহরণ:

Input: 9 people, 1 pepperoni at: (0.03, 0.01)
Output: 0, 0.4065, 0.8222, 1.29988, 1.94749, 3.03869, 4.42503, 5.28428, 5.83985

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

Input: 5, (0.4, 0.3), (0.45, 0.43), (-0.5, -0.04)
Output: 0, 0.64751, 0.73928, 0.84206, 3.18997

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

স্কোরিং

এটি , তাই কমপক্ষে সংখ্যা বাইট জেতে।


কোন নির্ভুলতার সাথে সাবমিশনগুলিকে বৈধ বলে মনে করা উচিত?
রেইনবোল্ট

@ রেনবোল্ট আমি বলব যে 4 বা 5 দশমিক স্থান যথেষ্ট হওয়া উচিত। আপনি কি পরামর্শ দিচ্ছেন? আমার এটি প্রশ্নের সাথে যুক্ত করা উচিত।
kukac67

আমি নিশ্চিত না যে প্রতিটি সমস্যা সমাধানযোগ্য। যদি সেখানে 7 টি স্লাইস এবং 3 টি পেপারোনি সমানভাবে ব্যবধানে বাইরে চলে যায় তবে কী হবে?
নাথান মেরিল

1
@ নাথানমিরিল তারপরে প্রত্যেকে একটি পেপারোনি পেয়ে //7 পেতেন। :) (স্লাইসগুলির আকার কোনও বিষয় নয়))
kukac67

1
পিজা টুপি চেষ্টা ব্যর্থ হয়েছে। পরের বার একটি সহজ জিজ্ঞাসা করুন। ;)
ইলমারি করোনেন

উত্তর:


7

গণিত, 221 বাইট

f=(A=Pi.01Length@#2/#;l=m/.Solve[Norm[{a,b}-m{Cos@t,Sin@t}]==.1,m];k=(l/.{a->#,b->#2})&@@@#2;d=1.*^-5;For[Print[h=B=0];n=1,n<#,h+=d,(B+=If[Im@#<0,0,d(Max[#2,0]^2-Max[#,0]^2)/2])&@@@(k/.{t->h});If[B>A,n+=1;Print@h;B-=A]])&

Ungolfed:

f = (
   A = Pi .01 Length@#2/#;
   l = m /. Solve[Norm[{a, b} - m {Cos@t, Sin@t}] == .1, m];
   k = (l /. {a -> #, b -> #2}) & @@@ #2;
   d = 1.*^-5;
   For[Print[h = B = 0]; n = 1, n < #, h += d,
    (
      B += If[Im@# < 0, 0, d (Max[#2, 0]^2 - Max[#, 0]^2)/2]
    ) & @@@ (k /. {t -> h});
    If[B > A, n += 1; Print@h; B -= A]
   ]
) &

এটি এমন একটি ফাংশন সংজ্ঞায়িত করে যা পেপারোনি স্থানাঙ্কগুলির জন্য স্লাইসের সংখ্যা এবং জোড়ের তালিকা হিসাবে পরামিতি হিসাবে গ্রহণ করে

f[8, {{0.4, 0.2}, {-0.3, 0.1}, {-0.022, -0.5}, {0.3, -0.32}}]

এটি পিৎজারকে অনুসরণ করে কনসোলে স্লাইসগুলি মুদ্রণ করবে।

বেশিরভাগ পিজ্জার উপর, এটি মোটামুটি ধীর, কারণ (প্রয়োজনীয় নির্ভুলতা অর্জনের জন্য) আমি 1e-5 এর পদক্ষেপগুলিতে পেপারোনি অঞ্চলটি 0 থেকে 2 from পর্যন্ত সংহত করছি। সময় একটি যুক্তিসঙ্গত পরিমাণ সামান্য কম সঠিক ফলাফলের পেতে, আপনি পরিবর্তন করতে পারেন 1.*^-5থেকে শেষে 1.*^-3

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

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

পেপারোনি অঞ্চলটি স্বেচ্ছাকৃতভাবে পেতে, আমরা উত্স থেকে দুটি দূরত্ব ব্যবহার করার জন্য পেপারোনি দিয়ে লাইনটি ছেদ করি, যেখানে লাইনটি পের্পেরোনি দিয়ে ছেদ করে। যেহেতু একটি লাইন উভয় দিকের অনন্ততায় প্রসারিত, তাই আমাদের এই দূরত্বগুলি অ-নেতিবাচক মানগুলিতে আটকে দেওয়া দরকার। এটি দুটি সমস্যার সমাধান করে:

  • প্রতিটি পেপারোনির সাথে দুটি বার ছেদ করা গণনা করা হয়, একবার ধনাত্মক এবং একবার নেতিবাচক (যা প্রকৃতপক্ষে 0 এর সামগ্রিক ক্ষেত্রের জন্য উত্পন্ন হবে)।
  • উত্সের অন্তর্ভুক্ত কেবল পেপারনি টুকরাগুলির মধ্যে কেবল ওয়েজগুলি গণনা করা হচ্ছে।

আমি পরে কিছু ডায়াগ্রাম অন্তর্ভুক্ত করব।


হাঁ। এটা আমার আক্রমণ পরিকল্পনা ছিল। কমপক্ষে আমি এখন আরও সহজে উদাহরণ তৈরি করতে পারি! : ডি
kukac67

আমি লক্ষ্য করেছি যে আপনার বাস্তবায়ন কখনও কখনও একটি অতিরিক্ত কোণ তৈরি করে যা কোনও পেপারনি না করে একটি অতিরিক্ত টুকরো তৈরি করে। (উদাহরণস্বরূপ ইনপুট সহ [8, {{0.4, 0.2}, {-0.3, 0.1}, {-0.022, -0.5}, {0.3, -0.32}}]) :
kukac67

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