একটি ম্যাট্রিক্স এর অঙ্কের সাথে প্যাড করুন


23

চ্যালেঞ্জ:

একটি স্কোয়ার ইনপুট ম্যাট্রিক্স এ দেওয়া হয়েছে , চারদিকে চারদিকে এক সারি এবং একটি কলাম সহ ম্যাট্রিক্স প্যাড করুন।

  • উপরের এবং নীচের সারিতে প্রতিটি উপাদানের মান প্রতিটি সংশ্লিষ্ট কলামে উপাদানের যোগফল হওয়া উচিত।
  • বাম এবং ডান কলামের প্রতিটি উপাদানের মান প্রতিটি একই সারিতে থাকা উপাদানের যোগফল হওয়া উচিত।
  • উপরের বামে এবং নীচের ডান কোণায় থাকা উপাদানগুলির মানটি তির্যকের উপরের উপাদানের যোগফল হওয়া উচিত
  • উপরের ডানদিকে এবং নীচে বাম কোণে উপাদানগুলির মানটি অ্যান্টি-ডায়াগোনালের উপাদানগুলির যোগফল হওয়া উচিত।

উদাহরণ:

A = 
1   5   3
3   2   4
2   5   5

Output:
 8    6   12   12    7
 9    1    5    3    9
 9    3    2    4    9
12    2    5    5   12
 7    6   12   12    8

ব্যাখ্যা:

উপরের বাম এবং নীচের ডান উপাদানগুলির তির্যক 1 + 2 + 5 = 8 এর যোগফল । উপরের ডান এবং নীচে বাম উপাদানগুলি হ'ল অ্যান্টি-ডায়াগোনাল 2 + 2 + 3 = 7 এর যোগফল ।

শীর্ষ এবং নীচের সারিটি (কোণগুলি ব্যতীত) : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 এবং 3 + 4 + 5 = 12 এর প্রতিটি কলামের যোগফল । একইভাবে, বাম এবং ডান কলাম (কোণে ব্যতীত) সারি প্রতিটি সমষ্টি হয় একটি : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 এবং 2 + 5 + 5 = 12

ইনপুট:

  • অ-নেতিবাচক পূর্ণসংখ্যাসহ একটি খালি খালি স্কোয়ার ম্যাট্রিক্স।
  • .চ্ছিক ফর্ম্যাট

আউটপুট:

  • উপরে বর্ণিত ম্যাট্রিক্স প্যাডড
  • .চ্ছিক ফর্ম্যাট, তবে এটি অবশ্যই ইনপুট ফর্ম্যাটের সমান হতে হবে

পরীক্ষার কেস:

আপনি যদি ইনপুট ফর্ম্যাটটিকে আরও উপযুক্ত একটিতে (উদাহরণস্বরূপ ) রূপান্তর করতে চান তবে এই চ্যালেঞ্জের জমাগুলি ব্যবহার করুন [[1, 5],[0, 2]]

0
----------------
0 0 0
0 0 0
0 0 0

1 5
0 2
----------------
3 1 7 5
6 1 5 6
2 0 2 2
5 1 7 3

17   24    1    8   15
23    5    7   14   16
 4    6   13   20   22
10   12   19   21    3
11   18   25    2    9 
----------------
65   65   65   65   65   65   65
65   17   24    1    8   15   65
65   23    5    7   14   16   65
65    4    6   13   20   22   65
65   10   12   19   21    3   65
65   11   18   25    2    9   65
65   65   65   65   65   65   65

15    1    2   12
 4   10    9    7
 8    6    5   11
 3   13   14    0
----------------
30   30   30   30   30   30
30   15    1    2   12   30
30    4   10    9    7   30
30    8    6    5   11   30
30    3   13   14    0   30
30   30   30   30   30   30

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ততম সমাধানটি জয়ী হয়। ব্যাখ্যা অত্যন্ত উত্সাহিত হয়।


2
এটি কি যাদু স্কোয়ারগুলি পরীক্ষা করতে হবে?
mdahmoune

কেবল চেকিং করা কিছুটা সহজ, তবে কোনও স্কোয়ারটি এইভাবে যাদু কিনা তা দেখতে সত্যই সহজ, হ্যাঁ :-)
স্টিভি গ্রিফিন

উত্তর:


5

অক্টাভা , 64 বাইট

টম কার্পেন্টারকে 4 বাইট সংরক্ষণের জন্য এবং মূল কোডটিতে আমার একটি ত্রুটি সংশোধন করার জন্য ধন্যবাদ !

@(a)[b=(t=@trace)(a),c=sum(a),d=t(flip(a));z=sum(a,2),a,z;d,c,b]

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

ব্যাখ্যা:

@(a)                 % Anonymous function that takes the matrix 'a' as input
 [ ... ]             % Concatenate everything inside to a single matrix
  b=(t=@trace)(a),   % Clever trick by Tom Carpenter. Save a function handle 
                     % for 't=trace', and call it with 'a' as input
                     % Save the result in the variable 'b'
  c=sum(a)           % Sum of all columns of 'a'
  d=t(flip(a));      % Save the trace of 'a' flipped as a variable 'd', while 
                     % concatenating [b,c,d] horizontally at the same time, creating the 
                     % first row of the output
  z=sum(a,2)         % The sum of each row of the input, and store it in a variable 'z'
  ,a,z;              % Concatenate it with 'a' and 'z' again, to create the middle part of the output
 d,c,b]              % Add [d,c,b] to complete the bottom row

দ্রষ্টব্য, আমি চ্যালেঞ্জটি পোস্ট করার অনেক পরে এটি লিখেছিলাম।


4

জেলি , 27 বাইট

,UŒDḢ$S$€,Ṛ$j€SW€jSẋ¥€2$j"$

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


2
দয়া করে এটি কীভাবে কাজ করে তা জানতে চাই।
কমরেড স্পার্কলপনি

@ কমরেডস্পার্কলপনি আমি এই মুহূর্তে একটি ব্যাখ্যা লেখার সময় পাই কিনা জানি না, দুঃখিত।
এরিক আউটগল্ফার

এটা ঠিক আছে, চিন্তা করবেন না।
কমরেড স্পার্কলপনি

4

এমএটিএল , 27 26 বাইট

,!tXswyv]GXds5L(PGPXds5L(P

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

,        % Do the following twice
  !      %   Tranpose. Takes input implititly in the first iteration
  t      %   Duplicate
  Xs     %   Row vector with the sum of each column
  wy     %   Push a copy to the bottom of the stack
  v      %   Concatenate stack vertically. This attaches the sum of
         %   each row (first iteration) and column (second), leaving 
         %   the matrix with the correct orientation (transposed twice)
]        % End
G        % Push input again
Xds      % Column vector with the diagonal of the matrix. Sum of vector
5L(      % Write that into first and last entries of the result matrix
         % matrix; that is, its upper-left and lower-right corners
P        % Flip result matrix vertically
GP       % Push input matrix vertically flipped
Xds      % Diagonal, sum. Since the input has been vertically flipped,
         % this gives the sum of the anti-diagonal of the input.
5L(      % Write that into the upper-left and lower-right corners of
         % the verticallly flipped version of the result matrix
P        % Flip vertically again, to restore initial orientation
         % Implicitly display

অবশ্যই এমএটিএল জেলির বিপরীতে ম্যাট্রিকগুলি নিয়ে কাজ করার জন্য ডিজাইন করা হয়েছে। > _>
এরিক দি আউটগল্ফার

@ এরিকথ আউটগলফার তবে আপনার উত্তরে আরও ইউরো রয়েছে!
লুইস মেন্ডো

3
হ্যাঁ এর ইউরো ডলার এবং ইয়েন রয়েছে ... দুর্ভাগ্যক্রমে এটি এখানে বিজয়ী মানদণ্ড নয়। ডি:
এরিক আউটগল্ফার

3

এপিএল (ডায়ালগ) , 37 বাইট

(d,+⌿,d∘⌽)⍪(+/,⊢,+/)⍪d∘⌽,+⌿,d←+/1 1∘⍉

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

1 1∘⍉ তির্যক (লিট। উভয় অক্ষকে একটিতে ভেঙে ফেলা)

d← সেই ফাংশনটি ডি হিসাবে সংরক্ষণ করুন এবং এটি আর্গুমেন্টে প্রয়োগ করুন

+⌿ কলামের যোগফলগুলি প্রিপেন্ড করুন

d∘⌽,বিপরীত যুক্তির জন্য  প্রিপেন্ড ডি প্রয়োগ করা হয়

(… উপরে নীচে )⍪ স্ট্যাক করুন:

+/,⊢,+/ সারি যোগফল, অবিস্মরণীয় যুক্তি, সারি যোগফল

(… উপরে নীচে )⍪ স্ট্যাক করুন:

d,+⌿,d∘⌽বিপরীত যুক্তি প্রয়োগ  করে আর্গুমেন্ট, কলামের পরিমাণ, d প্রয়োগ করা হয়েছে


3

জেলি , 26 বাইট

ŒDµḊṖѵ€1¦ŒḌU
S;;S
Ç€Zµ⁺ÑÑ

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

আশ্চর্যজনকভাবে এরিকের সমাধান থেকে পৃথক দেখাচ্ছে ।

পরিশেষে আমি কীভাবে ¦কাজ করে তা বুঝতে সক্ষম হয়েছি (জেলি কোড, ডিওএল দিয়ে ডিবাগ করে)। খুব খারাপ এটির ক্ষেত্রে আমার ক্ষেত্রে কাজ করা দরকার Ç

ব্যাখ্যা

কোডটিতে তিনটি লিঙ্ক ব্যবহার করা হয়েছে। প্রথম সহায়ক লিঙ্কটি উভয় প্রান্তে একটি ভেক্টরকে প্যাড করে, দ্বিতীয় সহায়ক লিঙ্কটি ম্যাট্রিক্সের দুটি কোণ স্থির করে এবং প্রধান লিঙ্ক এগুলি যথাযথভাবে কল করে।

Ç€Zµ⁺ÑÑ    Main link. Argument: M (matrix)
Ç            Call the first helper link (pad row with sums)...
 €           ...on each row of the matrix.
  Z          Transpose, so that the second invocation uses the columns.
   µ         Begin a new monadic chain.
    ⁺        Repeat the previous chain (everything up to here).
     ÑÑ      Call the second helper link twice on the whole matrix.

S;;S    First helper link. Argument: v (1-dimensional list)
S         Sum the argument list.
 ;        Append the argument list to the sum.
  ;       Append...
   S      ...the sum of the argument list.

ŒDµḊṖѵ€1¦ŒḌU    Second helper link. Argument: M (matrix)
ŒD                 Get the diagonals of the matrix, starting with the main diagonal.
  µ                Begin a new monadic chain.
      µ€           Perform the following actions on each diagonal...
        1¦         ...and keep the result for the first item (main diagonal):
   Ḋ                 Remove the first item (incorrect top corner).
    Ṗ                Remove the last item (incorrect bottom corner).
     Ñ               Call the first helper link on the diagonal to pad it with its sum.
          ŒḌ       Convert the diagonals back to the matrix.
            U      Reverse each row, so that consecutive calls fix the other corners.

3

পাইথন 3 , 155 বাইট

এটি @ লেকইনুনের পরামর্শ, যা 54 বাইট সংরক্ষণ করে । আমি তখন নিজেকে কিছুটা গল্ফ দিয়েছি।

def f(m):l=len(m);r=range(l);s=sum;b=[s(m[i][i]for i in r)];c=[s(m[i][l+~i]for i in r)];d=[*map(s,zip(*m))];return[b+d+c,*[[s(a),*a,s(a)]for a in m],c+d+b]

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

প্রাথমিক সমাধান - পাইথন 3 , 216 বাইট

def f(m):l=len(m);r,s=range(l),sum;a,b,c,d=s(m[i][i]for i in r),s(m[i][l-i-1]for i in r),[s(m[i][j]for j in r)for i in r],[s(m[i][j]for i in r)for j in r];print([[a]+d+[b]]+[[c[i]]+m[i]+[c[i]]for i in r]+[[b]+d+[a]])

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



ধন্যবাদ মাত্র ~ 190 বাইট দিয়ে আপডেট করা হচ্ছে, এটি অনেক খাটো: পি
মিঃ এক্সকডার

2

পাইথন 2 , 268 250 184 174 বাইট

10 স্টিভি গ্রিফিনকে ধন্যবাদ

from numpy import *
a,c,v,s=sum,trace,vstack,matrix(input())
l,r,d,e=a(s,0),a(s,1),c(s),c(fliplr(s))
print hstack((v(([[d]],r,[[e]])),v((l,s,l)),v(([[e]],r,[[d]])))).tolist()

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

কিছু ব্যাখ্যা ইনপুটটি ম্যাট্রিক্স হিসাবে আপলোড করা হয়। প্রথমে কোডটি প্রতিটি কলামের যোগফল এবং প্রতিটি সারির numpy.sum ব্যবহার করে গণনা করে। তারপরে এটি numpy.trace দ্বারা ত্রিভুজের যোগফলকে গণনা করে। এর পরে এটি ম্যাট্রিক্সে বাম-ডান ফ্লিপ তৈরি করে অন্যান্য তির্যকটি অর্জন করে। অবশেষে, এটি টুকরাগুলি একসাথে আঠালো করতে numpy.vstack এবং numpy.hstack ব্যবহার করে।


@ স্টিভি গ্রিফিন ওকে, আমি সবেমাত্র কোডটি আপডেট করেছি :)
এমডাহ্মৌনে

1
আমি বিশ্বাস করি এটি 174 tio.run/…
স্টিভি গ্রিফিন

2

আর, 129 বাইট

pryr::f(t(matrix(c(d<-sum(diag(m)),c<-colSums(m),a<-sum(diag(m[(n<-nrow(m)):1,])),t(matrix(c(r<-rowSums(m),m,r),n)),a,c,d),n+2)))

একটি বেনাম ফাংশন যা ইনপুট হিসাবে একটি বর্গ ম্যাট্রিক্স নেয়। আগ্রহ থাকলে আমি একটি ব্যাখ্যা পোস্ট করব।


2

পিএইচপি , 211 বাইট

<?foreach($_GET as$l=>$r){$y=0;foreach($r as$k=>$c){$y+=$c;$x[$k]+=$c;$l-$k?:$d+=$c;($z=count($_GET))-1-$k-$l?:$h+=$c;}$o[]=[-1=>$y]+$r+[$z=>$y];}$o[]=[-1=>$h]+$x+[$z=>$d];print_r([-1=>[-1=>$d]+$x+[$z=>$h]]+$o);

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

সম্প্রসারিত

foreach($_GET as$l=>$r){
  $y=0; # sum for a row
  foreach($r as$k=>$c){
    $y+=$c; # add to sum for a row
    $x[$k]+=$c; # add to sum for a column and store in array
    $l-$k?:$d+=$c; # make the diagonal sum left to right
    ($z=count($_GET))-1-$k-$l?:$h+=$c; # make the diagonal sum right to left
  }
  $o[]=[-1=>$y]+$r+[$z=>$y]; # add to result array the actual row with sum of both sides
}
$o[]=[-1=>$h]+$x+[$z=>$d]; # add to result array the last array
print_r([-1=>[-1=>$d]+$x+[$z=>$h]]+$o); #output after adding the first array to the result array

2

পাইথন 3 , 125 বাইট

from numpy import*
f=lambda m,t=trace,s=sum:c_[r_[t(m),s(m,1),t(m[::-1])],c_[s(m,0),m.T,s(m,0)].T,r_[t(m[::-1]),s(m,1),t(m)]]

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

সামান্য শৃঙ্খলাবদ্ধ:

import numpy as np

def f_expanded(m):
    return np.c_[np.r_[np.trace(m), np.sum(m, 1), np.trace(m[::-1])],
                 np.c_[np.sum(m, 0), m.T, np.sum(m, 0)].T,
                 np.r_[np.trace(m[::-1]), np.sum(m, 1), np.trace(m)]]

এই numpy অ্যারে হিসাবে ফর্ম্যাট ইনপুট নেয়, তারপর ব্যবহার np.c_এবং np.r_ইন্ডেক্স সরঞ্জাম এক বারেই একটি নতুন অ্যারে নির্মাণ করতে। np.traceএবং np.sumযথাক্রমে ত্রিভুজ এবং অন্য যে কোনও জায়গায় বরাবর অঙ্কগুলি গণনা করতে ব্যবহৃত হয়। Tঅঙ্কগুলি যুক্ত করার আগে এবং পরে ট্রান্সপোজ গ্রহণ করতে ব্যবহৃত হয় কারণ এটি সমস্ত অ্যারেটি 2-মাত্রিক তৈরি এবং ব্যবহারের চেয়ে কম np.r_। দ্বিতীয় ত্রিভুজের জন্য ট্রেসটির m[::-1]তুলনা rot90(m)বা fliplr(m)সন্ধান করার জন্য বাইটগুলি সংরক্ষণ করে ।


চমৎকার উত্তর! সাইটে স্বাগতম :)
ডিজেএমসিএমহেম

1

জাভাস্ক্রিপ্ট (ES6), 170 বাইট

(a,m=g=>a.map((_,i)=>g(i)),s=x=>eval(x.join`+`))=>[[d=s(m(i=>a[i][i])),...c=m(i=>s(m(j=>a[j][i]))),g=s(m(i=>a[i][a.length-i-1]))],...a.map(b=>[r=s(b),...b,r]),[g,...c,d]]

ইনপুট এবং আউটপুট হল 2D সংখ্যার অ্যারে।

ব্যাখ্যা

(a,                             // input matrix: a
    m=g=>a.map((_,i)=>g(i)),    // helper func m: map by index
    s=x=>eval(x.join`+`)        // helper func s: array sum
) =>
[
    [
        d = s(m(i=>a[i][i])),           // diagonal sum: d
        ...c=m(i=>s(m(j=>a[j][i]))),    // column sums: c
        g = s(m(i=>a[i][a.length-i-1])) // antidiagonal sum: g
    ],
    ...a.map(b=>[r = s(b), ...b, r]),   // all rows with row sums on each end
    [g, ...c, d]                        // same as top row, with corners flipped
]

পরীক্ষার স্নিপেট

ইনপুট / আউটপুট নতুন লাইন এবং ট্যাবগুলির সাথে ফর্ম্যাট করা হয়েছে।

f=
(a,m=g=>a.map((_,i)=>g(i)),s=x=>eval(x.join`+`))=>[[d=s(m(i=>a[i][i])),...c=m(i=>s(m(j=>a[j][i]))),g=s(m(i=>a[i][a.length-i-1]))],...a.map(b=>[r=s(b),...b,r]),[g,...c,d]]

let tests=[[[0]],[[1,5],[0,2]],[[17,24,1,8,15],[23,5,7,14,16],[4,6,13,20,22],[10,12,19,21,3],[11,18,25,2,9]],[[15,1,2,12],[4,10,9,7],[8,6,5,11],[3,13,14,0]]];
<select id=S oninput="I.value=S.selectedIndex?tests[S.value-1].map(s=>s.join`\t`).join`\n`:''"><option>Tests<option>1<option>2<option>3<option>4</select> <button onclick="O.innerHTML=I.value.trim()?f(I.value.split`\n`.map(s=>s.trim().split(/\s+/g))).map(s=>s.join`\t`).join`\n`:''">Run</button><br><textarea rows=6 cols=50 id=I></textarea><pre id=O>


0

লোগো , 198 বাইট

to g :v[:h reduce "+ :v]
op(se :h :v :h)
end
to f :s[:a reduce "+ map[item # ?]:s][:b reduce "+ map[item # reverse ?]:s][:c apply "map se "sum :s]
op `[[,:a ,@:c ,:b],@[map "g :s][,:b ,@:c ,:a]]
end

ফাংশনটি fএকটি মেট্রিক্সকে 2D তালিকা হিসাবে গ্রহণ করে তারপরে ফলাফল ম্যাট্রিক্স আউটপুট দেয়। gসাহায্যকারী ফাংশন।

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