দিনের র‌্যান্ডম গল্ফ # 4: বার্ট্র্যান্ড প্যারাডক্স


19

সিরিজ সম্পর্কে

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

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

হোল 4: বার্ট্র্যান্ড প্যারাডক্স

বারট্রান্ড প্যারাডক্স একটি আকর্ষণীয় সমস্যা, যা শো একটি বৃত্তে র্যান্ডম কর্ডগুলি অবচয় কর্ডগুলি, তাদের midpoints এবং তাদের লেন্থ বিভিন্ন ডিস্ট্রিবিউশন উত্পাদ করতে কিভাবে বিভিন্ন পদ্ধতি।

এই চ্যালেঞ্জে আপনি "ডান" পদ্ধতিটি ব্যবহার করে ইউনিট বৃত্তের এলোমেলো ছাঁটাই উত্পন্ন করার কথা রয়েছে, অর্থাত্ এটি এমন একটি যা চিয়ার বিতরণ করে যা স্কেলিং এবং অনুবাদ অনুসারে অদম্য। লিঙ্কযুক্ত উইকিপিডিয়া নিবন্ধে, "পদ্ধতি 2" এমন একটি পদ্ধতি।

সঠিক নিয়মগুলি এখানে:

  • আপনার একটি ইতিবাচক পূর্ণসংখ্যারN গ্রহণ করা উচিত যা নির্দিষ্ট করে যে কতগুলি তীর ফিরিয়ে দেওয়া উচিত। আউটপুটটি Nকোর্ডগুলির একটি তালিকা হওয়া উচিত , প্রতিটি ইউনিট বৃত্তের দুটি পয়েন্ট হিসাবে রেডিয়েন্সে তাদের পোলার কোণ দ্বারা প্রদত্ত।
  • আপনার কোডটি দুটি কোণের জন্য কমপক্ষে 2 20 টি আলাদা মান ফেরত দিতে সক্ষম হওয়া উচিত । আপনার উপলব্ধ আরএনজির যদি আরও ছোট পরিসীমা থাকে তবে আপনাকে প্রথমে অন্তর্নির্মিতের উপরে পর্যাপ্ত পরিমাণে একটি বড় আরএনজি তৈরি করতে হবে বা আপনার নিজের উপযুক্ত আরএনজি প্রয়োগ করতে হবে । এই পৃষ্ঠাটি এটির জন্য সহায়ক হতে পারে।
  • Chords বিতরণ লিঙ্কযুক্ত উইকিপিডিয়া নিবন্ধে "পদ্ধতি 2" দ্বারা উত্পাদিত এক থেকে পৃথক হতে হবে। আপনি যদি chords চয়ন করতে একটি পৃথক অ্যালগরিদম প্রয়োগ করেন, দয়া করে সঠিকতার প্রমাণ অন্তর্ভুক্ত করুন। আপনি যে কোনও অ্যালগোরিদম প্রয়োগ করতে চান তা অবশ্যই তাত্ত্বিকভাবে ইউনিট বৃত্তে কোনও বৈধ জ্যা উত্পাদন করতে সক্ষম হবে (অন্তর্নিহিত পিআরএনজি বা সীমাবদ্ধ-নির্ভুলতা ডেটা সীমাবদ্ধতা ব্যতীত)।
  • আপনার প্রয়োগটি ফ্লোটিং-পয়েন্ট সংখ্যাগুলি (কমপক্ষে 32 বিট প্রশস্ত) বা ফিক্স-পয়েন্ট সংখ্যাগুলি (কমপক্ষে 24 বিট প্রশস্ত) ব্যবহার করা উচিত এবং সমস্ত গাণিতিক ক্রিয়াকলাপগুলি সর্বাধিক 16 টি স্তরের মধ্যে সঠিক হওয়া উচিত ।

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখে STDIN (বা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিতে পারেন এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে আউটপুট উত্পাদন করতে পারেন।

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

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম জমা (বাইটে) জিতেছে। এবং অবশ্যই, ব্যবহারকারী প্রতি সংক্ষিপ্ততম জমাটিও সিরিজের সামগ্রিক লিডারবোর্ডে প্রবেশ করবে।

কল্পনা

উত্পন্ন লাইনগুলি রেন্ডার করতে এবং তাদের বিতরণটি পরীক্ষা করতে আপনি নীচের স্নিপেট ব্যবহার করতে পারেন। কেবল পাঠ্য অঞ্চলে জোড়া জোড়ের একটি তালিকা পেস্ট করুন। স্নিপেটটি প্রায় কোনও তালিকার বিন্যাস পরিচালনা করতে সক্ষম হওয়া উচিত, যতক্ষণ না সংখ্যাগুলি দশমিক সংখ্যা (কোনও বৈজ্ঞানিক স্বরলিপি নয়)। বিতরণ সম্পর্কে ভাল ধারণা পেতে আপনি কমপক্ষে 1000 লাইন ব্যবহার করার পরামর্শ দিচ্ছি। আমি নীচের নিবন্ধে উপস্থাপিত বিভিন্ন পদ্ধতির জন্য কিছু উদাহরণ ডেটাও সরবরাহ করেছি।

পদ্ধতি 1 সহ উত্পন্ন ডেটা উদাহরণ।

পদ্ধতি 2 সহ উত্পন্ন ডেটা উদাহরণ

পদ্ধতি 3 দিয়ে উত্পন্ন ডেটা উদাহরণ।

লিডারবোর্ড

সিরিজের প্রথম পোস্টটি লিডারবোর্ড উত্পন্ন করে।

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

# Language Name, N bytes

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

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

(ভাষাটি বর্তমানে দেখানো হয়নি, তবে স্নিপেটের প্রয়োজন এবং এটি বিশ্লেষণ করতে পারে এবং ভবিষ্যতে আমি একটি উপ-ভাষা লিডারবোর্ড যুক্ত করতে পারি))

উত্তর:


12

আইএ -32 মেশিন কোড, 54 বাইট

কোডের হেক্সডাম্প:

68 00 00 00 4f 0f c7 f0 50 db 04 24 58 d8 34 24
f7 d9 78 f1 d9 c0 dc c8 d9 e8 de e1 d9 fa d9 c9
d9 f3 dc c0 d9 eb de ca d8 c1 dd 1a dd 5a 08 83
c2 10 e2 d1 58 c3

এটি উইকিপিডিয়া বর্ণিত একটি (সামান্য পরিবর্তিত) অ্যালগরিদম ব্যবহার করে। সিউডো কোডে:

x = rand_uniform(-1, 1)
y = rand_uniform(-1, 1)
output2 = pi * y
output1 = output2 + 2 * acos(x)

আমি ব্যাপ্তিটি ব্যবহার করি -1...1কারণ এই ব্যাপ্তিতে এলোমেলো সংখ্যা তৈরি করা সহজ: rdrandনির্দেশিকাটি -2^31এবং এর মধ্যে একটি পূর্ণসংখ্যা উত্পন্ন করে 2^31-1, যা সহজেই 2 ^ 31 দ্বারা ভাগ করা যায়।

আমার 0...1অন্যান্য এলোমেলো সংখ্যার (এক্স) রেঞ্জটি ব্যবহার করা উচিত ছিল , যা এতে খাওয়ানো হয় acos; তবে, negativeণাত্মক অংশটি ইতিবাচক অংশের সাথে প্রতিসাম্যযুক্ত - নেতিবাচক সংখ্যাগুলি চিয়ার উত্পাদন করে যার স্প্যান পাই রেডিয়ানগুলির চেয়ে বেশি, তবে বার্ট্রান্ডের বিপরীতে চিত্রিত করার উদ্দেশ্যে, এটি কোনও বিষয় নয়।

যেহেতু 80386 (বা x87) নির্দেশিকাটির কোনও উত্সর্গীকৃত acosনির্দেশনা নেই, আমাকে কেবল atanনির্দেশ ব্যবহার করে হিসাবটি প্রকাশ করতে হয়েছিল :

acos(x) = atan(sqrt(1-x^2)/x)

এখানে উত্স কোড যা উপরে মেশিন কোড উত্পন্ন করে:

__declspec(naked) void __fastcall doit1(int n, std::pair<double, double>* output)
{
    _asm {
        push 0x4f000000;        // [esp] = float representation of 2^32

    myloop:
        rdrand eax;             // generate a random number, -2^31...2^31-1
        push eax;               // convert it
        fild dword ptr [esp];   // to floating-point
        pop eax;                // restore esp
        fdiv dword ptr [esp];   // convert to range -1...1
        neg ecx;
        js myloop;              // do the above 2 times

        // FPU stack contents:  // x           | y
        fld st(0);              // x           | x   | y
        fmul st(0), st;         // x^2         | x   | y
        fld1;                   // 1           | x^2 | x | y
        fsubrp st(1), st;       // 1-x^2       | x   | y
        fsqrt;                  // sqrt(1-x^2) | x   | y
        fxch;                   // x           | sqrt(1-x^2) | y
        fpatan;                 // acos(x)     | y
        fadd st, st(0);         // 2*acos(x)   | y
        fldpi;                  // pi          | 2*acos(x) | y
        fmulp st(2), st;        // 2*acos(x)   | pi*y
        fadd st, st(1);         // output1     | output2
        fstp qword ptr [edx];   // store the numbers
        fstp qword ptr [edx + 8];

        add edx, 16;            // advance the output pointer
        loop myloop;            // loop

        pop eax;                // restore stack pointer
        ret;                    // return
    }
}

দুটি এলোমেলো সংখ্যা তৈরি করতে কোডটি নেস্টেড লুপ ব্যবহার করে। লুপটি সংগঠিত করতে কোডটি ecxনিবন্ধের (বহিরাগত লুপের কাউন্টার) ইতিবাচক হওয়ার সুযোগ নেয় । এটি সাময়িকভাবে উপেক্ষিত হয় ecxএবং তারপরে এটি আবার আসল মানটিকে পুনরুদ্ধার করে। jsনির্দেশ লুপ পুনরাবৃত্তি যখন ecx(এই ঠিক একবার ঘটবে) নেতিবাচক।


IA32 বিধানসভাটি ব্যবহার করার জন্য আমি এই উত্তরটি পছন্দ করি! শুধু বলার জন্য: এটি কঠোরভাবে 386 মেশিন কোড নয় কারণ 80386 স্পষ্টতই রেন্ডার নির্দেশনা বা কোনও এফপি
কোপ্রোসেসর

হ্যাঁ, আইএ 32 একটি ভাল নাম। নির্দিষ্ট যথেষ্ট কিন্তু সম্ভবত বেশি 80386. সঠিক
anatolyg

7

পাইথ, 25 23 22 বাইট

Rcrmn এর সি ++ 11 উত্তর একটি বন্দর। এটি পাইথের আমার প্রথম ব্যবহার এবং আমি প্রচুর মজা পেয়েছি!

VQJ,*y.n0O0.tOZ4,sJ-FJ

23-বাইট সংস্করণ:

VQJ*y.n0O0K.tOZ4+JK-JKd

ভাঁজ + সমষ্টি ব্যবহার করতে এবং কে কে সরিয়ে টিপলে জে সেট করে প্রোগ্রামটি পরিবর্তন করে একটি বাইট কাটুন

মূল:

VQJ**2.n0O0K.tO0 4+JK-JKd

@ ওর্পালকে ধন্যবাদ 2 বাইট কেটে দিন।

ব্যাখ্যা:

VQ                         loop as many times as the input number
  J,                       set J to the following tuple expression
    *y.n0O0                2 * .n0 (pi) * O0 (a random number between 0 and 1)
            .tOZ4          .tOZ 4 (acos of OZ (a random number))
                 ,sJ-FJ    print the sum of J and folding J using subtraction in parenthesis, separated by a comma, followed by another newline

1
পাইথ টিপস: *2_একই y_। চলক Zশুরুতে 0 হয়, তাই আপনি .tO0 4লেখার মাধ্যমে স্থানটি সরাতে পারেন .tOZ4
orlp

1
আমি 25 বাইট গণনা করছি ...
মালটিসেন

এছাড়াও, আপনি আউটপুট আরও ভালভাবে ফর্ম্যাট করতে পারেন,+JK-JK
মাল্টেসেন

@ মালটিসেন উভয়ই স্থির করেছেন। ধন্যবাদ!
kirbyfan64sos

@orlp এর সম্পর্কে আমার কোনও ধারণা ছিল না yএবং আমি ভুলে গিয়েছিলাম Z। ফিক্সড; ধন্যবাদ!
kirbyfan64sos

6

জুলিয়া, 48 বাইট

n->(x=2π*rand(n);y=acos(rand(n));hcat(x+y,x-y))

এটি এখন পর্যন্ত বেশিরভাগ উত্তরের মতো 2 টি অ্যালগরিদম পদ্ধতিটি ব্যবহার করে। এটি একটি ল্যাম্বদা ফাংশন তৈরি করে যা একটি পূর্ণসংখ্যার ইনপুট নেয় এবং এনএক্স 2 অ্যারে প্রদান করে। এটি কল করার জন্য, এটির একটি নাম দিন f=n->...

অবহেলিত + ব্যাখ্যা:

function f(n::Int64)
    # The rand() function returns uniform random numbers using
    # the Mersenne-Twister algorithm

    # Get n random chord angles
    x = 2π*rand(n)

    # Get n random rotations
    y = acos(rand(n))

    # Bind into a 2D array
    hcat(x+y, x-y)
end

ভিজ্যুয়ালাইজেশনগুলি দেখতে কেমন তা আমি সত্যিই পছন্দ করি তাই আমি এর মধ্যে একটি অন্তর্ভুক্ত করব। এটি এর ফলাফল f(1000)

বৃত্ত


5

পাইথ, 22 বাইট

সি ++ উত্তরের একটি বন্দর। আমার কাছে আরও 23 বাইট সলিউশন ছিল (এখন 22!), তবে এটি অপ্টিমাইজেশান সহ @ কিরবিফ্যান6464 এর পাইথ উত্তরটির একটি অনুলিপি ছিল, তাই আমাকে বাক্সের বাইরে একটু এবং সৃজনশীলভাবে ভাবতে হয়েছিল (আব) ভাঁজ অপারেটরটি ব্যবহার করতে হবে।

m,-Fdsdm,y*.nZOZ.tOZ4Q

নোট করুন যে প্রবর্তনের পরে ভাঁজ অপারেটরে একটি বাগ থাকার কারণে এটি এখনই কাজ করে না reduce2। আমি একটি টান অনুরোধ করা করছি।

m             Map    
 ,            Tuple of
  -Fd         Fold subtraction on input
  sd          Fold addition on input
 m      Q     Map over range input
  ,           Tuple           
   y          Double
    *         Product
     .nZ      Pi
     OZ       [0, 1) RNG
  .t  4       Acos
    OZ        [0, 1) RNG

অবসর জন্য এটি আমার অন্যান্য সমাধান যা একইভাবে কাজ করে: VQKy*.nZOZJ.tOZ4,+KJ-KJ


আপনি আমার ব্যবহারকারীর নাম ভুল বানান ... :(
kirbyfan64sos

@ kirbyfan64sos derp দুঃখিত;)
মাল্টেসেন

4

আইডিএল, 65 বাইট

স্পষ্টতই এটি @rcrmn এর মতোই অ্যালগরিদম, যদিও আমি তাদের উত্তর পড়ার আগে এটি স্বাধীনভাবে উদ্ভব করেছি।

read,n
print,[2,2]#randomu(x,n)*!pi+[-1,1]#acos(randomu(x,n))
end

আইডিএলের র‌্যান্ডমু ফাংশনটি মার্সেন টুইস্টার ব্যবহার করে, যার পিরিয়ড 2 রয়েছে 19937 -1 রয়েছে।

সম্পাদনা: আমি উপরের ভিজ্যুয়ালাইজারের মাধ্যমে 1000 টি দৌড়ে গেলাম, এখানে ফলাফলটির একটি স্ক্রিনশট রয়েছে:

আইডিএল বার্ট্র্যান্ড


4

সি ++ 11, 214 বাইট

#include<random>
#include<iostream>
#include<cmath>
int main(){using namespace std;int n;cin>>n;random_device r;uniform_real_distribution<> d;for(;n;--n){float x=2*M_PI*d(r),y=acos(d(r));cout<<x+y<<' '<<x-y<<';';}}

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

ব্যাখ্যা:

#include<random>
#include<iostream>
#include<cmath>
int main()
{
    using namespace std;
    int n;
    cin>>n; // Input number
    random_device r; // Get a random number generator
    uniform_real_distribution<> d;   // Get a uniform distribution of 
                                     // floats between 0 and 1
    for(;n;--n)
    {
        float x = 2*M_PI*d(r),       // x: Chosen radius angle
              y = acos(d(r));        // y: Take the distance from the center and 
                                     // apply it an inverse cosine, to get the rotation

        cout<<x+y<<' '<<x-y<<';';    // Print the two numbers: they are the rotation
                                     // of the radius +/- the rotation extracted from
                                     // the distance to the center
    }
}

1
এই ফ্যাক্টরটি M_PI_2সন্দেহজনক দেখাচ্ছে। আমি মনে করি এটি পরিবর্তে 1 হওয়া উচিত।
অ্যানাটলিগ

হ্যাঁ, পুরোপুরি ঠিক আছে, এখনই এটি ঠিক করতে চলেছে! অনেক ধন্যবাদ!
rorlork

4

এপিএল, 46 বাইট

f←{U←⍵ 2⍴∊{(○2×?0)(¯1○?0)}¨⍳⍵⋄⍉2⍵⍴∊(+/U)(-/U)}

আমার প্রথম এপিএল প্রোগ্রাম! অবশ্যই এটি ব্যাপকভাবে উন্নত হতে পারে (এপিএল সম্পর্কে আমার সামগ্রিক বোঝার অভাব রয়েছে), সুতরাং কোনও পরামর্শ চমত্কার হবে। এটি একটি ফাংশন তৈরি করেf যা ইনপুট হিসাবে একটি পূর্ণসংখ্যার গ্রহণ করে, পদ্ধতি 2 ব্যবহার করে জ্যাড পয়েন্টগুলির জোড়াগুলিকে গণনা করে এবং প্রতিটি জোড়কে একটি নিউলাইন দ্বারা পৃথক করে মুদ্রণ করে।

আপনি এটি অনলাইনে চেষ্টা করতে পারেন !

ব্যাখ্যা:

f←{ ⍝ Create the function f which takes an argument ⍵

    ⍝ Define U to be an ⍵ x 2 array of pairs, where the first
    ⍝ item is 2 times a random uniform float (?0) times pi (○)
    ⍝ and the second is the arccosine (¯1○) of another random
    ⍝ uniform float.

    U ← ⍵ 2 ⍴ ∊{(○2×?0)(¯1○?0)}¨⍳⍵

    ⍝ Create a 2 x ⍵ array filled with U[;1]+U[;2] (+/U) and
    ⍝ U[;1]-U[;2] (-/U). Transpose it into an ⍵ x 2 array of
    ⍝ chord point pairs and return it.

    ⍉ 2 ⍵ ⍴ ∊(+/U)(-/U)
}

দ্রষ্টব্য: আমার আগের 19-বাইট সমাধানটি (x + y, xy) এর পরিবর্তে (x, y) ফিরে আসার পরে অবৈধ। দুঃখ প্রচুর।


3

জাভা, 114 বাইট

n->{for(;n-->0;){double a=2*Math.PI*Math.random(),b=Math.acos(Math.random());System.out.println(a+b+" "+(a-b));}};

জাভা মধ্যে বেসিক বাস্তবায়ন। ল্যাম্বডা এক্সপ্রেশন হিসাবে ব্যবহার করুন।

ব্যবহারের উদাহরণ


আপনি Mathকোথাও সংরক্ষণ করে আকারটি হ্রাস করতে পারবেন না ? অথবা অন্যকিছু? (আমি জাভা প্রোগ্রামার নই)
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল এর জন্য অতিরিক্ত 2 টি অক্ষর লাগবে।
TheNumberOne

দুঃখিত: / Mathদেখায় যে সংখ্যাটি হ্রাস করার চেষ্টা করা লোভনীয় । সমস্যা সমাধানের জন্য অন্য কোড উত্পন্ন করতে একটি কোড ব্যবহার করার বিষয়ে মেটা কী বলে?
ইসমাইল মিগুয়েল

2
@ ইসমাইল মিগুয়েল এটি সুষ্ঠু গেম, যদিও আপনি গল্ফিংয়ের চেয়ে মেটাগল্ফিংয়ে আসলেই আরও ভাল লাগলে আমি অবাক হব।
মার্টিন ইন্ডার

3

রুবি, 72 বাইট

আমার প্রথম গল্ফ এখানে! আমি সবার মতো একই কোড ব্যবহার করেছি, আমি আশা করি এটি ঠিক আছে

gets.chomp.to_i.times{puts"#{x=2*Math::PI*rand},#{x+2*Math.acos(rand)}"}

2

জাভা, 115 123

এটি মূলত অন্যদের মতো একই, তবে এই গর্তটির জন্য আমার একটি জাভা স্কোর প্রয়োজন, তাই এখানে এটি যায়:

void i(int n){for(double x;n-->0;System.out.println(x+2*Math.acos(Math.random())+" "+x))x=2*Math.PI*Math.random();}

পেস্টবিনে 1000 টি নমুনা জাল পাওয়া যাবে , এখানে প্রথম রান পাঁচটি রয়েছে:

8.147304676211474 3.772704020731153
8.201346559916786 3.4066194978900106
4.655131524088468 2.887965593766409
4.710707820868578 3.8493686706403984
3.3839198612642423 1.1604092552846672

1

সিজেম, 24 22 বাইট

অন্যান্য অ্যালগরিদমের মতো, এখানে সিজেএম-এর একটি সংস্করণ রয়েছে।

{2P*mr_1dmrmC_++]p}ri*

1000 এর ইনপুট এমন বিতরণ তৈরি করে:

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

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

অ্যালগরিদম সহজভাবে x = 2 * Pi * rand(); print [x, x + 2 * acos(rand())]

{                 }ri*        e# Run this loop int(input) times
 2P*mr                        e# x := 2 * Pi * rand()
      _                       e# copy x
       1dmr                   e# y := rand()
           mC                 e# z := acos(y)
             _++              e# o := x + z + z
                ]             e# Wrap x and o in an array
                 p            e# Print the array to STDOUT on a new line

হালনাগাদ : মার্টিনের জন্য 2 বাইট সংরক্ষণ করা হয়েছে!

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


1

পাইথন 3, 144 117 বাইট

(ব্ল্যাকঙ্কেথের জন্য ধন্যবাদ lambda পয়েন্টারটির )

অন্যদের মতো একই পদ্ধতি ব্যবহার করা:

import math as m;from random import random as r;f=lambda n:[(x,x+2*m.acos(r()))for x in(2*m.pi*r()for _ in range(n))]

পাইথন ডকুমেন্টেশন থেকে:

পাইথন মূল জেনারেটর হিসাবে মার্সেন টুইস্টার ব্যবহার করে। এটি 53-বিট স্পষ্টতা ভাসমান উত্পাদন করে এবং এর সময়কাল 2 19937 -1 হয়।

আউটপুট

>>> f(10)
[(4.8142617617843415, 0.3926824824852387), (3.713855302706769, 1.4014527571152318), (3.0705105305032188, 0.7693910749957577), (1.3583477245841715, 0.9120275474824304), (3.8977143863671646, 1.3309852045392736), (0.9047010644291349, 0.6884780437147916), (3.333698164797664, 1.116653229885653), (3.0027328050516493, 0.6695430795843016), (5.258167740541786, 1.1524381034989306), (4.86435124286598, 1.5676690324824722)]

ইত্যাদি।

কল্পনা

কল্পনা


আপনি যদি ফাংশনটির জন্য ল্যাম্বডা ব্যবহার করেন এবং একটি তালিকা বোধগম্যতা (অভ্যন্তরীণ জেনারেটর এক্সপ্রেশন সহ) ফিরিয়ে দেন তবে আপনি প্রায় 20 বাইট সংরক্ষণ করতে পারেন:f=lambda n:[(x,x+2*m.acos(r()))for x in(2*m.pi*r()for _ in range(n))]
ব্ল্যাককিংহাট

আহ, আমার কাছে ল্যাম্বদা ছিল মূলত। আমার ধারণা আমি তালিকার বোধগম্যতায় দ্বিগুণ হওয়ার বিষয়ে ভাবি নি। ধন্যবাদ! @ ব্ল্যাককিংহিট
জ্যাচ গেটস

আমদানিগুলির সাথে মিলিয়ে 109 বাইটে ছোট করা যেতে পারে: tio.run/#python2
ট্রিগারমেট্রি

1

পার্ল, 60

#!perl -l
use Math::Trig;print$x=2*pi*rand,$",$x+2*acos rand for 1..<>

1

আর, 60 56 53 49 বাইট

একটি অতিরিক্ত 4 বাইট @ জয়কে ধন্যবাদ এবং এটি একটি ফাংশনে পরিবর্তন করে।

অন্যদের মতো একই বুনিয়াদি সূত্র ব্যবহার করা। আর ডিফল্টরূপে Mersenne-Twister পদ্ধতি ব্যবহার করে তবে অন্যগুলি সেট করা যায়। একটি স্থান পৃথকীকরণের ফলাফল আউটপুট করে।

function(n,y=acos(runif(n)))runif(n)*2*pi+c(y,-y)

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


হাই মিকি, আপনি একটি ফাংশন তৈরি করে এবং এক্স সংজ্ঞায়িত না করে 4 বাইট সংরক্ষণ করতে পারেন ।
জেসি

@ জায়েসি এটি আরও অনেক ভাল ধন্যবাদ
মিকিটি

0

স্মাইলব্যাসিক, 62 বাইট

INPUT N
FOR I=1TO N
X=PI()*2*RNDF()Y=ACOS(RNDF())?X+Y,X-Y
NEXT
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.