ওভারল্যাপিং সার্কেল


16

আপনি একটি প্রোগ্রাম বা ফাংশন লেখা উচিত যে একটি প্রদত্ত Nদ্বারা Nসমানভাবে ব্যবধানে বর্গক্ষেত্র গ্রিড এবং একটি কঠিন খোদাই বৃত্ত আউটপুট বা আয় গ্রিড স্কোয়ার যা আংশিকভাবে বা সম্পূর্ণভাবে কঠিন বৃত্ত দ্বারা overlapped হয় সংখ্যা।

0-আকারের ওভারল্যাপগুলি (অর্থাত্ যখন বৃত্তটি কেবল একটি রেখাকে স্পর্শ করে) গণনা করা হয় না। (এই ওভারল্যাপগুলি উদাহরণস্বরূপ ঘটে N = 10))

উদাহরণ

N = 8 (64 squares), Slices = 60

[Imgur] (http://i.imgur.com/3M1ekwY.png)

ইনপুট

  • একটি পূর্ণসংখ্যা N > 0। (গ্রিডের N * Nস্কোয়ারগুলি থাকতে পারে ))

আউটপুট

  • একটি পূর্ণসংখ্যা, শক্ত বৃত্তের স্লাইসের সংখ্যা।

উদাহরণ

(ইনপুট-আউটপুট জোড়া)

Inputs:  1 2 3  4  5  6  7  8  9 10  11  12  13  14  15
Outputs: 1 4 9 16 25 36 45 60 77 88 109 132 149 172 201

এটি কোড-গল্ফ তাই স্বল্পতম এন্ট্রি জয়।


এটি কি কেবল আমি বা প্রত্যেকেই এখানে স্পষ্ট সমাধানটি অনুপস্থিত? সম্পাদনা: কিছু মনে করবেন না। প্রথমে দেখতে খুব সরল লাগছিল N^2
nyuszika7h

উত্তর:


5

পাইথ, 27 26

-*QQ*4lfgsm^d2T*QQ^%2_UtQ2

এটি অনলাইনে ব্যবহার করে দেখুন: পাইথ কমপাইলার / এক্সিকিউটার

আমি একটি 2Nx2Nগ্রিড ব্যবহার করি এবং ওভারল্যাপিং 2x2স্কোয়ারগুলি গণনা করি । এটি খানিকটা খাটো, যেহেতু আমি ইতিমধ্যে ব্যাসার্ধটি জানি N

এবং আসলে আমি ওভারল্যাপিং স্কোয়ারগুলি গণনা করি না। আমি দ্বিতীয় কোয়াড্র্যান্টের অ-ওভারল্যাপিং স্কোয়ারগুলি গণনা করি, সংখ্যাটি 4 দিয়ে গুণ করি এবং ফলাফলটি বিয়োগ করি N*N

২ solution টি সমাধানের ব্যাখ্যা:

-*QQ*4lfgsm^-Qd2T*QQ^t%2UQ2   implicit: Q = input()
                     t%2UQ    generates the list [2, 4, 6, ..., Q]
                    ^     2   Cartesian product: [(2, 2), (2, 4), ..., (Q, Q)]
                              These are the coordinates of the right-down corners
                              of the 2x2 squares in the 2nd quadrant. 
       f                      Filter the coordinates T, for which:
        gsm^-Qd2T*QQ             dist-to-center >= Q
                                 more detailed: 
          m     T                   map each coordinate d of T to:
           ^-Qd2                       (Q - d)^2
         s                          add these values
        g        *QQ                 ... >= Q*Q
    *4l                       take the length and multiply by 4
-*QQ                          Q*Q - ...

26 সমাধানের ব্যাখ্যা:

আমি লক্ষ্য করেছি যে আমি স্থানাঙ্কগুলি কেবল একবার ব্যবহার করি এবং ততক্ষণে এর থেকে স্থানাঙ্কগুলি বিয়োগ করে Q। কেন কেবল মানগুলি তৈরি করা যায় নাQ - coords সরাসরি ?

এর মধ্যে ঘটে %2_UtQ। পূর্বের দ্রবণের চেয়ে কেবল একটি চর বড় এবং 2 টি অক্ষর সংরক্ষণ করে, কারণ আমাকে বিয়োগ করতে হবে না -Q


6

পাইথন 2, 72

lambda n:sum(n>abs(z%-~n*2-n+(z/-~n*2-n)*1j)for z in range(~n*~n))+n+n-1

Ungolfed:

def f(n):
    s=0
    for x in range(n+1):
        for y in range(n+1):
            s+=(x-n/2)**2+(y-n/2)**2<(n/2)**2
    return s+n+n-1

একটি (n+1)*(n+1)স্কোয়ারের জন্য গ্রিড পয়েন্ট করে । কোনও কক্ষটি বৃত্তটি ওভারল্যাপ করে যদি এর গ্রিড পয়েন্টটি কেন্দ্রের নিকটে নিকটে থাকে circle সুতরাং, আমরা গ্রিড পয়েন্টগুলি গণনা করতে পারি, ব্যতীত এটি 2*n+1অক্ষের গ্রিড পয়েন্টগুলি বাদ দেয় (উভয় এবং সমকালের জন্য n), সুতরাং আমরা ম্যানুয়ালি এটির জন্য সংশোধন করি।

কোডটি কেন্দ্রের দূরত্ব এবং একক সূচককে পুনরাবৃত্তি করতে লুপের ধসের গণনা করতে জটিল দূরত্ব ব্যবহার করে অক্ষর সংরক্ষণ করে ।


6

সিজেম, 36 35 34 27 বাইট

এটি এক্সনোরের মতো একই অ্যালগরিদম হিসাবে পরিণত হয়েছিল, তবে আমি আরও অবাক হয় যে এর চেয়ে ভাল আর কোনও আছে কিনা।

rd:R,_m*{{2*R(-_g-}/mhR<},,

কোড ব্যাখ্যা :

rd:R                                "Read the input as double and store it in R";
    ,_                              "Get 0 to input - 1 array and take its copy";
      m*                            "Get Cartesian products";
                                    "Now we have coordinates of top left point of each";
                                    "of the square in the N by N grid";
        {               },,         "Filter the squares which are overlapped by the";
                                    "circle and count the number";
         {        }/                "Iterate over the x and y coordinate of the top left";
                                    "point of the square and unwrap them";
          2*                        "Scale the points to reflect a 2N grid square";
            R(-                     "Reduce radius - 1 to get center of the square";
               _g-                  "Here we are reducing or increasing the coordinate";
                                    "by 1 in order to get the coordinates of the vertex";
                                    "of the square closer to the center of the grid";
                    mhR<            "Get the distance of the point from center and check";
                                    "if its less than the radius of the circle";

আপডেট : জাকুব থেকে 2 এন কৌশলটি ব্যবহার করে 7 টি বাইট সংরক্ষণের জন্য আরও কিছু কৌশল!

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


2

Pyth,  44  36

JcQ2L^-+b<bJJ2sm+>*JJ+y/dQy%dQqQ1*QQ

কিছুটা বাইট শেভ করতে পারলে এটিকে কিছুটা সাফ করার চেষ্টা করছি।

ব্যাখ্যা

                           Q = eval(input())    (implicit)
JcQ2                       calculate half of Q and store in J
L                          define function y(b) that returns
 ^-+b<bJJ2                 (b - J + (1 if b < J else 0)) ^ 2
s                          output sum of
 m                 *QQ      map d over integers 0..(Q*Q-1)
  +
   >*JJ                      J*J is greater than
       +y/dQy%dQ              sum of y(d / Q) and y(d % Q)
                qQ1          or Q is 1; see below

আমার স্পষ্টতই পরীক্ষা করতে হবে n = 1, যেহেতু আমার অ্যালগরিদম কেবল কেন্দ্রের নিকটবর্তী বর্গাকার কোণটি পরীক্ষা করে (এবং কোনওটিই এর মধ্যে আবৃত হয় না n = 1)।


2

অক্টাভা ()৪) () 66) ()৪)

এখানে অষ্টক সংস্করণ। মূলত বৃত্তের মধ্যে সমস্ত শীর্ষবিন্দুগুলি সন্ধান করে এবং তারপরে কনভলুশনের মাধ্যমে এক বা একাধিক বৈধ শীর্ষস্থানযুক্ত সমস্ত বর্গক্ষেত্র সন্ধান করুন। 64 বাইট:

x=ndgrid(-1:2/input(''):1);sum(conv2(x.^2+x'.^2<1,ones(2))(:)>0)

By 66 বাইট:

x=meshgrid(-1:2/input(''):1);sum(conv2(x.^2+x'.^2<1,ones(2))(:)>0)

74 বাইট:

n=input('');x=ones(n+1,1)*(-1:2/n:1);sum(conv2(x.^2+x'.^2<1,ones(2))(:)>0)

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