যাদু স্কয়ারটি যাচাই করুন


10

একটি ম্যাজিক বর্গ হল সংখ্যার একটি বর্গাকার অ্যারে, যার সাথে পার্শ্ব n, আলাদা ধনাত্মক পূর্ণসংখ্যা 1, 2, ..., n , এন ² এমনভাবে সাজানো থাকে যে কোনও অনুভূমিক, উল্লম্ব বা প্রধান তির্যক রেখায় n সংখ্যার যোগফল সর্বদা হয় একই সংখ্যা, যা যাদু স্থির হিসাবে পরিচিত।

আপনার প্রোগ্রামটি অবশ্যই স্টাড-ইন এর মাধ্যমে আপনার বর্গক্ষেত্রের দৈর্ঘ্যের দৈর্ঘ্য নির্দিষ্ট করে এমন একটি নম্বর, তারপরে স্কোয়ারের সংখ্যাগুলি অবশ্যই ইনপুট করতে হবে। কোনও সংখ্যা একাধিকবার ব্যবহার করা যাবে না, n than এর চেয়ে বড় সংখ্যা ব্যবহার করা যাবে না এবং সমস্ত সংখ্যা 0 এর চেয়ে বেশি হওয়া আবশ্যক The প্রোগ্রামটি অবশ্যই নির্ধারণ করবে যে সংখ্যার সংমিশ্রণটি ম্যাজিক বর্গক্ষেত্র কিনা।

উত্তর:


4

সিজেম, 47 39 35 33 31 বাইট

l~/{_1fb_,Y${\(_@=\}%:++\z}2*;=

ইনপুট লাগে

4 [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]

1যাদু স্কয়ার 0না হলে ফলাফলগুলি , অন্যথায়।

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

l~/                               "Evaluates the input and split the array into chunks"
                                  "of size N where N is the first integer";
   {                      }2*     "Run this code block 2 times";
    _1fb                          "Copy the 2D array and calculate sum of each row of copy";
        _,                        "Copy the array containing sum of each row and get"
                                  "its length. This is equal to N";
          Y${      }%             "Run this code block for each array of the original"
                                  "2D array that we copied from stack";
             \(_                  "Put the length number to top of stack, decrement and"
                                  "copy that";
                @=\               "Take the element at that index from each row and put"
                                  "N back behind at second position in stack";
                     :+           "Take sum of elements of the array. This is sum of"
                                  "one of the diagonals of the 2D array";
                       +          "Push diagonal sum to row sum array";
                        \z        "Bring original array to top and transpose columns";
                             ;    "At this point, the stack contain 3 arrays:"
                                  "  Array with sum of rows and main diagonal,"
                                  "  Array with sum of columns and secondary diagonal and"
                                  "  The original array. Pop the original array";
                              =   "Check if sum of rows + main diagonal array is equal to ";
                                  "sum of columns + secondary diagonal array";

এটি আরও গল্ফ করা যেতে পারে।

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


6

পাইথন 2: 132 অক্ষর

n,l=input()
r=range
print r(1,n*n+1)==sorted(l)*len({sum(l[i::j][:n])for(i,j)in zip(r(n)+r(0,n*n,n)+[0,n-1],[n]*n+[1]*n+[n+1,n-1])})

একটি উদাহরণ রান:

STDIN: 4,[16,3,2,13,5,10,11,8,9,6,7,12,4,15,14,1]
Output: True

দুটি জিনিস যাচাই করতে হবে:

  1. যোগফলগুলি হ'ল সারি, কলাম এবং ত্রিভুজ সমস্ত সমান
  2. উপাদানগুলি হল একটি ক্রম [1,2,...,n*n].

প্রথমটি এই সাবসেটগুলির সাথে সম্পর্কিত টুকরাগুলির পরিমাণ গ্রহণ করে পরীক্ষা করা হয়। প্রতিটি সারি, কলাম বা তির্যকটি তার প্রারম্ভিক মান এবং এর স্থানচ্যুতি দ্বারা বর্ণিত হয়। আমরা তালিকাটি সম্পর্কিত স্লাইসটি গ্রহণ করি, nউপাদানগুলিকে ছাঁটাই করি এবং এটির যোগ করি। পাইথন এর দশকে [start:end:step]স্বরলিপি, সারি হয় [r*n::1], কলাম হয় [c::n]এবং দুই কর্ণ হয় [0::n+1]এবং [n-1::n-1]। এগুলি 2*n+2উত্পাদিত জোড়াগুলির তালিকা হিসাবে সংরক্ষণ করা হয় zip

আমরা অঙ্কের সেট নিয়ে থাকি এবং এটির দৈর্ঘ্য 1 আছে কিনা তা যাচাই করি Also এছাড়াও, আমরা ইনপুটটি বাছাই করে দেখি যে এটি তালিকা [1,2,...,n*n].Act প্রকৃতপক্ষে, আমরা sorted(l)সমষ্টি-সেটগুলির দৈর্ঘ্য দ্বারা গুণ করে উভয়কে একটি চেকের সাথে একত্রিত করি , যা সর্বদা একটি চেক যোগফলের দৈর্ঘ্য 1 না থাকলে ব্যর্থ হয়।


আমি বুঝতে পারি যে আপনি একটি যুগল এনকোড করতে (i,j)আরো দক্ষতার সঙ্গে একটি একক সংখ্যা হিসাবে x, গ্রহণ i=x%Cএবং j=x/Cকিছু বৃহৎ যথেষ্ট জন্য C। পরে একটি শট দিতে পারে।
xnor

5

এপিএল, 35

∧/2=/(+⌿x,⍉x),+/↑1 1∘⍉¨x(⌽x←⎕⍴⍨,⍨⎕)

ব্যাখ্যা
x←⎕⍴⍨,⍨⎕ ইনপুটটির জন্য অনুরোধ জানায়, এটিকে একটি ম্যাট্রিক্সে x
রূপ দেবে এবং ম্যাট্রিক্সকে বাম থেকে ডানে বিপরীত করে
x(...)ম্যাট্রিক্সের একটি অ্যারে তৈরি করুন: xএবং প্রতিটি ম্যাট্রিকের xবিপরীতে
1 1∘⍉¨, ত্রিভুজের
+/↑ফর্মটি সেই সংখ্যার 2 × n ম্যাট্রিক্সে নিন ত্রিভুজ এবং সারি যোগফল

⍉xএর x
x,পরে ট্রান্সপোজ করুন সাথে x× 2n ম্যাট্রিক্স গঠন
+⌿এবং কলামগুলি যোগ করতে

(+⌿x,⍉x),+/↑1 1∘⍉¨x(⌽x←⎕⍴⍨,⍨⎕)একযোগে যোগফলগুলির একটি অ্যারে গঠন করে
2=/চেক করুন যে একটানা জোড়া সমান হয়
∧/এবং এবং সেই সাথে সমস্ত ফলাফল


3

গণিত 128 125

d = Diagonal; r = Reverse; i = Input[];
Length@Union[Tr /@ Join[p = Partition[i[[2]], i[[1]]], 
t = Transpose@p, {d@p}, {d@t}, {d@r@p}, {d@r@t}]] == 1

যেমন ইনপুট লাগে

{4,{16, 3, 2, 13, 5, 10, 11, 8, 9, 6, 7, 12, 4, 15, 14, 1}}

সত্য


অবশ্যই এখানে প্রচুর পরিমাণে সাদা জায়গা অপসারণ করা যেতে পারে
বিটা ডিকায়

সাদা জায়গা সমস্ত মুছে ফেলা যেতে পারে। পাঠযোগ্যতার জন্য আমি এটি সেখানে রেখেছি। এবং আমি অপ্রয়োজনীয় সাদা স্থান গণনা করি নি।
ডেভিডসি

আপনি Input[r=Reverse]বাইট সংরক্ষণ করতে পারেন । #&@@চেয়ে বাইট খাটো [[1]]। আপনি সম্ভবত Partitionআরও একটি বাইট জন্য infix স্বরলিপি ব্যবহার করতে পারেন । এবং Threadপরিবর্তে কাজ করা উচিত Transpose। বিকল্পভাবে, এই ইউনিকোড অক্ষরটিকে একটি পোস্ট ফিক্স অপারেটর হিসাবে ব্যবহার করুন (ম্যাথামেটিকা ​​এটি ট্রান্সপোজোর জন্য সুপারস্ক্রিপ্ট টির জন্য ব্যবহার করে)।
মার্টিন এন্ডার

3

এপিএল 47 32

টুইনাইটের দুর্দান্ত সমাধানটি ব্যবহার করা এবং আরও কিছু টুইট করা প্রয়োগ করা:

∧/2=/+⌿(1 1∘⍉∘⌽,1 1∘⍉,⍉,⊢)⎕⍴⍨,⍨⎕

ব্যাখ্যা:

এটি ফাংশন ট্রেনগুলি ব্যবহার করে, যা ডায়ালগ ইন্টারপ্রেটারের v14 এ চালু হয়েছিল। এপিএল ডান থেকে বামে চালিত হয়, ইনপুট হয়, তাই প্রথমে মাত্রা, তারপরে সংখ্যার ভেক্টর।

⎕⍴⍨, the ম্যাট্রিক্স এনএক্সএন তৈরি করে

এর পরে ফাংশন ট্রেন আসে যা মূলত ডান আর্গুমেন্টে প্রয়োগ করা হয় (ক্রুশের মধ্যে) কেবল ক্রিয়াকলাপগুলির একটি ক্রম। ফাংশনগুলি হ'ল:

Just ঠিক সঠিক যুক্তি (এটি ম্যাট্রিক্স) ফেরায়

Argument সঠিক যুক্তি ম্যাট্রিক্স স্থানান্তর করে

1 1∘⍉টি তির্যকটি প্রদান করে

1 1∘⍉∘⌽ বিপরীত (অনুভূমিকভাবে) ম্যাট্রিক্সের তির্যকটি প্রদান করে

"," ফাংশন দিয়ে সমস্ত ফলাফল একত্রিত হয়

এই মুহুর্তে, ফলাফলটি একটি ম্যাট্রিক্স যার কলামগুলি পরে সংক্ষিপ্ত করা হয় (+ ⌿)। এইভাবে প্রাপ্ত মানগুলি তারপরে ∧ / 2 = / এর সাথে একই হওয়ার জন্য পরীক্ষা করা হয়

আমি আমার পুরানো সমাধানটি এখানেও রেখে দেব:

{M←⍺ ⍺⍴⍵⋄d←M=⍉M⋄(⊃≡∪)((+/,+⌿)M),+/∘,¨d(⌽d)ר⊂M}

বাম আর্গুমেন্ট হিসাবে ডাইমেনশন নেয়, উপাদানগুলির ভেক্টরকে সঠিক আর্গুমেন্ট হিসাবে গ্রহণ করে, উদাহরণস্বরূপ:

4{M←⍺ ⍺⍴⍵⋄d←M=⍉M⋄(⊃≡∪)((+/,+⌿)M),+/∘,¨d(⌽d)ר⊂M}16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
1

অনলাইনে এখানে চেষ্টা করা যেতে পারে: www.ryapl.org



2

জাভাস্ক্রিপ্ট (E6) 194

ইনপুট এবং প্রদর্শন আউটপুট পড়তে প্রম্পট ব্যবহার করে।
ফায়ারফক্স> 31 দিয়ে কনসোলে পরীক্ষা (অ্যারে.ফিল খুব নতুন)

z=(p=prompt)(n=p()|0).split(' '),u=Array(2*n).fill(e=d=n*(n*n+1)/2),z.map((v,i)=>(r=i/n|0,u[r+n]-=v,u[c=i%n]-=v,d-=v*(r==c),e-=v*(r+c+1==n))),o=!(e|d|u.some(v=>v)),z.sort((a,b)=>a-b||(o=0)),p(o)

কম গল্ফড

n = prompt()|0; // input side length
z = prompt().split(' '); // input list of space separeted numbers  
e = d = n*(n*n+1)/2; // Calc sum for each row, column and diagonal
u = Array(2*n).fill(e), // Init check values for n rows and n columns

z.map( (v,i) => { // loop on number array 
  r = i / n | 0; // row number
  c = i % n; // column number
  u[r+n] -= v; // subtract current value, if correct it will be 0 at loop end
  u[c] -= v; 
  if (r==c) d -= v; // subtract if diagonal \
  if (r+c+1==n) e -=v; // subtract if diagonal /
}),
o=!(e|d|u.some(v=>v)); // true if values for rows, cols and diags are 0
z.sort((a,b)=>a-b||(o=0)); // use sort to verify if there are repeated values in input
alert(o);

2

পাইথ, 24 30 বাইট

&q1l{sM++JcEQCJm.e@bkd_BJqSlQS

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

&q1l{sM++JcEQCJm.e@bkd_BJqSlQSQ   Implicit: Q = evaluated 1st input (contents), E = evaluated 2nd input (side length)
                                  Trailing Q inferred
          cEQ                     Chop E into pieces or length Q
         J                        Store in J
                      _BJ         Pair J with itself with rows reversed
               m                  Map the original and it's reverse, as d, using:
                .e   d              Map each row in d, as b with index k, using:
                  @bk                 Get the kth element of b
                                  The result of this map is [[main diagonal], [antidiagonal]]
        +J                        Prepend rows from J
       +     CJ                   Prepend columns from J (transposed J)
     sM                           Sum each
    {                             Deduplicate
   l                              Length
 q1                               Is the above equal to 1?
&                                 Logic AND the above with...
                          SlQ     ... is the range [1-length(Q)]...
                         q        ... equal to...
                             SQ   ... sorted(Q)

সম্পাদনা: একটি বাগ ঠিক করেছেন, আমাকে জানানোর জন্য @ কেভিন ক্রুজসেনকে ধন্যবাদ: ও)


এই Trueম্যাজিক স্কোয়ারের জন্য এমন সংখ্যাগুলি রয়েছে যেগুলি খুব বড় বা সমস্ত অনন্য নয় with যেমন 4এবং [12,26,23,13,21,15,18,20,17,19,22,16,24,14,11,25]বা 4এবং [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]উভয় আউটপুট True। (প্রায় সকল বিদ্যমান উত্তরের একই সমস্যা থাকলেও 4 বছর আগে তারা পোস্ট করা হওয়ায় আমি কোনও মন্তব্যে তাদের ভুলগুলি সংশোধন করার জন্য মাথা ঘামাইনি))
ঘামাইনি

@ কেভিন ক্রুইজসেন দান, আমি অন্যান্য প্রয়োজনীয়তার কথা ভুলে গিয়েছি এমন পরিমাণগুলি যাচাইয়ের জন্য আমি এতটা মনোযোগী হয়েছি ... আমি এমন একটি ডোপ
সোক

1

LUA 186 চারস

s=io.read(1)v=io.read(2)d=0 r=0 for i=1,#s do t=0 for j = 1, #s do t=t+s[i][j]end d=d+s[i][i] r=r+s[i][#s-i+1]if t ~= v then o=true end end if d~=v and r~= v then o=true end print(not o)

1

05 এ বি 1 ই , 24 বাইট

ô©O®øO®Å\O®Å/O)˜Ë²{¹nLQ*

ইনপুট ফর্ম্যাট: 4\n[2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15]। ফলাফল 1/ 0যথাক্রমে সত্য / মিথ্যা জন্য

এটি অনলাইনে চেষ্টা করুন বা আরও কিছু পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

ô       # Split the 2nd (implicit) input into parts of a size of the 1st (implicit) input
        #  i.e. [2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15] and 4
        #   → [[2,16,13,3],[11,5,8,10],[7,9,12,6],[14,4,1,15]]
 ©      # Store it in the register (without popping)
  O     # Take the sum of each row
        #  i.e. [[2,16,13,3],[11,5,8,10],[7,9,12,6],[14,4,1,15]] → [34,34,34,34]
®       # Push the matrix from the register again
 ø      # Zip/transpose; swapping rows/columns
        #  i.e. [[2,16,13,3],[11,5,8,10],[7,9,12,6],[14,4,1,15]]
        #   → [[2,11,7,14],[16,5,9,4],[13,8,12,1],[3,10,6,15]]
  O     # Sum each inner list again
        #  i.e. [[2,11,7,14],[16,5,9,4],[13,8,12,1],[3,10,6,15]] → [34,34,34,34]
®       # Push the matrix from the register again
 Å\     # Get the top-left to bottom-right main diagonal of it
        #  i.e. [[2,16,13,3],[11,5,8,10],[7,9,12,6],[14,4,1,15]] → [2,5,12,15]
   O    # Sum it together
        #  i.e. [2,5,12,15] → 34
®       # Push the matrix from the register again
 Å/     # Get the top-right to bottom-left main diagonal of it
        #  i.e. [[2,16,13,3],[11,5,8,10],[7,9,12,6],[14,4,1,15]] → [3,8,9,14]
   O    # Sum it together
        #  i.e. [3,8,9,14] → 34
)       # Wrap everything on the stack into a list
        #  → [[34,34,34,34],[34,34,34,34],34,34]
 ˜      # Flatten this list
        #  i.e. [[34,34,34,34],[34,34,34,34],34,34] → [34,34,34,34,34,34,34,34,34,34]
  Ë     # Check if all values are equal to each other
        #  i.e. [34,34,34,34,34,34,34,34,34,34] → 1 (truthy)
²       # Push the second input again
 {      # Sort it
        #  i.e. [2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15]
        #  → [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
  ¹n    # Push the first input again, and take its square
        #  i.e. 4 → 16
    L   # Create a list in the range [1, squared_input]
        #  i.e. 16 → [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
     Q  # Check if the two lists are equal
        #  i.e. [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
        #   and [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] → 1 (truthy)
*       # Check if both checks are truthy by multiplying them with each other
        #  i.e. 1 and 1 → 1
        # (and output the result implicitly)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.