প্রতীকী ম্যাট্রিক্সের গুণ


26

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

সহজ ব্যাখ্যা:

ধরুন আপনার দুটি ম্যাট্রিক রয়েছে, এবং বি , যেখানে 3-বাই -2, এবং বি 2-বাই -3। আপনি যদি এটিকে ম্যাট্রিকগুলিতে ম্যাট্রিক্স গুণ করে থাকেন তবে হয় এবি , বা বিএ আপনি নীচের ফলাফল পাবেন:

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

চ্যালেঞ্জ:

আপনার ভাষায় প্রতীকী ম্যাট্রিক্সের গুণটি প্রয়োগ করুন । আপনি ইনপুট হিসাবে দুটি ম্যাট্রিক নিতে হবে, যেখানে ম্যাট্রিকগুলিতে প্রতিটি উপাদান একটি অ-সাদা স্থানের ASCII- অক্ষর (কোড পয়েন্ট 33-126) দ্বারা প্রতিনিধিত্ব করে। আপনাকে অবশ্যই এই ম্যাট্রিকগুলির পণ্য আউটপুট করতে হবে।

আউটপুট সম্পর্কিত বিধি:

দুটি প্রবেশের পণ্যটির মধ্যে কোনও চিহ্ন থাকবে না। এটা abনা a*b, a·b, times(a,b)বা অনুরূপ কিছু। এটা aa, না a^2

পদগুলির যোগফলের মাঝে একটি স্পেস (ASCII কোড পয়েন্ট 32) হওয়া উচিত। এটি a b, না a+b, plus(a,b)বা অনুরূপ কিছু।

এই দুটি নিয়মের যুক্তিটি হ'ল: সমস্ত অ-সাদা স্থান অক্ষরকে ম্যাট্রিকগুলিতে প্রতীক হিসাবে মঞ্জুরি দেওয়া হয়, সুতরাং এগুলি গাণিতিক প্রতীক হিসাবে ব্যবহার করা অগোছালো হবে। সুতরাং, আপনি সাধারণত যা লিখতে পারেন a*b+c*dতা হবে ab cd

আপনি শর্তাবলী ক্রম চয়ন করতে পারেন। ab cd, dc abএবং cd baগাণিতিকভাবে একই কথা বলছেন, তাই আপনি এখানেও আদেশটি চয়ন করতে পারেন। অর্ডারটি যতক্ষণ গাণিতিকভাবে সঠিক হয় ততক্ষণ সুসংগত হওয়া দরকার না।

ম্যাট্রিক্স বিন্যাস সম্পর্কিত বিধি:

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

"ab;cd"     <- This will look awful, but it's still accepted.

"a,b\nc,d"

[[a,b],[c,d]] 

[a, b]
[c, d]

আমি সচেতন যে এটি এমন অনেকগুলি বিন্যাসকে মঞ্জুরি দেয় যা অগোছালো দেখাবে, তবে চ্যালেঞ্জটি হ'ল ম্যাট্রিক্সকে গুণ করা, আউটপুটকে বিন্যাস না করা।

সাধারাইওন রুল:

  • আপনি বৈধ ইনপুট ধরে নিতে পারেন। প্রদত্ত মাত্রাগুলি সহ ম্যাট্রিক্সের গুণটি সর্বদা সম্ভব হবে।
  • কেবলমাত্র দুটি ম্যাট্রিক হবে।
  • আপনি ধরে নিতে পারেন যে ম্যাট্রিকগুলি খালি নেই
  • অন্তর্নির্মিত ফাংশনগুলি গৃহীত হয় (তবে ফর্ম্যাটিং প্রয়োজনীয়তার কারণে সম্ভবত কিছুটা জটিল)।
  • প্রয়োজনে ইনপুটটিতে অবশ্যই পালানোর অক্ষর ব্যবহার করা যেতে পারে ( \'পরিবর্তে ')।
  • কোনও মানক ইনপুট এবং আউটপুট পদ্ধতি ঠিক আছে

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

দুটি ইনপুট ম্যাট্রিক্স মাঝখানে খালি লাইন দিয়ে দেখানো হয়েছে। আউটপুট পরে প্রদর্শিত হবে Output:। যখন দুটি আউটপুট ম্যাট্রিক থাকে তখন এটি কেবল অন্য আউটপুটগুলি দেখানো যে গ্রহণযোগ্য হবে।

পরীক্ষার কেস # 1

Inputs:
[a]

[b]

Output:
[ab]
[ba]      <- Also OK

পরীক্ষার কেস # 2

Inputs:
[a, b]
[1, 4] 
[y, {]

[%, 4, 1] 
[a, b, c]

Output:    
[a% ba, a4 bb, a1 bc] 
[1% 4a, 14 4b, 11 4c] 
[y% {a, y4 {b, y1 {c]

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

Inputs:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 1, 2, 3]
[4, 5, 6, 7]

[a]
[b]
[c]
[d]

Output:
[1a 2b 3c 4d]
[5a 6b 7c 8d]
[9a 1b 2c 3d]
[4a 5b 6c 7d]

[d4 c3 b2 a1]      <-- Also OK
[d8 c7 b6 a5]
[1b 9a c2 3d]
[a4 b5 d7 6c]

ab cdপরিবর্তে প্রয়োজনীয়তা সংক্রান্ত নিয়মগুলির ক্ষেত্রে যদি আপনার প্রতিক্রিয়াটি a*b+c*dহ'ল: আপনার পক্ষে জটিল জটিল ইনপুট / আউটপুট ফর্ম্যাটগুলি এড়ানো উচিত , তবে আমি নোট চাই যে ইনপুট এবং আউটপুট ফর্ম্যাটগুলি খুব নমনীয়। আপনি ব্যবহার করতে পারবেন না *এবং +পণ্য এবং অঙ্কের জন্য একটি সাধারণ বিল্ট-ইন ব্যবহার করা আরও কঠিন হতে পারে, তবে আমি সেই নেতিবাচক জিনিসটিকে বিবেচনা করি না।


একটি ফাংশনের জন্য, দুটি স্ট্রিংয়ের 2D অ্যারে নিচ্ছেন এবং 2D টি অ্যারের স্ট্রিং গ্রহণযোগ্য?
ডেনিস

হ্যা কোন সমস্যা নেই. তবে মাত্রাগুলি অবশ্যই মেলতে হবে, আপনার দ্বিতীয় ইনপুট স্থানান্তরিত করতে পারবেন না। এর কোনও মানে ছিল?
স্টিভি গ্রিফিন

এটা করেছে, স্পষ্ট করার জন্য ধন্যবাদ। একটি শেষ প্রশ্ন: আমি কি ইনপুট হিসাবে অক্ষরের 2D অ্যারে নিতে এবং একটি 2D স্ট্রিং ফেরত দিতে পারি?
ডেনিস

@ ডেনিস, আমি লিখেছিলাম: "উভয় ম্যাট্রিকই একই ফর্ম্যাটে ইনপুট করা উচিত।" আমি সেখানে আউটপুট ম্যাট্রিক্সের কথা বলতে ভুলে গেছি, সুতরাং আমি এটি ঠিক এভাবে রাখব। ইনপুটগুলি অবশ্যই একই ফর্ম্যাটে থাকতে পারে তবে আপনার আলাদা আউটপুট ফর্ম্যাট থাকতে পারে। (আমি সমাধানটি আসলেই পছন্দ করি না, তবে এখনই জিনিসগুলি পরিবর্তন করতে চাই না, আমার মনে হয় এর একটি উত্তর ইতিমধ্যে রয়েছে যার বিভিন্ন ইনপুট এবং আউটপুট ফর্ম্যাট রয়েছে)
স্টিভি গ্রিফিন

আপনি যদি রুবি উত্তরটি বোঝাতে চান, আমি পরীক্ষা করে দেখেছি এবং এটি অক্ষরের পরিবর্তে স্ট্রিংয়ের সাথেও কাজ করে।
ডেনিস

উত্তর:


9

হাস্কেল , 62 61 বাইট

e=[]:e
a!b=[unwords.zipWith(++)r<$>foldr(zipWith(:))e b|r<-a]

এটি অনলাইন চেষ্টা করুন! ব্যবহারের উদাহরণ:

Prelude> [["a","b"],["c","e"]] ! [["f","g"],["h","i"]]
[["af bh","ag bi"],["cf eh","cg ei"]]

আমি transposeআমদানি ব্যবহারের চেয়ে কম একটি বাইটে একটি ফাংশন পাওয়ার উপায় পেয়েছি :

import Data.List;transpose
e=[]:e;foldr(zipWith(:))e

আমদানি সহ পুরানো সংস্করণ: (62 বাইট)

import Data.List
a!b=[unwords.zipWith(++)r<$>transpose b|r<-a]

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

এটি পুরোপুরি আমার উত্তর অনুরূপ অ প্রতীকী ম্যাট্রিক্স গুণ : a!b=[sum.zipWith(*)r<$>transpose b|r<-a], গুণ বদলে (*)স্ট্রিং সংযুক্তকরণের সঙ্গে (++)এবং sumসঙ্গে unwordsযার মধ্যে মধ্যে একটি স্পেস দিয়ে স্ট্রিং একটি তালিকা যোগসূত্র। আমদানিটি transposeফাংশনের জন্য প্রয়োজন , সুতরাং দ্বিতীয় ম্যাট্রিক্সের সমস্ত ট্রান্সপোস্টেশনে সমস্ত বাইটের অর্ধেক ব্যবহার করে ...


আমদানি ছাড়াই পুরানো সংস্করণ: (by৪ বাইট)

a![]=[];a!b=(unwords.zipWith(++)[h|h:_<-b]<$>a):a![s:t|_:s:t<-b]

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

আমদানি এবং transposeফাংশনটি এত বেশি বাইট নিয়ে যাওয়ার সাথে সাথে আমি আমদানি ছাড়াই কাজটি সমাধান করার চেষ্টা করেছি। এখনও অবধি এই পদ্ধতির দুটি বাইট দীর্ঘতর হতে দেখা গেছে, তবে এটি আরও গল্ফযোগ্য হতে পারে। সম্পাদনা করুন: শীর্ষে থাকা অন্য পদ্ধতির এখন আমদানিকে মারধর!

তালিকা ধী [s:t|_:s:t<-b]মধ্যে তালিকার খালি নয় এমন মুদ্রার উলটা পিঠ পায় bমাত্র ব্যবহার করে, [t|_:t<-b]পেতে মুদ্রার উলটা পিঠ হবে 4 খাটো বাইট (এমনকি আমদানি সংস্করণ প্রহার) কিন্তু মত একটি খালি সারি সংযোজন ["","",""]ম্যাট্রিক্স যা আমি অনুমান অনুমতি দেওয়া হয় না করতে।


6

গণিত, 36 বাইট

Inner[#<>#2&,##,StringRiffle@*List]&

Innerগাণিতিকের Dot(যেমন সাধারণ ম্যাট্রিক্স / ভেক্টর পণ্য) সাধারণকরণ । এটি আপনাকে দুটি ক্রিয়াকলাপ সরবরাহ করে fএবং gযথাক্রমে যথাযথ গুণ এবং সংযোজনের জায়গায় ব্যবহৃত হবে যা দিয়ে ডট পণ্যটিকে সাধারণীকরণ করে । আমরা গুণটি প্রতিস্থাপন করছি #<>#2&(যা দুটি অক্ষরকে একক StringRiffle@*Listস্ট্রিনের সাথে সংযুক্ত করে) এবং সংযোজন , যা প্রথমে একটি তালিকাতে সমস্ত সমষ্টিকে আবৃত করে এবং তারপরে StringRiffleফাঁকা জায়গাগুলির সাথে একত্রিত হয়।

কেউ সম্ভাব্যভাবে Dotঅপারেটরটি ব্যবহার করতে পারে .এবং তারপরে ফলাফলটি রূপান্তর করতে পারে তবে সমস্যাটি হ'ল এর মতো জিনিসগুলি "a"*"a"তত্ক্ষণাত্ "a"^2(অঙ্কের জন্য একই) রূপান্তরিত হবে যা আবার আলাদা করে নেওয়া বিরক্তিকর হবে।


6

রুবি, 61 বাইট

->a,b{a.map{|x|b.transpose.map{|y|x.zip(y).map(&:join)*' '}}}

নমুনা রান:

main(0):007> ->a,b{a.map{|x|b.transpose.map{|y|x.zip(y).map(&:join)*' '}}}[[[?a, ?b], [?1, ?4], [?y, ?{]], [[?%, ?4, ?1], [?a, ?b, ?c]]]
=> [["a% ba", "a4 bb", "a1 bc"], ["1% 4a", "14 4b", "11 4c"], ["y% {a", "y4 {b", "y1 {c"]]
->a,b{
a.map{|x|            # for each row of a
b.transpose.map{|y|  # and for each column of b
x.zip(y)             # match up corresponding elements
.map(&:join)         # join each pair together
*' '                 # join the entire thing on space
}}}

4

Clojure, 53 বাইট

#(for[a %](for[b(apply map vector %2)](map str a b)))

যুক্তি [["a" "b"]["c" "e"]]এবং [["f" "g"]["h" "i"]]রিটার্ন নিয়ে চলছে ((("af" "bh") ("ag" "bi")) (("cf" "eh") ("cg" "ei")))। এটি আসলে তুলনায় খাটো সাংখ্যিক সংস্করণ


3

ডায়ালগ এপিএল , 10 বাইট

বাম এবং ডান আর্গুমেন্ট হিসাবে অক্ষরের ম্যাট্রিকগুলি নেয়। অক্ষরের তালিকাগুলির ম্যাট্রিক্স প্রদান করে। (এপিএল অক্ষরের তালিকা হিসাবে স্ট্রিংগুলি উপস্থাপন করে))

{∊⍺' '⍵}.,

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

সাধারণ অভ্যন্তরীণ পণ্য এপিএলে থাকে +.×তবে সংযোজন এবং গুণগুলি কোনও কার্য হতে পারে, বিশেষত:

যোগটি
{ একটি বেনাম ফাংশন দ্বারা প্রতিস্থাপন করা হয়েছে :  বাম আর্গুমেন্ট, একটি স্থান এবং ডান যুক্তি সমন্বিত
 সমতল
⍺ ' ' ⍵তালিকা
}

গুণকে প্রতিবিম্বিত করে প্রতিস্থাপন করা হয়েছে, ,


2

জেলি , 7 বাইট

Z;"þK€€

এই dyadic লিঙ্ক আছে যা লাগে বি এবং একটি (যাতে) আর্গুমেন্ট হিসাবে এবং আয় এবি । ইনপুট এবং আউটপুট স্ট্রিংগুলির 2D অ্যারে আকারে রয়েছে, যা আসলে অক্ষরের 3 ডি অ্যারে। ইনপুট হিসাবে অক্ষরের 2D অ্যারে গ্রহণ করে আরও বাইট সংরক্ষণ করা যায় । আমি অনুমতি দিচ্ছি কিনা তা নিশ্চিত নই।

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

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

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

Z;"þK€€  Dyadic link. Left argument: B. Right argument: A

Z        Zip/transpose B.
 ;"þ     Table vectorized concatenation; for each row in B' and each row in A,
         concatenate the corresponding strings.
    K€€  Join the arrays that correspond to the rows of A by spaces.

2

প্রোলগ,> 256 বাইট

আমি {_ | ব্যবহার করছি _} যা একটি ফান্ডাল / 3, _ [_, _] যা কিছু যুক্তি / 3 এবং যোগফল (_) যা কিছু সমষ্টিগত। এগুলি সমস্ত ভিতরে / 2 ব্যবহার করা যেতে পারে:

*(X, Y, Z) :- functor(Y, matrice, _), L is len(X[1]), L =:= len(Y), !,
   M is len(X), N is len(Y[1]),
   Z is { { sum({ X[J,K] * Y[K,I] | between(1,L,K) })
                                  | between(1,N,I) }
                                  | between(1,M,J) }.

একসাথে উপরোক্ত পূর্বাভাসের অতিরিক্ত সংজ্ঞা এবং অ-মানকটি 2 / যা সংখ্যার চেয়ে বেশি ফিরে আসতে পারে, এটি নিশ্চিত> 256 বাইট।


1

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

(a,b)=>a.map(c=>b[0].map((_,j)=>c.map((e,i)=>e+b[i][j]).join` `))

অক্ষরের দুটি 2D অ্যারে হিসাবে ইনপুট নেয় এবং স্ট্রিংগুলির 2D অ্যারে প্রদান করে। স্ট্রিংয়ের দুটি 1 ডি অ্যারে হিসাবে ইনপুট সমর্থন করতে 10 বাইট যুক্ত করুন।


1

পাইথ, 14 বাইট

clQmj;sMCd*QCE

একটি প্রোগ্রাম যা অক্ষরের দুটি নতুনলাইন-বিভক্ত দ্বি-মাত্রিক তালিকার ইনপুট নেয় এবং স্ট্রিংয়ের একটি দ্বি মাত্রিক তালিকা প্রিন্ট করে।

পরীক্ষা স্যুট

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

[ব্যাখ্যা পরে আসছে]


1

পিপ , 17 বাইট

{Y Zb{a._JsMy}Ma}

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

ব্যাখ্যা

একটি- {}ডিলিমিটেড ফাংশনে যুক্তিগুলি স্থানীয় ভেরিয়েবলগুলিতে নির্ধারিত aহয় e। ল্যাম্বডা ফাংশনের প্রথম যুক্তি দ্বারা প্রতিনিধিত্ব করা হয় _

{               }  Define a function:
   Zb              Zip rows of b, transposing it
 Y                 Yank into global variable y for access in nested function
     {       }Ma   To the rows of a, map this function:
           My       To the rows of y (i.e. columns of b), map this function:
      a._           Concatenate, itemwise, the current row of a and row of y
         Js         Join the resulting list on space
                   The result of the outer map operation is returned
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.