ম্যাট্রিক্স পাওয়ার সন্ধান করুন


9

সমস্যা

একটি প্রোগ্রাম বা ফাংশন যা একটি ম্যাট্রিক্স উত্থাপিত ফল নিরূপণ করতে পারেন তৈরি করুন এন শক্তি। আপনার কোড একটি অবাধ বর্গাকার ম্যাট্রিক্সের নিতে হবে একজন এবং একটি অ-নেতিবাচক পূর্ণসংখ্যা এন , এবং মান একটি ম্যাট্রিক্স আসতে একটি এন

বিধিনিষেধ

ম্যাট্রিক্স শক্তি এবং ম্যাট্রিক্স পণ্য গণনা করে অন্তর্নির্মিত ফাংশনগুলিকে অনুমোদিত নয়।

কোড-গল্ফের জন্য বাকি স্ট্যান্ডার্ড বিধিগুলি প্রযোজ্য।

ব্যাখ্যা

একটি বর্গাকার ম্যাট্রিক্সের দেওয়া একটি , এর মান একটি এন = হবে AA ⋯ একজন (বারংবার ম্যাট্রিক্স পণ্য একজন নিজেই সঙ্গে, এন বার)। যদি এন ইতিবাচক হয় তবে সুনির্দিষ্ট স্ট্যান্ডার্ডটি ব্যবহৃত হয়। যখন এন শূন্য হয়, একই আদেশ দিয়ে পরিচয় ম্যাট্রিক্স একটি ফল।

লক্ষ্য

এটি কোড-গল্ফ এবং সংক্ষিপ্ততম কোডের জয়।

পরীক্ষার কেস

এখানে A হ'ল ইনপুট ম্যাট্রিক্স, n হ'ল ইনপুট পূর্ণসংখ্যা এবং r হল আউটপুট ম্যাট্রিক্স যেখানে r = A n

n = 0
A = 62 72
    10 34
r =  1  0
     0  1

n = 1
A = 23 61 47
    81 11 60
    42  9  0
r = 23 61 47
    81 11 60
    42  9  0

n = 2
A =  12  28 -26  3
     -3 -10 -13  0
     25  41   3 -4
    -20 -14  -4 29
r = -650 -1052  -766 227
    -331  -517   169  43
     332   469 -1158 -53
    -878  -990   574 797

n = 4
A = -42 -19  18 -38
    -33  26 -13  31
    -43  25 -48  28
     34 -26  19 -48
r = -14606833  3168904 -6745178  4491946
      1559282  3713073 -4130758  7251116
      8097114  5970846 -5242241 12543582
     -5844034 -4491274  4274336 -9196467

n = 5
A =  7  0 -3  8 -5  6 -6
     6  7  1  2  6 -3  2
     7  8  0  0 -8  5  2
     3  0  1  2  4 -3  4
     2  4 -1 -7 -4 -1 -8
    -3  8 -9 -2  7 -4 -8
    -4 -5 -1  0  5  5 -1
r =  39557  24398 -75256 131769  50575   14153  -7324
    182127  19109   3586 115176 -23305    9493 -44754
    146840  31906 -23476 190418 -38946   65494  26468
     42010 -21876  41060 -13950 -55148   19290   -406
     44130  34244 -35944  34272  22917  -39987 -54864
      1111  40810 -92324  35831 215711 -117849 -75038
    -70219   8803 -61496   6116  45247   50166   2109

3
ম্যাট্রিক্স পণ্য বা ম্যাট্রিক্স বিপরীতের জন্য বিল্ট-ইনগুলি সম্পর্কে কী?
ডেনিস

@ ডেনিস আমিও সেগুলি নিষিদ্ধ করার কথা ভাবছিলাম, তবে এটি খুব সীমাবদ্ধ মনে হয়েছিল
মাইল

2
অন্তর্নির্মিত ম্যাট্রিক্স বিপর্যয় ব্যতীত ভাষাগুলির জন্য, এটি আমাকে একটি গিরগিটি চ্যালেঞ্জ হিসাবে আঘাত করে কারণ স্ক্র্যাচ থেকে একটি ম্যাট্রিক্সকে উল্টানো পুনরাবৃত্ত পণ্যটি নেওয়া থেকে বেশ শক্ত বলে মনে হয়।
xnor

2
আমি @ এক্সনরের সাথে একমত এবং যদি কোনও ভাষার ম্যাট্রিক্স বিপরীত না থাকে তবে ম্যাট্রিক্স শক্তি থাকে? A^-1বিকল্প হিসাবে ব্যবহার করা যেতে পারে inv(A)?
লুইস মেন্ডো

1
হয় exp(k*log(M))মঞ্জুরিপ্রাপ্ত? (যদিও এটি অ-অনন্য শাখাগুলির কারণে এটি কাজ করতে পারে না))
xnor

উত্তর:


4

জেলি , 17 16 15 বাইট

Z×'³S€€
LṬ€z0Ç¡

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

গ্রিড আউটপুট সহ পারমলিক্স: পরীক্ষার কেস 1 | পরীক্ষার কেস 2 | পরীক্ষার কেস 3 | পরীক্ষার কেস 4 | পরীক্ষার মামলা ৫

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

LṬ€z0Ç¡  Main link. Arguments: A (matrix), n (power)

L        Get the length l of A.
 Ṭ€      Turn each k in [1, ..., l] into a Boolean list [0, 0, ..., 1] of length k.
   z0    Zip; transpose the resulting 2D list, padding with 0 for rectangularity.
         This constructs the identity matrix of dimensions k×k.
     Ç¡  Execute the helper link n times.

Z×'³S€€  Helper link. Argument: B (matrix)

Z        Zip; transpose rows and columns of B.
   ³     Yield A.
 ×'      Spawned multiplication; element-wise mutiply each rows of zipped B (i.e.,
         each column of B) with each row of A.
         This is "backwards", but multiplication of powers of A is commutative.
    S€€  Compute the sum of each product of rows.

5

এমএটিএল , 20 বাইট

XJZyXyi:"!J2$1!*s1$e

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

ব্যাখ্যা

এটি ম্যানুয়ালি করে ম্যাট্রিক্স গুণকে এড়িয়ে চলে, ভেক্টরাইজড যোগফলের পরে সম্প্রচারের সাথে উপাদান-ভিত্তিক গুণ ব্যবহার করে। বিশেষত, ম্যাট্রিক্স Mএবং Nউভয় আকারের × s এর গুণিত করতে :

  1. TRANSPOSE M। ফলাফল ম্যাট্রিক্স কল করুন P
  2. এর মাত্রা স্থানপরিবর্তন করা Nযেমন যে Nহয় "পরিণত" একটি ঘূর্ণন অক্ষ প্রথম মাত্রা বরাবর একটি দান, গুলি × 1 × গুলি , 3D অ্যারে বলতে Q
  3. অন্তর্নিহিত সম্প্রচারের মাধ্যমে Pপ্রতিটি মৌলের প্রতিটি উপাদানকে গুণিত করুন Q। এর অর্থ এই যে Pস্বয়ংক্রিয়ভাবে প্রতিলিপি করা হয় গুলি বার তৃতীয় মাত্রা বরাবর, এবং Qপ্রতিলিপি করা হয় গুলি দ্বিতীয় বরাবর বার তাদের জন্য উভয় গুলি × গুলি × গুলি , আগে প্রকৃত উপাদান ভিত্তিক গুণ সঞ্চালিত হয়।
  4. প্রথম মাত্রা বরাবর একটি 1 × s × s অ্যারে উত্পাদন করে Sum
  5. নেতৃস্থানীয় Singleton মাত্রা আলিঙ্গন, একটি উত্পাদন করতে গুলি × গুলি ফলাফল।

মন্তব্য করা কোড:

XJ      % take matrix A. Copy to clipboard J
ZyXy    % generate identity matrix of the same size
i:      % take exponent n. Generate range [1 2 ... n] (possibly empty)
"       % for each element in that range
  !     %   transpose matrix with product accumulated up to now (this is step 1)
  J     %   paste A
  2$1!  %   permute dimensions: rotation along first-dimension axis (step 2)
  *     %   element-wise multiplication with broadcast (step 3)
  s     %   sum along first dimension (step 4)
  1$e   %   squeeze out singleton dimension, i.e. first dimension (step 5)
        % end for. Display

0 এর জন্য ব্যর্থ ....
ক্যালকুলেটরফলাইন

@ ক্যাটসআরএলফ্লি ধন্যবাদ! সংশোধন করা হয়েছে
লুইস মেন্ডো

3

এপিএল, 32 31 অক্ষর

{⍺=0:(⍴⍵)⍴1⍨1+≢⍵⋄+.×⍨⍣(⍺-1)⊣⍵}

বাম আর্গুমেন্টকে ম্যাট্রিক্সে ডান যুক্তির উত্থাপন করার শক্তি। সবচেয়ে কঠোর (বেশিরভাগ স্থান গ্রহণকারী) বিটটি সেই ক্ষেত্রে পরিচয় ম্যাট্রিক্স তৈরি করছে যেখানে কাঙ্ক্ষিত ব্যয়কারী 0 হয়। প্রকৃত গণনাটি সাধারণভাবে অভ্যন্তরীণ পণ্য ( .) অপারেশনগুলির সাথে +এবং ×হিসাবে কার্যকরভাবে ম্যাট্রিক্স পণ্য হিসাবে তৈরি হয় on এটি পাওয়ার অপারেটরের সাথে মিলিত ("পুনরাবৃত্তি") সমাধানের মাংস তৈরি করে।


1: আপনি কি সেই স্টেফানো যা ২০১ Dan সালের খেলায় ড্যান অ্যান্ড নিককে এক বাইটে হারিয়েছেন ?! 2. (1+≢⍵)↑1=> 1↑⍨1+≢⍵একটি বাইট সংরক্ষণ করুন।
জাকারি

হ্যাঁ যে সম্পর্কে.
lstefano

2

সেজ, 112 বাইট

lambda A,n:reduce(lambda A,B:[[sum(map(mul,zip(a,b)))for b in zip(*B)]for a in A],[A]*n,identity_matrix(len(A)))

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

ব্যাখ্যা:

অভ্যন্তরীণ ল্যাম্বদা ( lambda A,B:[[sum(map(mul,zip(a,b)))for b in zip(*B)]for a in A]) হ'ল ম্যাট্রিক্সের গুণকের এক সরল বাস্তবায়ন। বহিরাগত ল্যাম্বদা ( lambda A,n:reduce(...,[A]*n,identity_matrix(len(A)))) reduceআইট্রেটেড ম্যাট্রিক্স গুণ দ্বারা (পূর্বোক্ত হোমমেড ম্যাট্রিক্স গুণিত ফাংশন ব্যবহার করে ) ম্যাট্রিক্স পাওয়ার গণনা করতে ব্যবহার করে, সমর্থন করার জন্য প্রাথমিক মান হিসাবে পরিচয় ম্যাট্রিক্স ব্যবহার করে n=0


2

জুলিয়া, 90 86 68 বাইট

f(A,n)=n<1?eye(A):[A[i,:][:]⋅f(A,n-1)[:,j]for i=m=1:size(A,1),j=m]

এটি একটি পুনরাবৃত্ত ফাংশন যা ম্যাট্রিক্স ( Array{Int,2}) এবং একটি পূর্ণসংখ্যা গ্রহণ করে এবং একটি ম্যাট্রিক্স দেয়।

Ungolfed:

function f(A, n)
    if n < 1
        # Identity matrix with the same type and dimensions as the input
        eye(A)
    else
        # Compute the dot product of the ith row of A and the jth column
        # of f called on A with n decremented
        [dot(A[i,:][:], f(A, n-1)[:,j]) for i = (m = 1:size(A,1)), j = m]
    end
end

এটি অনলাইন চেষ্টা করুন! (সর্বশেষ পরীক্ষার ক্ষেত্রে ব্যতীত সমস্ত কিছুই অন্তর্ভুক্ত, যা সাইটের পক্ষে খুব ধীর)

ডেনিসকে 18 বাইট সংরক্ষণ করে!


2

পাইথন 2.7, 158 145 বাইট

এখানে সবচেয়ে খারাপ উত্তর, তবে পাইথনে আমার সেরা গল্ফ। কমপক্ষে ম্যাট্রিক্সের গুণটি কীভাবে করা যায় তা শিখতে মজা পেয়েছিল।

Golfed:

def q(m,p):
 r=range(len(m))
 if p<1:return[[x==y for x in r]for y in r]
 o=q(m,p-1)
 return[[sum([m[c][y]*o[x][c]for c in r])for y in r]for x in r]

ব্যাখ্যা:

#accepts 2 arguments, matrix, and power to raise to
def power(matrix,exponent):
 #get the range object beforehand
 length=range(len(matrix))
 #if we are at 0, return the identity
 if exponent<1:
  #the Boolean statement works because Python supports multiplying ints by bools
  return [[x==y for x in length] for y in length]
 #otherwise, recur
 lower=power(matrix,exponent-1)
 #and return the product
 return [[sum([matrix[c][y]*lower[x][c] for c in length]) for y in length] for x in length]

1

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

(n,a)=>[...Array(n)].map(_=>r=m(i=>m(j=>m(k=>s+=a[i][k]*r[k][j],s=0)&&s)),m=g=>a.map((_,n)=>g(n)),r=m(i=>m(j=>+!(i^j))))&&r

আমার ব্যবহার করে একটি 132 বাইট সংস্করণ reduceছিল তবে আমি কেবল aপ্রায়শই ম্যাপিং করছিলাম যে এটি আমার জন্য এটির জন্য কোনও সহায়ক ফাংশন লিখতে 9 বাইট ছোট হবে। পরিচয় ম্যাট্রিক্স তৈরি করে এবং aদীর্ঘকাল ধরে এটির গুণ করে কাজ করে n। এখানে অনেকগুলি এক্সপ্রেশন রয়েছে যা ফিরে আসে 0বা এগুলির 1জন্য i == jতবে সেগুলি 7 বাইট দীর্ঘ বলে মনে হয়।



1

আর, 49 বাইট

f=function(m,n)`if`(n,m%*%f(m,n-1),diag(nrow(m)))

mরিকার্সিভ ফাংশন যা একটি অ্যাট্রিক্স এবং nএটিকে বাড়ানোর শক্তি গ্রহণ করে। পুনরাবৃত্তভাবে কল করে %*%, যা ডট-প্রোডাক্টকে গণনা করে। পুনরাবৃত্তির জন্য প্রাথমিক মান হ'ল একই আকারের পরিচয় ম্যাট্রিক্স m। যেহেতু m %*% m = m %*% m %*% I, এটি ঠিক কাজ করে।


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