একটি ডিস্কে বিন্দু বিন্দু


14

আমি কোথাও চেনাশোনাগুলি সম্পর্কে পড়েছি এবং এখনই ডিস্কগুলি সম্পর্কে শিখেছি ( এটি আসলে একটি সাধারণ প্রচলিত ধারণা ) এবং কোডগল্ফ সম্পর্কে চিন্তাভাবনা করেছি।

আপনার কাজটি হল ব্যাসার্ধ 1 এর সাথে ডিস্কের একটি পয়েন্ট / বেশ কয়েকটি পয়েন্টকে এলোমেলো করা ।

নিয়মাবলী:

  • সমস্ত পয়েন্টের উত্পন্ন করার জন্য একটি সমান সম্ভাবনা থাকতে হবে
  • ভাসমান পয়েন্ট স্থানাঙ্কগুলি অবশ্যই ব্যবহার করা উচিত; সর্বনিম্ন প্রয়োজনীয়তা দুটি দশমিক (যেমন পয়েন্ট (0.12, -0.45)বা (0.00, -1.00)বৈধ)
  • আপনার প্রোগ্রামটি যদি সীমাবদ্ধ বৃত্ত এবং এতে উত্পন্ন বিন্দু (গুলি) প্রদর্শন করে তবে আপনি -20 বাইট পাবেন। স্থানাঙ্কগুলি এখনও বৈধ হতে হবে তবে প্রদর্শিত হবে না এবং উত্পন্ন চিত্রটি কমপক্ষে 201 বাই পিক্সেল আকার হতে হবে
  • আপনার প্রোগ্রামটি স্টিডিনে ইনপুট হিসাবে উত্পন্ন পয়েন্টগুলির সংখ্যা নিলে আপনি -5 বাইট পাবেন
  • যদি আপনি সীমানা বৃত্ত এবং বিন্দু (গুলি) প্লট না করার সিদ্ধান্ত নেন তবে আপনার প্রোগ্রামটিকে বিন্যাসে (x, y)বা (x,y)স্টাডআউটে উত্পন্ন পয়েন্টগুলি গুলি আউটপুট করতে হবে
  • আপনি যদি উত্পন্ন পয়েন্টগুলির সংখ্যাকে ইনপুট হিসাবে গ্রহণ করার সিদ্ধান্ত নেন তবে এটি প্লট করবেন না - আপনার প্রোগ্রামটিকে একটি বর্ণের মধ্যে বা তার মধ্যে একটি স্থান ছাড়া উপরে বর্ণিত বিন্যাসে সমস্ত এলোমেলো পয়েন্ট আউটপুট করতে হবে

বাইটের মধ্যে স্বল্পতম জমা!


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

5
" ক্রিয়েটিভ উপায়ে এক্সওয়াইজেড করুন" ক্লাসিক খারাপ পপকন প্রশ্ন ™ ™ একজন ব্যক্তি যাকে সৃজনশীল বলে বিবেচনা করে তা হ'ল অন্য ব্যক্তিটি সুস্পষ্ট উপায়ে বিবেচনা করে।
পিটার টেলর

কৌতূহলের বাইরে, কেন প্লটগুলির জন্য একটি 201x201 পিক্সেল আউটপুট প্রয়োজন?
জন

@ জোহনে আমি 201x201 পিক্সেলের পরামর্শ দিয়েছি কারণ এটি প্রয়োজনীয় 2 দশমিক স্থানের যথার্থতার সাথে মেলে
ট্রাইকোপ্লাক্স

আমরা কি জটিল সংখ্যা হিসাবে স্থানাঙ্ক আউটপুট করতে পারি? উদাহরণস্বরূপ: 0.3503082505747327+0.13499221288682994j
orlp

উত্তর:


5

পাইথ, 26 - 5 = 21 বাইট

VQp(sJ*@OZ2^.n1*yOZ.l_1)eJ

স্টিডিনে উত্পাদনের জন্য স্থানাঙ্কের সংখ্যা নেয় এবং এ জাতীয় স্টাডআউটে আউটপুট দেয়:

(-0.5260190768964058, -0.43631187015380823)(-0.12127959509302746, -0.08556306418467638)(-0.26813756369750996, -0.4564539715526493)

@ মার্টিনবাটনার এর অনুরূপ কৌশল ব্যবহার করে, মেরু স্থানাঙ্ক তৈরি করে এবং রেডিয়াই তৈরি করে, এটি জটিল ক্ষয়ক্ষতির ব্যবহার ব্যতীত।


আপনি মুছে ফেলতে pপারেন, তাই না? এটি কেবল আউটপুটকে পৃথক লাইনে পরিবর্তন করে।
পূর্কাকুডারী

@ Pietu1998 এটি অনুমোদিত নয়, মূল প্রশ্নের মন্তব্য দেখুন।
orlp

ওহ ঠিক আছে.
পূর্কাকুডারী

16

সিজেম, 28 27 বাইট

PP+mr_mc\ms]1.mrmqf*"(,)".\

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

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

PP+     e# Push 2π.
mr_     e# Get a random float between 0 and 2π, make a copy.
mc\     e# Take the cosine of one copy and swap with the other.
ms]     e# Take the sine of the other copy and wrap them in an array.
        e# This gives us a uniform point on the unit circle.
1.mr    e# Get a random float between 0 and 1.
mq      e# Take the square root. This is the random radius.
f*      e# Multiply x and y by this radius.
"(,)".\ e# Put the resulting numbers in the required format.

কেন এটি কাজ করে? ব্যাসার্ধ rএবং (ছোট) প্রস্থের একটি সংকীর্ণ অ্যানিউলাস বিবেচনা করুন dr। ক্ষেত্রফলটি আনুমানিক 2π*r*dr(যদি এ্যানুলাস সংকীর্ণ হয় তবে অভ্যন্তরীণ এবং বাহ্যিক পরিধিটি প্রায় অভিন্ন, এবং বক্রতা উপেক্ষা করা যেতে পারে, যেমন অঞ্চলটি পরিধির পাশের দৈর্ঘ্য এবং প্রস্থের প্রস্থের সাথে একটি আয়তক্ষেত্র হিসাবে বিবেচনা করা যেতে পারে annulus)। সুতরাং অঞ্চলটি ব্যাসার্ধের সাথে রৈখিকভাবে বৃদ্ধি পায়। এর অর্থ হ'ল আমরাও এলোমেলো রেডিওর রৈখিক বন্টন চাই, ধ্রুবক ঘনত্ব অর্জনের জন্য (ব্যাসার্ধের দ্বিগুণে, দ্বিগুণ পরিমাণ ক্ষেত্র পূরণ করতে পারে, তাই আমরা সেখানে দ্বিগুণ পয়েন্ট চাই)।

আমরা কীভাবে 0 থেকে 1 এর মধ্যে রৈখিক এলোমেলো বিতরণ তৈরি করব? প্রথমে বিযুক্ত মামলাটি দেখুন। বলুন, আমাদের 4 টি মানের পছন্দসই বিতরণ রয়েছে {0.1, 0.4, 0.2, 0.3}(যেমন আমরা 14 গুণ সাধারণ হতে চাই 0এবং দ্বিগুণ সাধারণ 2; আমরা 3তিনগুণ সাধারণ হিসাবে চাই 0):

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

পছন্দসই বিতরণ সহ চারটি মানের মধ্যে কীভাবে একটি চয়ন করতে পারে? আমরা তাদের স্ট্যাক আপ করতে পারি, y- অক্ষের সাথে 0 এবং 1 এর মধ্যে অভিন্ন র্যান্ডম মান বাছাই করতে পারি এবং সেই বিন্দুতে বিভাগটি বাছাই করতে পারি:

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

যদিও এই বাছাইয়ের দৃশ্যটি দেখার আলাদা উপায় রয়েছে। পরিবর্তে আমরা বিতরণের প্রতিটি মানটিকে সেই বিন্দু পর্যন্ত মান সঞ্চারের সাথে প্রতিস্থাপন করতে পারি:

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

এবং এখন আমরা এই চার্টের শীর্ষ লাইনটিকে একটি ফাংশন হিসাবে বিবেচনা করি এবং একটি ফাংশন f(x) = yপেতে এটি উল্টে করি , যা আমরা এতে অভিন্ন র্যান্ডম মানটিতে প্রয়োগ করতে পারি :g(y) = f-1(y) = xy ∈ [0,1]

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

দুর্দান্ত, সুতরাং রেডিয়ির রৈখিক বিতরণ উত্পন্ন করতে কীভাবে এটি ব্যবহার করতে পারেন? এটি আমরা চাই বিতরণ:

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

প্রথম পদক্ষেপটি হ'ল বিতরণের মান সংগ্রহ করা। তবে বিতরণটি অবিচ্ছিন্ন, সুতরাং পূর্ববর্তী সমস্ত মানগুলির সংমিশ্রণের পরিবর্তে আমরা এর থেকে এক অবিচ্ছেদ্য অংশ গ্রহণ 0করি r। আমরা খুব সহজেই যে বিশ্লেষণী সমাধান করতে পারে: । যাইহোক, আমরা এটিকে স্বাভাবিক করতে চাই, অর্থাত এটি একটি ধ্রুবক দ্বারা এটির গুণিত করা যাতে এটি সর্বাধিক মান দেয় , তাই আমরা যা চাই তা হ'ল :0r r dr = 1/2 r21rr2

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

এবং পরিশেষে, আমরা একটি ফাংশন পেতে এটি বিপরীত করি [0,1]যাতে আমরা অভিন্ন মূল্যতে প্রয়োগ করতে পারি, যা আমরা আবার বিশ্লেষণাত্মকভাবে করতে পারি: এটি ঠিক r = √y, যেখানে yএলোমেলো মান:

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

এটি একটি মোটামুটি কার্যকর কৌশল যা প্রায়শই সাধারণ বিতরণগুলি হুবহু উত্পন্ন করতে ব্যবহার করা যেতে পারে (এটি কোনও বিতরণের জন্য কাজ করে তবে জটিলগুলির জন্য শেষ দুটি পদক্ষেপটি সংখ্যাসূচকভাবে সমাধান করতে হতে পারে)। তবে, আমি উত্পাদন কোডে এই বিশেষ ক্ষেত্রে এটি ব্যবহার করব না, কারণ বর্গমূল, সাইন এবং কোসাইন প্রতিরোধমূলক ব্যয়বহুল: প্রত্যাখ্যান-ভিত্তিক অ্যালগরিদম ব্যবহার করা গড়ে গড়ে আরও দ্রুত হয়, কারণ এটি কেবল সংযোজন এবং গুণন প্রয়োজন।


1
খুব সুন্দর ব্যাখ্যা!
সুইপারপোটো

2
মিমি ছবি: ডি
বিটা ক্ষয়

12

গণিত, 68 44 - 20 = 24 বাইট

ডেভিড ক্যারাহারকে আমাকে সম্পর্কে জানাতে দেওয়ার জন্য অনেক ধন্যবাদ RandomPoint, যা 24 (!) বাইট সংরক্ষণ করেছিল ম্যাথামেটিকাল নেই আছে একটি বিল্ট-ইন সব কিছুর জন্য।

Graphics@{Circle[],Point@RandomPoint@Disk[]}

এটি বোনাসের জন্য যোগ্যতার জন্য পয়েন্ট এবং সীমানা বৃত্তকে প্লট করে:

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

ফলাফলটি একটি ভেক্টর চিত্র, সুতরাং 201x201 পিক্সেলের আকারের স্পেসিফিকেশনটি সত্যিকার অর্থে বোঝায় না, তবে ডিফল্টরূপে এটি এর চেয়েও বড় আকারের দেয়।


কীভাবে Graphics[{Circle[], Point@RandomPoint@Disk[]}]?
ডেভিডসি

আমার অতিথি হোন. এছাড়াও, 1 বাইট সংরক্ষণ করতে ...Graphics@{Circle[], Point@RandomPoint@Disk[]}
ডেভিডসি

@ ডেভিডকারারহরকে অনেক ধন্যবাদ! :)
মার্টিন এন্ডার

আমি গাণিতিক সিনট্যাক্স জানি না তবে অবশ্যই এর পরে স্থানটি সরিয়ে আপনি আরও একটি বাইট সংরক্ষণ করতে পারবেন ,?
ফ্লফি

@ ফ্লুফি আমি ইতিমধ্যে পোস্ট সংস্করণে করেছি
মার্টিন ইন্ডার

9

সিজেম, 31 26 বাইট

{];'({2dmr(_}2*@mhi}g',\')

পার্শ্ব দৈর্ঘ্য 2 এর বর্গক্ষেত্রে বারবার এলোমেলো পয়েন্ট উত্পন্ন করে এবং ইউনিট ডিস্কের মধ্যে পড়ে এমন প্রথমটি রেখে এটি কাজ করে।

@ মার্টিনব্যাটনারকে 3 বাইট বন্ধ করে দেওয়ার জন্য ধন্যবাদ!

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

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

{                  }g       Do:
 ];'(                         Clear the stack and push a left parenthesis.
     {      }2*               Do twice:
      2dmr                      Randomly select a Double between 0 and 2.
          (_                    Subtract 1 and push a copy.
               @              Rotate the copy of the first on top of the stack.
                mh            Compute the Euclidean norm of the vector consisting
                              of the two topmost Doubles on the stack.
                  i           Cast to integer.
                            If the result is non-zero, repeat the loop.
                     ',\    Insert a comma between the Doubles.
                        ')  Push a right parenthesis.

8

আইকে , 53 51 বাইট

বিশেষ কিছু বিশেষ নয়, তবে আমি মনে করি আমাদের কমপক্ষে একটি গ্রাফিকাল সমাধান করা উচিত:

,(80+160*t@&{.5>%(x*x)+y*y}.+t:0N 2#-.5+?9999;cga;3)

পটভূমি

এটি আপনার ব্রাউজারে চেষ্টা করুন ।

সম্পাদনা করুন: মেরু স্থানাঙ্কগুলির বিতরণ পরিবর্তন করার জন্য @ মার্টিনব্যাটনার এর পদ্ধতির প্রয়োগ করে আমি দুটি বাইট মুভ করতে পারি। আমি মনে করি এটি আরও কিছুটা প্রত্যক্ষ:

,(80*1+(%?c){x*(cos y;sin y)}'6.282*?c:9999;cga;3)

3
আপনি যদি সীমাবদ্ধ বৃত্তটিও আঁকেন তবে আপনি -20 এর জন্য যোগ্যতা অর্জন করতে পারেন।
orlp

1
আইকে-র একটি রাস্টার-ভিত্তিক অঙ্কন মডেল রয়েছে, যা প্রয়োজনীয়তাকে অন্যায় করে তোলে। আমি মনে করি পাশাপাশি আরও একটি সীমানা বৃত্তের আনুমানিক রেন্ডার করতে 20 টিরও বেশি অক্ষরের ব্যয় হবে।
জন

7

পার্ল, 59 বাইট

while(($x=1-rand 2)**2+($y=1-rand 2)**2>1){};print"($x,$y)"

এটি কেবল একটি সহজ সমাধান, একটি স্কোয়ারে পয়েন্ট তৈরি করে এবং এগুলি খুব দূরে প্রত্যাখ্যান করে। আমার একক গল্ফিং কৌশলটি শর্তের ভিতরে থাকা কার্যগুলি অন্তর্ভুক্ত করা।

সম্পাদনা: গল্ফ করার প্রক্রিয়াতে, আমি একটি বৃত্তে এলোমেলো পয়েন্টগুলি মুদ্রণের একটি আকর্ষণীয় উপায় পেয়েছি ।

use Math::Trig;$_=rand 2*pi;print"(",sin,",",cos,")"

7

অক্টাভা, 24 53 - 20 = 33 বাইট

polar([0:2e-3:1,rand]*2*pi,[ones(1,501),rand^.5],'.')

501 সমান-ব্যবধানযুক্ত থিতা মানগুলি এবং একটি এলোমেলো সংখ্যার উত্পন্ন করে সেগুলি সমস্তকে [0..2π] এ স্কেল করে। তারপরে বৃত্তের ব্যাসার্ধের জন্য 501 1 গুলি উত্পন্ন করে, পাশাপাশি বিন্দুটির জন্য একটি এলোমেলো ব্যাসার্ধ এবং ডিস্কের উপর অভিন্ন বিতরণ নিশ্চিত করতে বর্গমূল গ্রহণ করে। তারপরে মেরু স্থানাঙ্ক হিসাবে সমস্ত পয়েন্ট প্লট করুন।

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


এখানে বিতরণটির একটি দ্রুত প্রদর্শন (একক বৃত্ত ব্যতীত):

polar(2*pi*rand(99),rand(99).^.5,'.')

9801 পয়েন্ট


5

অক্টাভা / মতলব, 74 64 বাইট

প্রত্যাখ্যান পদ্ধতি , by৪ বাইট:

u=1;v=1;while u^2+v^2>1
u=rand;v=rand;end
sprintf('(%f,%f)',u,v)

সরাসরি পদ্ধতি , by৪ বাইট (আমাকে দুটি ত্রুটি সংশোধন করতে সহায়তা করার জন্য মার্টিন বাটনারকে ধন্যবাদ):

t=rand*2*pi;r=1-abs(1-sum(rand(2,1)));sprintf('(%f,%f)',r*cos(t),r*sin(t))

5

আর, 99 95 81-20 = 79 75 61 বাইট

symbols(0,0,1,i=F,asp=1,ylim=c(-1,1));points(complex(,,,runif(9),runif(9,-1)*pi))

পোলার স্থানাঙ্ক থেকে এক্স / ওয়াই তৈরি করতে জটিল সংখ্যা নির্মাণ ব্যবহার করুন। ইনপুট নেওয়া কিছুটা ব্যয়বহুল ছিল এবং এটি করার সম্ভবত আরও ভাল উপায় আছে। দ্যylim এবংxlim তা নিশ্চিত করার জন্য সমগ্র বৃত্ত অঙ্কিত হয় এবং aspনিশ্চিত পয়েন্ট বৃত্ত প্রতীক অধীনে দেখানো হয়।

সাশ্রয়ের জন্য @ জবাআমস এবং @ ফ্লোডেলকে ধন্যবাদ

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


runif(9,0,1)সরল করা যায়runif(9)
jbaums

@ জাবামস, ধন্যবাদ ... আমি সবসময় ভুলে যাব বলে মনে করি :)
মিকিটি

শেভ করতে পারেন 14:symbols(0,0,1,i=F,asp=1,ylim=c(-1,1));points(complex(,,,runif(9),runif(9,-1)*pi))
ফ্লোডেল

@ ফ্লোডেল খুব সুন্দর আপনাকে ধন্যবাদ
মিকিটি

অন্য কিশোর সঞ্চয়: yliএর জায়গায় কাজ করে ylim
jbaums

4

প্রসেসিং / জাভা 141 বাইটস -20 = 121

setupপ্রসেসিং.আরোগুলি 200x200- এ ডিফল্ট হওয়ার পরে, সর্বনিম্ন আকারের জন্য * * 201 এর প্রয়োজনীয়তাটি আমাকে পদ্ধতিতে রাখা দরকার :(

void setup(){noFill();size(201,201);}void draw(){float f=10,a=PI*2*random(),r=random();point(f+f*sin(a)*r,f+f*cos(a)*r);ellipse(f,f,f*2,f*2)}

আমি জানতাম না প্রসেসিং / জাভা অনুমোদিত ছিল, ঝরঝরে!
জে আতকিন

4

কিউব্যাসিক, 138 বাইট - 20 - 5 = 113

INPUT n
r=200
SCREEN 12
RANDOMIZE TIMER
CIRCLE(r,r),r
PAINT(r,r)
FOR i=1TO n
DO
x=RND*r*2
y=RND*r*2
LOOP UNTIL POINT(x,y)
PSET(x,y),1
NEXT

ব্যবহারকারীর ইনপুট নেয় এবং ডিস্ক এবং পয়েন্টগুলি আঁকেন। কিউবি 64- তে পরীক্ষিত ।

এটি একটি দুর্দান্ত বেসিক "ডার্টবোর্ডে নিক্ষেপ করুন এবং কী স্টিকগুলি রাখুন" কৌশল। ক্যাচটি হ'ল "কি স্টিকস" গাণিতিকভাবে নয় তবে গ্রাফিকভাবে নির্ধারিত: একটি সাদা ডিস্ক একটি কালো পটভূমিতে প্লট করা হয় এবং তারপরে এলোমেলোভাবে উত্পন্ন পয়েন্টগুলি কালো না হওয়া পর্যন্ত প্রত্যাখ্যান করা হয়। পয়েন্টগুলি তাদের নীল করে আঁকা (যদিও এটি একক পিক্সেল কখন তা বলা শক্ত - চিত্রটি বড় করার জন্য ক্লিক করুন)।


3

awk - 95 - 5 = 90

{
    for(;$1--;printf"("(rand()<.5?x:-x)","(rand()<.5?y:-y)")")
        while(1<(x=rand())^2+(y=rand())^2);
}

যেহেতু আমি র্যান্ড () <। 5 অংশ সম্পর্কে যথেষ্ট নিশ্চিত ছিলাম না, তাই এই স্ক্রিপ্টটি ব্যবহার করে আমি এটি দিয়ে কিছু বিতরণ পরীক্ষা করেছি:

BEGIN{ srand() }
{ 
    split("0 0 0 0", s)
    split("0 0 0 0", a)

    for(i=$1; i--; )
    {
        while( 1 < r2 = ( x=rand() )^2 + ( y=rand() )^2 );

        x = rand()<.5 ? x : -x
        y = rand()<.5 ? y : -y

        ++s[ x>=0 ? y>=0 ? 1 : 4 : y>=0 ? 2 : 3 ]

        ++a[ r2>.75 ? 1 : r2>.5 ? 2 : r2>.25 ? 3 : 4]
    }

    print "sector distribution:"
        for(i in s) print "sector " i ": " s[i]/$1

    print "quarter area distribution:"
        for(i in a) print "ring " i ":   " a[i]/$1
}

আমার কফিতে একবার বা দু'বার চুবিয়ে দেওয়ার পরে 1e7 এর ইনপুটটির জন্য যা আমাকে এই ফলাফল দেয়:

1e7
sector distribution:
sector 1: 0.250167
sector 2: 0.249921
sector 3: 0.249964
sector 4: 0.249948
quarter area distribution:
ring 1:   0.24996
ring 2:   0.25002
ring 3:   0.250071
ring 4:   0.249949

যা আমার মনে হয় বেশ ঠিক আছে।

কিছুটা ব্যাখ্যা:
কিছুক্ষণ লেখার পরে দেখা গেল যে আপনি যদি ডিস্কটিকে সমান ক্ষেত্রের সাথে চারটি রিংয়ে বিভক্ত করতে চান তবে যে রেডিওটি আপনাকে কাটাতে হবে সেগুলি হল স্কয়ার্ট (1/4), স্কয়ার্ট (1/2) ) এবং স্কয়ার্ট (3/4)। যেহেতু আমি পরীক্ষার পয়েন্টটির আসল ব্যাসার্ধটি হবে স্কয়ার্ট (x ^ 2 + y ^ 2), তাই আমি একসাথে বর্গমূলকে এড়িয়ে যেতে পারি। 1/4, 2/4, 3/4 "কাকতালীয়" এম এম বুট্টনার আগে কী বলেছিলেন তার সাথে সম্পর্কিত হতে পারে।


3

এইচপিপিএল , 146 (171-20-5) বাইট

EXPORT r(n)BEGIN LOCAL R,A,i,Q;RECT();Q:=118.;ARC_P(Q,Q,Q);FOR i FROM 1 TO n DO R:=√RANDOM(1.);A:=RANDOM(2*π);PIXON_P(G0,IP(Q+Q*R*COS(A)),IP(Q+Q*R*SIN(A)));END;FREEZE;END;

10000 পয়েন্টের জন্য উদাহরণ (আসল ডিভাইসের সেকেন্ডে সময় সহ):

সময়সাপেক্ষে একটি ডিস্কে পয়েন্ট এলোমেলো করুন

ফাংশনটি নিজেই ডেকে আনে r(n)। উপরের চিত্রের বাকী অংশগুলি কেবল সময়ের উদ্দেশ্যে।

ফলাফল (ডিস্ক ব্যাস 236 পিক্সেল):

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

উপরের সংস্করণটি বিন্দু স্থানাঙ্ক সঞ্চয় করে না, তাই আমি এমন একটি সংস্করণ লিখেছিলাম যা দুটি পরামিতি লাগে r(n,p)nক্ষেত্রে পয়েন্টের সংখ্যা এবং পয়েন্টগুলি p=0টার্মিনালে ফিরিয়ে দেয়, p=1পয়েন্টগুলি এবং ডিস্ককে প্লট করে) ক্ষেত্রে স্থানাঙ্কগুলি সংরক্ষণ করা বাধ্যতামূলক is এই সংস্করণটি 283 (308-20-5) বাইট দীর্ঘ:

EXPORT r(n,p)BEGIN LOCAL R,A,j,Q,x,y;Q:=118.0;CASE IF p==0 THEN print() END IF p==1 THEN RECT();ARC_P(Q,Q,Q) END END;FOR j FROM 1 TO n DO R:=√RANDOM(1.0);A:=RANDOM(2*π);x:=R*COS(A);y:=R*SIN(A);CASE IF p==0 THEN print("("+x+", "+y+")") END IF p==1 THEN PIXON_P(G0,IP(Q+Q*x),IP(Q+Q*y)) END END;END;FREEZE;END;

অবারিত সংস্করণ:

EXPORT r(n,p)
BEGIN
LOCAL R,A,j,Q,x,y;
  Q:=118.0;
  CASE
    IF p==0 THEN print() END
    IF p==1 THEN RECT();ARC_P(Q,Q,Q) END
  END;
  FOR j FROM 1 TO n DO
    R:=√RANDOM(1.0);
    A:=RANDOM(2*π);
    x:=R*COS(A);
    y:=R*SIN(A);
    CASE
      IF p==0 THEN print("("+x+", "+y+")") END
      IF p==1 THEN PIXON_P(G0,IP(Q+Q*x),IP(Q+Q*y)) END
    END;
  END;
  FREEZE;
END;

এর জন্য টার্মিনাল আউটপুট r(10,0):

একটি ডিস্ক টার্মিনাল আউটপুট এ বিন্দু বিন্দু

r(10,1) পয়েন্টগুলি সহ ডিস্কটি দেখায় যেমন উপরে দেখানো হয়েছে।


2

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

প্রত্যাখ্যান-Bishyaik:

do x=(r=()=>4*Math.random()-2)(),y=r()
while(x*x+y*y>1)
alert(`(${[x,y]})`)

সরাসরি পদ্ধতি (৮০ বাইট):

alert(`(${[(z=(m=Math).sqrt((r=m.random)()))*m.sin(p=m.PI*2*r()),z*m.cos(p)]})`)

2

পাইথন, 135 130 বাইট

from random import*
def r():return uniform(-1,1)
p=[]
while not p:
    x,y=r(),r()
    if x**2+y**2<=1:p=x,y
print'(%.2f, %2f)'%p

@ জিমি 23013 এর পরামর্শের **0.5জন্য ধন্যবাদ সরানো হয়েছে (কারণ এটি একটি ইউনিট বৃত্ত, আমি এখন যাচাই করছি যে (x, y) এবং (0, 0) এর মধ্যে বর্গক্ষেত্র 1 2 এর সমান কিনা । এটি একই জিনিস))

এটি আমাকে প্রথম বন্ধনী সরানোর জন্যও মুক্তি দিয়েছে।


আমার মনে হয় আপনার দরকার নেই **0.5
jimmy23013

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