সাধারণ ম্যাট্রিক্স ট্রেস


23

প্রেরণা.

প্রদত্ত (যে কোনও উপায়ে):

  • একটি দ্বি-যুক্তি (বা একটি দ্বি-উপাদান তালিকার সমন্বিত একক যুক্তি) ব্ল্যাক বক্স ফাংশন , (ইনপুট এবং আউটপুটটি 1, 2, 3,…)f: ℤ+ × ℤ+ → ℤ+
  • কমপক্ষে দুটি সারি এবং দুটি কলাম সহ একটি কঠোর ইতিবাচক পূর্ণসংখ্যার ম্যাট্রিক্স

ম্যাট্রিক্স ফিরে ফাংশন ট্রেসটি

কি ফাংশন ট্রেস কি?

একটি সাধারণ ম্যাট্রিক্স ট্রেস হ'ল ম্যাট্রিক্সের প্রধান তির্যক (উপরে-বাম থেকে নীচে-ডানদিকে) এর যোগফল:

[[1,2,3],[4,5,6],[7,8,9]][1,5,9]1+5+915

তবে সংক্ষেপণের পরিবর্তে আমরা আবেদন করতে চাই f তির্যক বরাবর :

[[1,2,3],[4,5,6],[7,8,9]][1,5,9]f(f(1,5),9) বাf(1,f(5,9))

আপনি বাম থেকে ডান বা ডান থেকে বাম ব্যবহার করুন কিনা তা দয়া করে জানান।

প্রদত্ত ম্যাট্রিক্স এবং সমস্ত মধ্যবর্তী মানগুলি আপনার ভাষার পূর্ণসংখ্যার ডোমেনের মধ্যে কঠোরভাবে ইতিবাচক পূর্ণসংখ্যার হবে। ম্যাট্রিক্স অ-স্কোয়ার হতে পারে।

উদাহরণ

f(x,y) = xy, [[1,2,3],[4,5,6],[7,8,9]]1×5×945

f(x,y) = xy, [[1,2,3],[4,5,6],[7,8,9]]→ →1591

f(x,y) = x-y, [[4,5,6],[1,2,3]]4-22

f(x,y) = (x+y)⁄2, [[2,3,4],[5,6,7],[8,9,10]]5বা7

f(x,y) = x+2y, [[1,2,3],[4,5,6],[7,8,9]]47বা29

f(x,y) = max(x,y), [[1,2,3],[4,5,6],[7,8,9]]max(1,5,9)9

f(x,y) = 2x, [[1,2,3],[4,5,6],[7,8,9]]2বা4

f(x,y) = lcm(x,y), [[2,2,2],[2,2,3],[2,3,3],[4,4,4]]lcm(2,2,3)6

রেফারেন্স বাস্তবায়ন।


তির্যকটি কী [[2,2,2],[2,2,3],[2,3,3],[4,4,4]]?
সম্পূর্ণরূপে

3
@ টোটালিহুমান:[2,2,3]
এমিগিনা

1
শালা, আমি হিসাবে "জেনারেলাইজড ম্যাট্রিক্স সমাধি" TITLE পড়া এবং দারুণভাবে হতাশ হয়েছিলেন যখন পৃষ্ঠা লোড
আলকাতরা

উত্তর:


9

আর , 40 30 বাইট

function(m,F)Reduce(F,diag(m))

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

পরীক্ষার কেসগুলি যাচাই করুন।

এই ক্ষেত্রে তির্যকটি নীচে অনুসরণ করে, তাই বাম থেকে ডানে right পাটিগণিত অপারেটরগুলির জন্য, আপনি "+"অপারেটরগুলির কাছাকাছি বা ব্যাকটিক্স ব্যবহার করতে পারেন (+,*,-,%/%,^,%% )

বেশ সহজবোধ্য: Reduceআর এর একটি সমতূল্য fold, এবং একটি ম্যাট্রিক্স তির্যক যারা উপাদান হল a_ijযেখানে i==j, অর্থাত্, যেখানে rowএবং colসূচকের umn একই। diagস্কোয়ারবিহীন ম্যাট্রিকগুলির জন্য উপযুক্ত আচরণ রয়েছে।


8

Haskell, , 39 বাইট

পূর্ববর্তী অবৈধ সমাধান সমাধানে আমাকে সহায়তার জন্য @ লাইকনি ধন্যবাদ!

f!m=foldl1 f[h|h:_<-zipWith drop[0..]m]

বাম দিকে সহযোগী, এটি অনলাইনে চেষ্টা করুন! ( ডান-অ্যাসোসিয়েটিভের foldl1দ্বারা প্রতিস্থাপন foldr1)


কীভাবে foldl1 f$zipWith(!!)m[0..]?
গর্বিত হাসেলেলার

@ প্রফাসহেস্কিলার: অন্যরা এরই মধ্যে চেষ্টা করেছিল, তবে স্কয়ার নন-ম্যাট্রিকগুলিতে এটি ব্যর্থ হয় ..
25:58

5

গণিত , 16 বাইট

-১ বাইট ধন্যবাদ মার্টিন ইন্ডারকে।

#~Tr~Fold[g]@*0&

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

বিকল্প সমাধান, 17 বাইট

Fold[g]@*Diagonal

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


17 বাইট (ব্ল্যাক-বাক্স ফাংশন একটি নির্দিষ্ট নাম ধরে নেওয়া যেতে পারে)
জনাব এক্সকোডার

এই @*{}বাক্য গঠনটি প্রচুর পরিমাণে বোঝায় না (আপনি সম্ভবত বোঝাতে চেয়েছিলেন @*List), তবে এটি যেভাবে কাজ করে তা খুব সুন্দর। বস্তুত, এটা মানে আপনি প্রতিস্থাপন করতে পারেন {}একটি সঙ্গে 0একটি বাইট সংরক্ষণ।
মার্টিন এন্ডার

@ মার্টিনএেন্ডারে আমার আসলে Listপ্রথমটি ছিল তবে আমি কেবল এটির হেকের {}জন্য চেষ্টা করেছি এবং এটি কাজ করে যাওয়ায় অত্যন্ত অবাক হয়েছিল। বুদ্ধি তৈরি করে তবে কীভাবে 0কাজ করে? o0
সম্পূর্ণরূপে

1
মতো একই ভাবে @totallyhuman {}। আপনি বর্তমানে {}একটি ফাংশন হিসাবে ব্যবহার করছেন (বা আসলে ম্যাথমেটিকা ​​টার্মিনোলজি ব্যবহার করে "মাথা হিসাবে")। আপনি যদি fসেখানে জেনেরিক ব্যবহার করেন তবে আপনি পাবেন f[1,2,3](যদি এটি তির্যক হয়)। কিন্তু {}আপনি পেতে {}[1,2,3]। এটি একটি সম্পূর্ণ অর্থহীন অভিব্যক্তি, তবে মাথাগুলি নির্বিচারে প্রকাশ হতে পারে নিজেরাই, এবং যদি ম্যাথামেটিকা ​​তাদের সাথে কী করবেন তা জানেন না, এটি কেবল তাদের মতোই ছেড়ে যায়। গণিতের বেশিরভাগ তালিকার ম্যানিপুলেশন ফাংশনগুলি আসলে একটি স্বেচ্ছাসেবক মাথা সহ অভিব্যক্তিগুলির সাথে কাজ করে এবং এর ক্ষেত্রে Foldমাথাটি কেবল উপেক্ষা করা হয়। [টিবিসি]
মার্টিন এন্ডার

সুতরাং আপনি 0পরিবর্তে মাথা হিসাবে ব্যবহার করতে পারেন , যা দেয় 0[1,2,3]যা এখনও অর্থহীন নয়, তবে সমস্ত একই কাজ করে।
মার্টিন এন্ডার

4

অক্টাভা , 61 57 53 বাইট

function m=g(f,m)for i=diag(m)'(2:end)m=f(m(1),i);end

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

একটি ফাংশন নির্ধারণ gযা একটি ফাংশন হ্যান্ডেল লাগে fএবং ম্যাট্রিক্স m। প্রথম পুনরাবৃত্তিতে, m(1)শীর্ষ-বাম ম্যাট্রিক্স উপাদানটি প্রদান করে; এর পরে, এটি ঠিক ফিরে আসে m



@ জিউসেপ্পে আমার প্রাথমিক 61-বাইট সংস্করণটি আমি এটি করেছি। অবশ্যই, আমার 57- এবং 61 বাইট সংস্করণটির শক্তিশালী পয়েন্টগুলি একত্রিত করা উচিত, যা .ণগ্রস্তদের একটি 53 বাইট উত্তর দেয়। আমাকে আবার এটি দেখার জন্য ধন্যবাদ!
Sanchises


3

হাস্কেল , 47 45 42 বাইট

f%((h:t):r)|[]<-t*>r=h|x<-tail<$>r=f h$f%x

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

ফাংশনটি ডান থেকে বামে ভাঁজ হয়:

f % [[1,2,3], -> f 1 ( f % [[5,6],   -> f 1 ( f 5 ( f % [[9]] ) ) -> f 1 ( f 5 ( f 9 ) ) )
     [4,5,6],               [8,9]] )
     [7,8,9]]

f % ((h:t):r)              -- (h:t) is the first row and r the remaining rows
 | [] <- t *> r = h         -- a shorter way of checking wether t==[] or r==[]
 | x<-tail<$>r = f h $ f%x -- apply f to h and the result of recursively calling (%) on
                           -- the remaining matrix with the first column removed

সম্পাদনা করুন: বিএমও -2 বাইট এবং জগারবকে -3 বাইট ধন্যবাদ !


1
$শর্তসাপেক্ষে ব্যবহার করে এবং সরল করে 43 বাইট*>
জগারব

@ জগারব ব্যবহার করার জন্য দুর্দান্ত ধারণা *>!
লাইকনি

3

এপিএল (ডায়ালগ ইউনিকোড) , 7 বাইট ( অ্যাডামের এসবিসিএস )

⎕/1 1⍉⎕

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

-3 অ্যাডামের দ্বারা এটি একটি সম্পূর্ণ প্রোগ্রামে রূপান্তর করার পরামর্শের জন্য ধন্যবাদ ।

ডান থেকে বাম.


এখানে অ্যাডমের এসবিসিএস ব্যবহার করার দরকার নেই: আপনি কেবল ডায়ালগ ক্লাসিক ব্যবহার করতে পারেন।
জাকারি

@ জ্যাচারý বিষয়টি হ'ল আমি ডায়ালগ ইউনিকোডে উত্তর দিচ্ছি, সময়ের সাথে ক্লাসিক অবহেলা করা হচ্ছে।
এরিক আউটগল্ফার

কোডপেজটি যদিও কোডেপেজটি বেঁচে থাকবে না
জাকারি

@ জ্যাচারý ঠিক আছে, বরং সামঞ্জস্য বজায় রাখুন। : পি
এরিক আউটগল্ফার



2

পাইথন 2 , 61 বাইট

lambda f,m:reduce(f,[l[i]for i,l in enumerate(m)if len(l)>i])

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

এটি বাম থেকে ডানে কাজ করে।


@ অ্যাসোনটিহিড এটি যে কোনও উপায়ে হতে পারে, উদাহরণগুলি দেখুন (x+y)⁄2এবং x+2yউদাহরণগুলি দেখুন
রড

ঠিক আছে, আমি
ভুলটি পড়েছি

2

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

g=(f,a,r=a[i=0][0],e=a[++i]&&a[i][i])=>e?g(f,a,f(r,e)):r

বাম থেকে ডানে ভাঁজ হয়। সম্পাদনা করুন: অ্যারে কঠোরভাবে ইতিবাচক কিনা তা ব্যবহার করে 2 বাইট সংরক্ষিত। বিকল্প সমাধান, এছাড়াও 56 বাইট:

(f,a,g=r=>(e=a[++i]&&a[i][i])?g(f(r,e)):r)=>g(a[i=0][0])

এটা তোলে দেখাচ্ছে না মত আপনার যা দরকার 1/এবং আপনার চারপাশের কিছু উপাদান চলন্ত দ্বারা অন্য 2 বাইট সংরক্ষণ করতে পারেন: f=>a=>(h=r=>(e=a[++i]&&a[i][i])?h(f(r,e)):r)(a[i=0][0])টিআইও
শেগি

@ শেগি ওহ, এটি কঠোরভাবে ইতিবাচক, আমি এটি দেখিনি।
নিল

স্পষ্টতই আমরা ধরে নিতে পারি যে ব্ল্যাক-বাক্স ফাংশনগুলি একটি পূর্বনির্ধারিত ভেরিয়েবলের জন্য বরাদ্দ করা হয়েছে যাতে আপনি যদি এর সুবিধা নিতে চান তবে আপনি 2 বাইট সংরক্ষণ করতে পারেন।
শেগি

@ শেগি আসলে আমার মনে হয় এটি f,প্রথম সংস্করণে 4 বাইট (2x ) সংরক্ষণ করবে ?
নিল

তুমি ঠিক বলছো; দুঃখিত, আবার f,কল করার সময় গণনা করতে ভুলে গেছি g
শেগি

2

জাভাস্ক্রিপ্ট, 46 বাইট

f=>a=>a.reduce((p,l,i)=>l[i]?f(p[0]|p,l[i]):p)

@ শেগগিকে ধন্যবাদ, বিটওয়াইজ ব্যবহার করুন বা একটি বাইট সংরক্ষণ করুন। এটা যাদু।


ম্যাট্রিক্সের কলামগুলির চেয়ে বেশি সারি থাকলে এটি কাজ করবে বলে মনে হচ্ছে না।
শেগি

@ শেগি এত দুঃখিত, 47 বাইট এখন ...
tsh

হ্যাঁ, এটাই আমি মূলত পেয়েছিলাম। শুধু সম্পাদনা আমার সমাধান মধ্যে ফিক্স সম্পর্কে ছিল কিন্তু তুমিও আমাকে বীট এটা :( আমি, মনে হয় তুমি এক বাইট ফিরে পেতে পারেন যদিও,, bitwise ব্যবহার করে বা যদিও।
রোমশ

@Shaggy তাই যাদু
TSH

উল্লেখ করতে ভুলে গেছেন: স্পষ্টতই আমরা ধরে নিতে পারি যে ব্ল্যাক-বাক্স ফাংশনগুলি একটি পূর্বনির্ধারিত ভেরিয়েবলের জন্য বরাদ্দ করা হয়েছে যাতে আপনি যদি এর সুবিধা নিতে চান তবে আপনি 3 বাইট সংরক্ষণ করতে পারবেন।
শেগি

2

জাভা 8, 88 81 70 বাইট

m->{int r=m[0][0],i=1;try{for(;;)r=f(r,m[i][i++]);}finally{return r;}}

ভাঁজ [[1,2,3],[4,5,6],[7,8,9]]হয়f(f(1,5),9)

-7 বাইট অপ্রত্যক্ষভাবে @ কমিলড্রাকারিকে ধন্যবাদ জানায় যেমন তিনি তার সি # জবাবটিতে অনুরূপ কৌশল ব্যবহার করেছিলেন : সারি / কলামগুলির উপর ভিত্তি করে লুপটির সর্বাধিক সীমা না রেখে কেবল ক্যাপচার চেষ্টা করুন ArrayIndexOutOfBoundsException
-11 বাইট প্রতিস্থাপন catch(Exception e)সঙ্গে finally

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

পুরাতন 88 বাইট উত্তর:

m->{int r=m[0][0],i=1;for(;i<Math.min(m.length,m[0].length);)r=f(r,m[i][i++]);return r;}

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

ব্যাখ্যা:

m->{                   // Method with integer-matrix parameter and integer return-type
  int r=m[0][0],       //  Start the result at the integer of position 0,0 (0-indexed)
      i=1;             //  Start the index at 1 (0-indexed)
  try{for(;;)          //  Loop indefinitely
    r=f(r,m[i][i++]);} //   Call f with the result + next diagonal cell as arguments
                       //   (and increase `i` by 1 with `i++` afterwards)
  finally{             //  If an ArrayIndexOutOfBoundsException occurred we're done,
   return r;}}         //   in which case we return the result-integer

ব্ল্যাক বক্স ইনপুট ফর্ম্যাট:

অনুমিত একটি নামকৃত ফাংশন int f(int x,int y)উপস্থিত রয়েছে, যা এই মেটা উত্তর অনুসারে অনুমোদিত ।

আমার Testডিফল্ট ফাংশন f(x,y), পাশাপাশি উপরের ল্যাম্বদা সহ একটি বিমূর্ত শ্রেণি রয়েছে :

abstract class Test{
  int f(int x,int y){
    return x+y;
  }

  public java.util.function.Function<int[][],Integer>c=
    m->{int r=m[0][0],i=1;for(;i<Math.min(m.length,m[0].length);)r=f(r,m[i][i++]);return r;}
  ;
}

পরীক্ষার ক্ষেত্রে, আমি এই ফাংশনটি ওভাররাইট করি f। উদাহরণস্বরূপ, প্রথম পরীক্ষার কেসটিকে এভাবে বলা হয়:

System.out.println(new Test(){
  @Override
  int f(int x,int y){
    return x*y;
  }
}.c.apply(new int[][]{
  new int[]{1,2,3},
  new int[]{4,5,6},
  new int[]{7,8,9}
}));

2

সংযুক্তি , 14 বাইট

Fold#/Diagonal

এটি অনলাইন চেষ্টা করুন! সেট করুন fএবং হিসাবে কল করুন f[function, array]

ব্যাখ্যা

এটি দুটি ফাংশনের একটি কাঁটাচামচ: Foldএবং /Diagonal। এটি আর্গুমেন্টের জন্য fএবং এর aসমতুল্য:

Fold[f, (/Diagonal)[f, a]]

/যখন কোনও ফাংশনে monadically প্রয়োগ করা হয়, তার শেষ যুক্তিতে প্রয়োগ করা একটি ফাংশন প্রদান করে। সুতরাং এটি সমান:

Fold[f, Diagonal[a]]

এটির fমূল তিরস্কারের উপরে ফাংশনটি ভাঁজ করে a


একটি হোম-
ব্রিউড

@ আদম; ডি হ্যাঁ সত্যই!
কনর ও'ব্রায়ান

2

এডাব্লুকে , 77 বাইট

func z(F,M,r){for(e=1;e<M[1]&&e<M[2];)r=@F(r==""?M[1,1]:r,M[++e,e])
return r}

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

আমি কৌতুহল ছিল যদি AWK কিছুটা ফাংশনাল প্রোগ্রামিং করতে পারতাম। আমি এই গণনা মনে করি।

"ম্যাট্রিক্স" অতিরিক্ত ক্ষেত্র M[1]=#rowsএবং সহ একটি স্ট্যান্ডার্ড এসোসিয়েটিভ অ্যারে হিসাবে সংজ্ঞায়িত করা হয় M[2]=#columns। ফাংশনের নামটি একটি স্ট্রিং হিসাবে পাস করা হয় যা @F(...)সিনট্যাক্সের মাধ্যমে মূল্যায়ন করা হয় । মূল্যায়ন বাম থেকে ডান সঞ্চালিত হয়। rপরামিতি একটি বিদ্যমান মুছে যাওয়ার রোধ করার জন্য একটি স্থানধারক rপরিবর্তনশীল এবং প্রতিটি কলের জন্য reinitialize করার প্রয়োজনীয়তা এড়ানো। সাধারণত AWKএই ধরনের স্থানধারকদের মনোনীত করতে অতিরিক্ত স্থান যুক্ত করা হয় তবে এটি কোড গল্ফ, তাই প্রতিটি বাইট গণনা করা হয়। :)

টিআইও লিঙ্কটি সমস্ত পরীক্ষার কেস প্রয়োগ করে।


2

05 এ বি 1 ই , 15 10 বাইট

কেভিন ক্রুইজসেনের
পরামর্শ অনুসারে ডান-বাম থেকে সঞ্চিত 5 বাইট নতুন বিল্ট-ইন ব্যবহার করে ভাঁজ করুন

Å\`[.g#I.V

ব্যাখ্যা

পুরানো সংস্করণ হিসাবে একই কাজ করে, Å\মূল তির্যকটি ধাক্কা দেওয়ার জন্য এটি একটি নতুন অন্তর্নির্মিত ব্যতীত ।

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

পুরনো সংস্করণ

¬g£vyNè}[.g#I.V

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

ব্যাখ্যা

¬                 # get the head of the input (first row)
 g                # get its length (number of columns)
  £               # take that many rows from input
   v              # for each row_index, row (N,y) do:
    y             # push the row
     Nè           # get the nth element of the row
       }          # end loop
        [.g#      # loop until one value remain on the stack
            I.V   # run the input function

1
¬g£vyNè}[Å\`[5 বাইট সংরক্ষণ করা এখন হতে পারে ।
কেভিন ক্রুইজসেন

1

তুষ , 7 বাইট

আমার জমাটি ঠিক করার জন্য @ জগারবকে ধন্যবাদ!

Ḟ₁§z!Tŀ

বাম দিকে সহযোগী, এটি অনলাইনে চেষ্টা করুন! (ডান-অ্যাসোসিয়েটিভ সংস্করণের জন্য কেবল এর দ্বারা প্রতিস্থাপন F)

ব্যাখ্যা

দুর্ভাগ্যক্রমে ম্যাট্রিক্সের তির্যক পাওয়ার কোনও সহজ উপায় নেই, সুতরাং বেশিরভাগ বাইটগুলি তার জন্য:

Ḟ₁§z!Tŀ  -- function ₁ is the function and matrix A implicit, example: 
  §      -- fork A
     T   -- | transpose A: [[1,4,7],[2,5,8],[3,6,9]]
      ŀ  -- | enumerate A: [1,2,3]
   z!    -- and zipWith index: [1,5,9]
Ḟ₁       -- right fold function

হু, অ্যান্টি-
ডায়াগোনালের

2
@ অ্যাডাম আমি ধরে নিয়েছি কারণ আপনি অসীম ম্যাট্রিকের অ্যান্টিডিজোনালগুলি গুনতে পারবেন তবে ডায়াগোনাল নয়।
মার্টিন এন্ডার

1

SNOBOL4 (CSNOBOL4) , 86 বাইট

T	I =1
	T =M<1,1>
I	I =I + 1
	T =EVAL(F '(T,M<I,I>)')	:S(I)F(RETURN)
	DEFINE('T(M,F)')

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

একটি ফাংশন T(জন্য TRACE) সংজ্ঞায়িত করে যা একটি নেয়ARRAY এবং একটি স্ট্রিংF একটি ফাংশনের নাম । বাম থেকে ডানে ভাঁজ হয়।

অপ্রত্যক্ষ রেফারেন্স ( $) ব্যবহার করে ফাংশনগুলি কার্যকর হয় না। তাই ব্যবহারEVAL নামের সাথে একটি স্ট্রিং এবং পাস করা SNOBOL- এ ব্ল্যাক-বক্স ফাংশন পাওয়ার একমাত্র উপায় বলে মনে হচ্ছে।

এছাড়াও, অ্যারেগুলি সংজ্ঞায়িত করতে এটি বেশ বেদনাদায়ক; তবে, কারণ অবৈধ অ্যারে রেফারেন্সগুলির কারণ FAILURE, এটি অ-বর্গাকার অ্যারেগুলির জন্য কাজ করে - যদি Iউভয় মাত্রায় সীমা ছাড়িয়ে যায়, F(RETURN) তবে ফাংশনটি ফিরে আসতে বাধ্য করে।

সম্পাদনা:

সম্ভবত, এই মেটা পোস্টের উপর ভিত্তি করে , আমি ধরে নিতে পারি যে ব্ল্যাক-বাক্স ফাংশনটি Fনাম অনুসারে সংজ্ঞায়িত করা হয়েছে F, যা এটি 75 বাইটে নামিয়ে ফেলবে ( ফাংশন সংজ্ঞায় এর ব্যবহার EVALএবং অপসারণ ,F)। যাইহোক, আমি এই সংস্করণটিকে পছন্দ করি কারণ এটি কোনও ফাংশনের রেফারেন্স পাস করার কাছাকাছি।



1

টিনাইলিস্প , 79 বাইট

(load library
(d D(q((M)(i(h M)(c(h(h M))(D(map t(t M))))(
(q((F M)(foldl F(D M

শেষ লাইনটি একটি নামবিহীন ল্যাম্বদা ফাংশন যা একটি ফাংশন এবং ম্যাট্রিক্স নেয় এবং ম্যাট্রিক্স ট্রেস প্রদান করে। ট্রেসটি বাম-সহযোগী (যেমন f(f(1,5),9))।এটি অনলাইন চেষ্টা করুন!

Ungolfed

আমরা ত্রিভুজ গণনা করতে একটি সহায়ক ফাংশন সংজ্ঞায়িত করি; তারপরে generalized-traceলাইব্রেরি ফাংশনটির চারপাশে কেবল একটি ছোট্ট মোড়ক foldl

(load library)

(def diagonal
 (lambda (matrix)
  (if (head matrix)
   (cons
    (head (head matrix))
    (diagonal (map tail (tail matrix))))
   nil)))

(def generalized-trace
 (lambda (func matrix)
  (foldl func (diagonal matrix))))

তির্যকটি পুনরাবৃত্তভাবে গণনা করার সময়, আমরা (head matrix)সত্যবাদী কিনা তা পরীক্ষা করি। যদি ম্যাট্রিক্স সারিগুলির বাইরে থাকে তবে এটি খালি তালিকা (শূন্য) হবে এবংhead শূন্যের শূন্যপদ হবে। অথবা, যদি ম্যাট্রিক্স কলামগুলির বাইরে থাকে তবে এর প্রথম সারি (মাথা) খালি তালিকা (শূন্য) হবে - মিথ্যা। অন্যথায়, এখানে প্রথম সারির একটি দুর্দান্ত কিছু থাকবে যা সত্য।

সুতরাং, যদি প্রথম সারিটি উপস্থিত না থাকে বা খালি থাকে, আমরা শূন্য করে ফিরব। অন্যথায়, যদি অসাধারণ প্রথম সারিতে থাকে তবে আমরা (head (head matrix))- প্রথম সারির প্রথম উপাদানটি - এবং cons(পুনরায় সংশোধন) পুনরাবৃত্তির কলটির ফলাফলটিতে নিয়ে যাই । পুনরাবৃত্তির কলটির আর্গুমেন্টটি হ'ল (map tail (tail matrix))- সমস্ত সারিটি প্রথমটি ছাড়াই নিন এবং প্রতিটি সারির প্রথম উপাদান ব্যতীত সমস্ত গ্রহণ করুন।



1

সি # (ভিজ্যুয়াল সি # সংকলক) , 72 69 60 বাইট

m=>{try{for(int i=1;;m[0][0]=f(m[0][0],m[i][i++]));}catch{}}

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

try/catch সীমা ছাড়িয়ে যাওয়ার পরে কেবল এদিকে ঘুরতে গিয়ে এবং সমাপ্তির মাধ্যমে তির্যকটি সঠিকভাবে পৌঁছানোর অনুমতি দেয়।

3 বাইট সংরক্ষণ করা হয়েছে কারণ কেভিন ক্রুইজসেন দ্বারা নির্দেশিত হিসাবে, ব্ল্যাক-বাক্স ফাংশনগুলি একটি নির্দিষ্ট নামে বিদ্যমান বলে ধরে নেওয়া যেতে পারে

একটি যুক্তি সংশোধন করে ফেরত দিয়ে 9 বাইট সংরক্ষণ করা হয়

সুতরাং, ফাংশন নামের অধীনে পছন্দসই ফাংশন মজুত করে বলা হয় f, কলিং trace(matrix), এবং এর ফলে মধ্যে সংরক্ষিত হয় matrix[0][0]

বিকল্পভাবে, আপনি যদি সত্যিই ভার্বোসিটি পছন্দ করেন,

সি # (ভিজ্যুয়াল সি # সংকলক) , 97 + 13 = 110 78 69 বাইট

(int[][]m)=>{try{for(int i=1;;m[0][0]=f(m[0][0],m[i][i++]));}catch{}}

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

পূর্বনির্ধারিত ফাংশনটি ব্যবহার করে 32 বাইট সংরক্ষণ করা হয়েছে, কারণ প্যারামিটার হিসাবে ফাংশনটি না নেওয়ার ফলে Systemআমদানি এবং দীর্ঘ Funcজেনেরিক ধরণের সরিয়ে দেওয়া যায়।


চেষ্টা করে দেখুন দুর্দান্ত কৌশল। আমি আমার জাভা 8 উত্তরে 7 বাইট গল্ফ করতে সক্ষম হয়েছি (যদিও এর catch(Exception e)পরিবর্তে আমাকে ব্যবহার করতে হবে catch। :) সম্পাদনা: ওহ, আরও বাইট সংরক্ষণ করার catch(Exception e)সাথে সাথে প্রতিস্থাপন করতে সক্ষম হয়েছি finallyআবার ধন্যবাদ. আমার কাছ থেকে +1
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন আপনিও আমার নবীনতর উন্নতি থেকে উপকৃত হতে পারবেন (যদিও জাভা যুক্তি সংশোধন করার পক্ষে
জবাবদিহি

আমাকে জানতে দেওয়ার জন্য ধন্যবাদ। যদিও জাভাতে এটি সম্ভব, এর অর্থ হ'ল আমাকে এর finallyমধ্যে পরিবর্তন করতে হবে catch(Exception e), কারণ আমি শেষ পর্যন্ত আর ফিরে আসছি না। সুতরাং m->{try{for(int i=1;;m[0][0]=f(m[0][0],m[i][i++]));}catch(Exception e){}}(by৩ বাইট) দুর্ভাগ্যক্রমে আমার জন্য আমার বর্তমান উত্তরের তুলনায় দীর্ঘতর m->{int r=m[0][0],i=1;try{for(;;)r=f(r,m[i][i++]);}finally{return r;}}(longer০ বাইট) তবে আপনার উত্তরে বাইট সংরক্ষণ করার একটি দুর্দান্ত উপায়! :) খুব খারাপ আমি একবার আপনার উত্তরটি +1 করতে পারি।
কেভিন ক্রুইজসেন

1

জাভাস্ক্রিপ্ট, 61 57 56 52 50 44 42 বাইট

বাম থেকে ডান হ্রাস করে। ধরে নিই ফাংশনটি ভেরিয়েবলের জন্য বরাদ্দ করা হয়েছে f, এই মেটা পোস্ট অনুসারে মিঃ এক্সকোডার এবং সম্পূর্ণরূপে আমার দৃষ্টি আকর্ষণ করেছেন। আমি এটির সাথে একমত হিসাবে বলতে পারি না কারণ এটি আমাদের বিদ্যমান sensকমত্যের সাথে সরাসরি বিরোধিতা করে যা আমরা ধরে নিতে পারি না যে ইনপুটটিকে পূর্বনির্ধারিত ভেরিয়েবলের জন্য বরাদ্দ করা হয়েছে, তবে আমি আপাতত কয়েকটি বাইট সংরক্ষণ করব।

a=>a.map((y,z)=>x=(n=y[z])?z?f(x,n):n:x)|x

পরীক্ষার মামলা

g=
a=>a.map((y,z)=>x=(n=y[z])?z?f(x,n):n:x)|x
o.innerHTML=[[`f(x,y) = xy`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>x*y,45],[`f(x,y) = x<sup>y</sup>`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>x**y,1],[`f(x,y) = x-y`,[[4,5,6],[1,2,3]],(x,y)=>x-y,2],[`f(x,y) = <sup>(x+y)</sup>⁄<sub>2</sub>`,[[2,3,4],[5,6,7],[8,9,10]],(x,y)=>(x+y)/2,7],[`f(x,y) = x+2y`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>x+2*y,29],[`f(x,y) = max(x,y)`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>Math.max(x,y),9],[`f(x,y) = 2x`,[[1,2,3],[4,5,6],[7,8,9]],(x,y)=>2*x,4],[`f(x,y) = lcm(x,y)`,[[2,2,2],[2,2,3],[2,3,3],[4,4,4]],(x,y)=>-~[...Array(x*y).keys()].find(z=>!(++z%x|z%y)),6]].map(([a,b,c,d],e)=>`Test #${++e}:  ${a}\nMatrix:   ${JSON.stringify(b)}\nFunction: ${f=c}\nResult:   ${g(b)}\nExpected: ${d}`).join`\n\n`
<pre id=o></pre>


1

এপিএল NARS, 20 বাইট, 10 টি অক্ষর

{⍺⍺/1 1⍉⍵}

পরীক্ষা:

  f←{⍺⍺/1 1⍉⍵}
  ⎕←q←3 3⍴⍳10    
1 2 3
4 5 6
7 8 9
  ×f q
45
  *f q
1
  {⍺+2×⍵}f q
47
  ⌈f q
9
  {2×⍺+0×⍵}f q
2
  -f ⊃(4 5 6)(1 2 3)
2
  {(⍺+⍵)÷2}f ⊃(2 3 4)(5 6 7)(8 9 10)
5
  ∧f ⊃(2 2 2)(2 2 3)(2 3 3)(4 4 4)
6

ভাল করেছ. যদিও আমি মনে করি আপনি নিজেরাই এটি পৌঁছেছেন, এরিক আউটগোল্ফারের মূল সমাধানের সাথে অভিন্ন বলে মনে হয় ।
অ্যাডম

0

জেলি , 5 বাইট

বাম থেকে ডান.

ŒDḢç/

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

দাবি অস্বীকার: আমি জানি না এটি ব্ল্যাক-বাক্স ফাংশনগুলির জন্য একটি গ্রহণযোগ্য ইনপুট পদ্ধতি কিনা। এটি ধরে নিয়েছে যে ফাংশনটি উপরের লিঙ্কটিতে বাস্তবায়িত হয়েছে, এবং এভাবে "নামকরণ" করা হয়েছে (যার সাথে এটি কলযোগ্য) çতবে অন্যথায় আমার কাছে এটি নির্ধারণের কোনও উপায় নেই ç। কারও কাছে জেলি + ব্ল্যাক বক্স ফাংশনগুলির সাথে আরও অভিজ্ঞতা থাকলে আমি চিন্তাভাবনার প্রশংসা করব। আড্ডায় কিছু সময় ব্যয় করার পরে, আমরা অনুভব করেছি যে সম্ভবত ব্যবহার çকরা বৈধ হতে পারে।


0

ক্লোজার, 30 বাইট

#(reduce %2(map nth %(range)))

"বাম থেকে" হ্রাস করে।


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