একটি ম্যাট্রিক্স ডায়মন্ডাইজ করুন


20

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

উদাহরণস্বরূপ, নিম্নলিখিত ম্যাট্রিক্স বিবেচনা করুন:

1 2 3
4 5 6
7 8 9

এই ম্যাট্রিক্সের হীরা সংস্করণটি হ'ল:

  1
 4 2
7 5 3
 8 6
  9

ইনপুট এবং আউটপুট

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

ম্যাট্রিকগুলিতে কেবল ইতিবাচক পূর্ণসংখ্যা থাকবে।

ইনপুট ম্যাট্রিক্স অগত্যা স্কোয়ার হবে না।

ইনপুট ম্যাট্রিক্স কমপক্ষে 1 × 1 হবে।

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

Input:  [[1]]
Output: [[1]]

Input:  [[1,2],[3,4]]
Output: [[1],[3,2],[4]]

Input:  [[1,2,3],[4,5,6]]
Output: [[1],[4,2],[5,3],[6]]

Input:  [[11,2,5],[3,99,3],[4,8,15],[16,23,42]]
Output: [[11],[3,2],[4,99,5],[16,8,3],[23,15],[42]]

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins



সংশ্লিষ্ট / সাধারণীকরণ। (যদিও এটি কোনও ছদ্মরূপ বিবেচনা করবে না, যেহেতু এটির একটি ৪০ ডিগ্রি একক দ্বারা রেগড অ্যারে এবং প্রয়োজনীয় ঘূর্ণন মঞ্জুরি দিয়েছিল))
মার্টিন এন্ডার

উত্তর:


19

জে, 7 বাইট

<@|./.

এটি একটি নামবিহীন মোনাডিক ক্রিয়া যা একটি ম্যাট্রিক্স গ্রহণ করে এবং অ্যান্টিডায়াগনগুলির একটি তালিকা ফেরত দেয়:

   input =. i.3 4
   input
0 1  2  3
4 5  6  7
8 9 10 11

   <@|./. input
┌─┬───┬─────┬─────┬────┬──┐
│0│4 1│8 5 2│9 6 3│10 7│11│
└─┴───┴─────┴─────┴────┴──┘

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

  • /.প্রতিটি অ্যান্টি-ডায়াগোনালটিতে একটি ফাংশন প্রয়োগ করতে জে এর অন্তর্নির্মিত। দুর্ভাগ্যক্রমে, এই অ্যান্টি-ডায়াগোনগুলি আমরা এখানে যা চাই তার বিপরীত ক্রমে দেওয়া হয়।
  • ইন <@|., আমরা প্রথমে প্রয়োগ করি |.যা এন্টি-ডায়াগোনালটিকে বিপরীত করে এবং তারপরে <এটি বাক্সে ফেলে (যা জে র‌্যাগড অ্যারে ফিরিয়ে দেওয়ার একমাত্র উপায়, যেহেতু সাধারণ অ্যারেগুলি সর্বদা আয়তক্ষেত্রাকার, তাই অ্যান্টিডিজোনালগুলি জিরো দিয়ে প্যাড করা হবে)।

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

5

পাইথন, 91 বাইট

e=enumerate
lambda M:[[r[n-i]for i,r in e(M)if-1<n-i<len(r)][::-1]for n,_ in e(M[1:]+M[0])]

আইডিয়নে এটি পরীক্ষা করুন ।


পাইথন + নুমপি, 69 বাইট

import numpy
lambda M:map(M[::-1].diagonal,range(1-len(M),len(M[0])))

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


4

জেলি, 7 বাইট

ṚŒDṙZL$

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

ব্যাখ্যা

Ṛ         Reverse the matrix vertically.
 ŒD       Get its diagonals. However these start from 
          the main diagonal, not the corners.
    ZL$   Get the width of the input matrix.
   ṙ      Rotate the list of diagonals left by that many 
          places to obtain the correct order.

জেলি জানেন না, তবে এটি ইউনিকোড অপারেন্ডের প্রয়োজন হলে এটি 7 বাইট নয়।
গুইডোবট

5
@ গুইডোবট জেলি একটি কাস্টম কোড পৃষ্ঠা ব্যবহার করে যা এটি 256 টি অক্ষরকে একক বাইট হিসাবে বোঝে প্রতিটি এনকোড করে।
ডেনিস

4

গণিত, 58 56 বাইট

a=Length;Reverse@#~Diagonal~b~Table~{b,1-a@#,a@#&@@#-1}&

বেনামে ফাংশন, নেস্টেড অ্যারে নেয়।


আপনি Length[#]যেখানে সেখানে একটি সংরক্ষণ করতে পারেন \[Transpose]। এবং সম্ভবত এলিয়াসিং থেকে অন্য Length
Sp3000

বা Length@#&@@#ASCII এর জন্য কেবল একই বাইট গণনায়।
মার্টিন এন্ডার

3

সিজেম, 17 বাইট

{eeSf.*::+W%zSf-}

একটি নামবিহীন ব্লক (ফাংশন) যা স্ট্যাকের ম্যাট্রিক্সের প্রত্যাশা করে এবং এর প্রতিষেধকগুলির সাথে এটি প্রতিস্থাপন করে।

এটি এখানে পরীক্ষা করুন।

এটি (এসপি 3000 দ্বারা পাওয়া) একই বাইট গণনার জন্য কাজ করে:

{_,,Sf*\.+W%zSf-}

ব্যাখ্যা

এটি একটি উদাহরণ দিয়ে সবচেয়ে ভাল ব্যাখ্যা করা হয়েছে। ইনপুটটি বিবেচনা করুন:

[[0  1  2  3]
 [4  5  6  7]
 [8  9 10 11]]

ee    e# Enumerate matrix, turning each row [x ... z] into [i [x ... z]] where
      e# i is the vertical index from the top.

[[0 [0  1  2  3]]
 [1 [4  5  6  7]]
 [2 [8  9 10 11]]]

Sf.*  e# Replace each i with a string of i spaces.

[[""   [0  1  2  3]]
 [" "  [4  5  6  7]]
 ["  " [8  9 10 11]]]

::+   e# Prepend these strings to the rows.

[[0  1  2  3]
 ['  4  5  6  7]
 ['  '  8  9 10 11]]   e# Note that each '  corresponds to a space character.

W%    e# Reverse the rows.

[['  '  8  9 10 11]
 ['  4  5  6  7]
 [0  1  2  3]]

z     e# Zip/transpose.

[[ '  '  0]
 [ '  4  1]
 [ 8  5  2]
 [ 9  6  3]
 [10  7]
 [11]]

Sf-   e# Remove spaces from each row.

[[ 0]
 [ 4  1]
 [ 8  5  2]
 [ 9  6  3]
 [10  7]
 [11]]

3

পাইথন 2, 88 87 বাইট

lambda L:[filter(None,x)[::-1]for x in map(None,[],*[i*[0]+r for i,r in enumerate(L)])]

0s, জিপ প্রস্তুত করুন, তারপরে মিথ্যা উপাদানগুলি সরান। টিপলগুলির একটি তালিকা ফেরত দেয়। এটি map(None,...)সঞ্চালন করতে zip_longest (এর সাথে নিখোঁজ দাগগুলি প্যাডিং করা None) এবং filter(None,...)মিথ্যা উপাদানগুলি সরাতে ব্যবহার করে।

বিরক্তিকরভাবে, আমাদের গ্যারান্টিটি দেওয়ার জন্য একটি অতিরিক্ত []সারি যুক্ত করতে হবে mapযে টিপলসের একটি তালিকা ফিরে এসেছে, যেহেতু 1x1 ম্যাট্রিক্সের পরিবর্তে map(None,*[[1]])রিটার্ন আসে । যদিও অতিরিক্ত সারিটি ছিটকে যায় ।[1][(1,)]filter

(-1 বাইটের জন্য @ ডেনিসকে ধন্যবাদ)


3

রুবি, 68 66 বাইট

বেনামে ফাংশন।

->l{i=-1;k=[];l.map{|r|i-=j=-1;r.map{|e|k[i+j+=1]=[e,*k[i+j]]}};k}
  • স্প্ল্যাট অপারেটর কীভাবে কাজ করে তার কারণে আমি অ্যারে সংযোজনটি ভুলে 2 বাইট সংরক্ষণ করতে সক্ষম হয়েছি।

2

গণিত, 60 বাইট

#&@@@#&/@GatherBy[Join@@MapIndexed[List,#,{2}],Tr@*Last]&

ম্যাথমেটিকা ​​পোস্টফিক্স \[Transpose]অপারেটর হিসাবে পড়ে এমন একটি ইউনিকোড অক্ষর কোথায় ?

এটি অন্যান্য গাণিতিক সমাধানের তুলনায় কিছুটা দীর্ঘ longer তবে আমি অনুভব করেছি যে আমি এটি পোস্ট করেছি কারণ এটি Diagonalsঅন্তর্নির্মিত ব্যবহার করে না এবং সম্পূর্ণ ভিন্ন পদ্ধতির ব্যবহার করে।

ব্যাখ্যা

MapIndexed[List,#,{2}]

এটি প্রথমে ম্যাট্রিক্স স্থানান্তর করে (যেমন ম্যাট্রিক্স সমতল করা হলে অ্যান্টিজাগুলি সঠিক ক্রমে উপস্থিত হয়)। তারপর আমরা মানচিত্র Listসূচক, যা প্রতিটি ম্যাট্রিক্স উপাদান সক্রিয় সঙ্গে ম্যাট্রিক্স একসঙ্গে কোষগুলোর উপর iমধ্যে {i, {x, y}}যেখানে xএবং yম্যাট্রিক্স মধ্যে উপাদান স্থানাঙ্ক আছে।

Join@@...

এটি বাহ্যতমতম মাত্রাকে সমতল করে, যাতে কলাম-প্রধান ক্রমে আমাদের কাছে ম্যাট্রিক্স উপাদানগুলির (তাদের স্থানাঙ্কের সাথে) সমতল তালিকা থাকে।

GatherBy[..., Tr@*Last]

এই উপাদানগুলিকে তাদের স্থানাঙ্কের যোগফল দ্বারা গোষ্ঠীভূত করে। নোট করুন যে অ্যান্টিডিজোনালগুলি ধ্রুবকের রেখা x+y, সুতরাং এটি ঠিক আমাদের গোষ্ঠীকরণের কাজটি করে। প্রতিটি গ্রুপের মধ্যে অর্ডার সংরক্ষণ করা হয়। এখন আমাদের আবার স্থানাঙ্কগুলি থেকে মুক্তি পাওয়া দরকার। এটি বরং ক্রিপ্টিকের মাধ্যমে করা হয়:

#&@@@#&/@...

এটি #&@@@#&প্রতিটি গোষ্ঠীর উপর ফাংশনটি মানচিত্র করে , যা নিজেই এই গ্রুপের প্রতিটি উপাদানের জন্য প্রযোজ্য #& এবং #কেবল প্রথম যুক্তি, অর্থাত্ মূল ম্যাট্রিক্স উপাদান।


কারণ হিসাবে পড়া হয় যে কোন ব্যাখ্যা \[transpose]?
মারাত্মক করুন

1
@ ফ্যাটালাইজ এটি একটি বেসরকারী ব্যবহারের ইউনিকোড কোডপয়েন্ট এবং এই কোডপয়েন্টের সাথে গ্লাইফ ম্যাথামেটিকাকে সহযোগীতা একটি সুপারস্ক্রিপ্ট T: রেফারেন্স.ওয়লফ্রাম / ল্যাঙ্গুয়েজ / রেফ / চ্যাকার / ট্রান্সপোজ এইচটিএমএল ... \[Transpose]কেবলমাত্র সেই ইউনিকোড চরিত্রেরই ASCII ট্রান্সলিটেশন। ইউনিকোড চরিত্রটি অনুলিপি করা বা ম্যাথামেটিকায় অনুলিখন কাজ করবে।
মার্টিন এন্ডার

2

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

accumarrayফাংশনটির সামান্য অপব্যবহারের সাথে :

@(M)char(accumarray(((1:size(M,1))+(0:size(M,2)-1)')(:),M(:),[],@(x){num2str(x')}))

এটি একটি বেনামী ফাংশন সংজ্ঞায়িত করে। এটি ব্যবহার করতে, একটি চলক বা ব্যবহারের জন্য বরাদ্দ করুন ans

ইনপুট :সারি বিভাজক হিসাবে ম্যাট্রিক্স । আউটপুট হ'ল একটি ঘর অ্যারে যা প্রতিটি সারির জন্য অ্যারে সমন্বিত থাকে (জঞ্জিত অ্যারেগুলির সাথে অক্টাভের সমতুল্য)। এটি কোষ অ্যারের সূচকগুলি এবং প্রতিটি ঘরের বিষয়বস্তু প্রদর্শন করে অষ্টাভ দ্বারা প্রদর্শিত হয়। এখানে চেষ্টা করুন

ফলাফলটি ফাঁকা স্থান এবং নিউলাইনগুলি দ্বারা পৃথকভাবে প্রদর্শন করতে: 83 বাইট

@(M)char(accumarray(((1:size(M,1))+(0:size(M,2)-1)')(:),M(:),[],@(x){num2str(x')}))

আপনি এটিও করতে পারেন এটি এখানে চেষ্টা


2

জাভাস্ক্রিপ্ট (ফায়ারফক্স), 86 75 বাইট

a=>a.concat(a[0]).slice(1).map((_,i)=>[for(v of a)if(n=v[i--])n].reverse())

11 বাইট সংরক্ষিত হয়েছে @ নীলকে ধন্যবাদ!

ফায়ারফক্স 30+ এ কাজ করে। অ্যারেগুলির একটি অ্যারে নেয়।


চমৎকার অ্যালগরিদম, তবে আপনি a.concat(a[0]).slice(1)সঠিক দৈর্ঘ্যের একটি অ্যারে পেতে ব্যবহার করতে পারেন । এছাড়াও, [for(of)]ES6 নয়; আমি সাধারণত এটিকে (ফায়ারফক্স 30+) বা এ জাতীয় কিছু হিসাবে লিখি।
নীল

@Neil বাহ, আমি একটু নিরীহ figuring আউট না ব্যবহার করার জন্য মনে concatএবং slice। ধন্যবাদ!
ব্যবহারকারী81655

2

অক্টাভা, 63 62 বাইট

@ ডনম্যু ... একটি লাইট মেন্ডোকে ধন্যবাদ একটি বাইট অপসারণ করা হয়েছে!

@(a)cellfun(@(x)x(x>0)',num2cell(spdiags(flipud(a)),1),'un',0)

আমি বিরক্তিকর রুটে গিয়ে অ্যান্টিডায়াগনগুলিকে ছাঁটাই করেছি।

আদর্শের উপর নমুনা রান করুন ।


আমার মনে হয় আপনি খাটো করতে পারেন 'uni'থেকে'un'
লুইস Mendo

@ লুইস মেন্ডো কেন, হ্যাঁ আমি পারি! ধন্যবাদ! :)
বেকার 21

2

হাস্কেল, 83 82 বাইট

r=zip[0..]
\o->fst$span(any(>0))[reverse[e|(x,t)<-r o,(v,e)<-r t,x+v==a]|a<-[0..]]

নিমি একটি বাইট সংরক্ষণ করে। ধন্যবাদ!


1

পাইথন, 128 বাইট (নমপি)

(lambda A: (lambda A,S:[[A[U][I-U] for U in range(min(S[1]-1,I),max(I-S[0]+1,0)-1,-1)] for I in range(S[1]+S[0]-1)])(A,A.shape))

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! ডিফল্টরূপে, কোড গল্ফ চ্যালেঞ্জের জমা দেওয়া অবশ্যই প্রোগ্রাম বা ফাংশন এবং I / O এর জন্য অনুমোদিত পদ্ধতিগুলির একটি ব্যবহার করতে হবে । হার্ডকডযুক্ত ভেরিয়েবলের ইনপুটটি প্রত্যাশা করে এমন স্নিপেট অনুমোদিত নয়।
ডেনিস

দেখে মনে হচ্ছে আপনি প্রথম সমাধানটি পুনরায় কাজ করতে পারেন যা lambdaকেবলমাত্র একটি ল্যাম্বডায় ব্যবহার করে যা আপনি আপনার জমা হিসাবে ব্যবহার করতে পারেন।
অ্যালেক্স এ।

আমি এটি ল্যাম্বডা করব
লুইস মাসুয়েলি

lambda A:[[A[U][I-U]for U in range(max(I-len(A)+1,0),min(len(A[0])-1,I)+1)]for I in range(len(A+A[0])-1)](যেমন আপনার আসল সংশোধন হিসাবে) কিছুটা খাটো হবে। এছাড়াও, প্রশ্ন থেকে অভিমুখী A[U][I-U]হওয়ার A[I-U][U]জন্য আপনার পরিবর্তন করা উচিত ।
ডেনিস

বাসায় ফিরে এলে তা যাচাই করে নেব। অর্থে তোলে
লুইস মাসুয়ালি

1

পাইথ , 41 17 বাইট

tm_<dx+dYk.T+LaYk

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

@ ডুরকনব এর অন্য সমস্যার সমাধান থেকে অনুপ্রাণিত ।

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

tm_<dx+dYk.T+LaYk
            +L      prepend to each subarray...
              aYk   (Y += ''). Y is initialized to [],
                    so this prepends [''] to the first
                    subarray, ['', ''] to the second, etc.
                    ['' 1  2  3
                     '' '' 4  5  6
                     '' '' '' 7  8  9
                     '' '' '' '' 10 11 12
                     '' '' '' '' '' 13 14 15]
          .T        transpose, giving us
                    ['' '' '' '' ''
                     1  '' '' '' ''
                     2  4  '' '' ''
                     3  5  7  '' ''
                     6  8  10 ''
                     9  11 13
                     12 14
                     15]
 m_<dx+dYk          removes all empty strings in the
                    subarrays while reversing each one
t                   remove the first subarray

পূর্ববর্তী প্রচেষ্টা:

JlQKlhQm_m@@Qk-dk}h.MZ,0-dtKh.mb,tJdUt+JK

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

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

JlQKlhQm_m@@Qk-dk}h.MZ,0-dtKh.mb,tJdUt+JK    input array stored as Q
JlQ                                          J = len(Q)
   KlhQ                                      K = len(Q[0])
       m                            Ut+JK    list for d from 0 to J+K-1:
        _m       }AAAAAAAAAABBBBBBBB             reversed list for k from A to B, where:
                  h.MZ,0-dtK                       A = max(0, d-(K-1))
                       0-dtK                               0  d-(K-1)
                            h.mb,tJd               B = min(J-1, d)
                                 tJd                       J-1  d
          @@Qk-dk                                    Q[k][d-k]

1

গ্রোভি, 77 73 75

{i->o=[].withDefault{[]};a=0;i.each{b=0;it.each{o[a+b++].add(0,it)};a++};o}

অ্যারেরকে অ্যারে ইনপুট হিসাবে নেয় এবং অ্যারের অ্যারে প্রদান করে।

চেষ্টা করে দেখুন

সম্পাদনা: আমি আনসার আউটপুট করতে ভুলে গিয়েছিলাম, যোগ করার পরে এটি স্কোর 75 পর্যন্ত চলে যায়।

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