एक मैट्रिक्स को फिर से, दो बार


20

तुम एक वर्ग दिए गए हैं मैट्रिक्स , और एक सूची (या वेक्टर) लंबाई के संख्या से युक्त के माध्यम से (या के माध्यम से )। आपका कार्य में निर्दिष्ट आदेश के अनुसार मैट्रिक्स के कॉलम और पंक्तियों को फिर से व्यवस्थित करना है ।n×nयूn1n0n-1A uयू

है, तो आप एक मैट्रिक्स का निर्माण करेगी जहां मई के तत्व है मई के तत्व । आपको इस क्रिया का उलटा भी आउटपुट करना चाहिए; वह है, का (i, j) -th तत्व नए मैट्रिक्स में स्थिति पर समाप्त होगा ।बी(मैं,जे)(यू(मैं),यू(जे))(यू(मैं),यू(जे))सी

उदाहरण के लिए, दिए गए

=[1 11213212223313233],यू=[312]

आउटपुट

बी=[333132131 112232122],सी=[22232132333112131 1]

आप डिफ़ॉल्ट I / O विधियों में से किसी के माध्यम से इनपुट और आउटपुट ले सकते हैं। जब तक आप दोनों का आउटपुट नहीं लेते तब तक आपको यह निर्दिष्ट नहीं करना है कि कौन सा मैट्रिक्स या । आप मान सकते हैं कि केवल धनात्मक पूर्णांक होते हैं, और आप लिए 1- या 0-आधारित अनुक्रमण का उपयोग कर सकते हैं । आपको कम से कम आकार तक के मेट्रिसेस का समर्थन करना चाहिए ।बीसीयू64×64

उदाहरण

===== Input =====
A =
 35     1     6    26    19    24
  3    32     7    21    23    25
 31     9     2    22    27    20
  8    28    33    17    10    15
 30     5    34    12    14    16
  4    36    29    13    18    11
u=
  3 5 6 1 4 2

==== Output =====
B = 
  2    27    20    31    22     9
 34    14    16    30    12     5
 29    18    11     4    13    36
  6    19    24    35    26     1
 33    10    15     8    17    28
  7    23    25     3    21    32
C = 
 17    15     8    10    28    33
 13    11     4    18    36    29
 26    24    35    19     1     6
 12    16    30    14     5    34
 21    25     3    23    32     7
 22    20    31    27     9     2


क्या हम यहां खाली लाइन के बिना आउटपुट दे सकते हैं , वह है, इस तरह ? (कोई अस्पष्टता नहीं है) या, इसे विफल करते हुए, 0विभाजक के रूप में उपयोग करें ?
लुइस मेंडू

@LuisMendo कोई समस्या नहीं।
सेंचुरी

क्या इसके लिए 1-इंडेक्सिंग आवश्यक है? क्या हम 0-इंडेक्सिंग और इनपुट का उपयोग कर सकते हैं u = [2, 0, 1]?
मान स्याही

@ValueInk पहला वाक्य देखें, [...] जिसमें n के माध्यम से नंबर 1 है (या n
ch

जवाबों:



6

MATL , 15 13 बाइट्स

t3$)&Gw&St3$)

आदानों u, तो A

आउटपुट B, फिर Cएक विभाजक के बिना, जैसा कि कोई अस्पष्टता नहीं है।

इसे ऑनलाइन आज़माएं!

व्याख्या

t     % Take input u implicitly. Duplicate u
3$)   % Take input A implicitly. Index A with u as row and column indices
&G    % Push the two inputs again: u, A
w     % Swap
&S    % Push indices that would make u sorted. Call that v
t     % Duplicate v
3$)   % Index A with v as row as column indices. Display implcitly

5

ऑक्टेव , 33 बाइट्स

@(A,u){A(u,u) A([~,v]=sort(u),v)}

इसे ऑनलाइन आज़माएं!

एक त्रुटि को सुधारने और कई बाइट को बचाने के लिए लुइस का धन्यवाद !

बेसिक इंडेक्सिंग दोनों कार्यों के लिए यहां काम करता है, एक वेक्टर v को क्रमपरिवर्तन के बराबर परिभाषित करके जो यू पूर्ववत करता है । अर्थात, यदि यू=(3,1,2) तो v का पहला तत्व 2 है, क्योंकि 1, यू की दूसरी स्थिति में है । यह ओक्टेव के सॉर्ट फ़ंक्शन के साथ पूरा किया गया है।


5

अजगर 3 सुन्न के साथ, 51 45 बाइट्स

lambda m,p:[m[x][:,x]for x in(p,p.argsort())]

इसे ऑनलाइन आज़माएं!

-6 बाइट्स @xnor की बदौलत

फ़ंक्शन दो तर्क लेता है: एक numpyमैट्रिक्स और एक क्रमपरिवर्तन वेक्टर जिसमें 0 से n-1 तक मान होता है ।



@xnor धन्यवाद! मैंने महसूस किया कि इसे किसी तरह से छोटा किया जा सकता है, लेकिन for-लूप का उपयोग करने का विचार मेरे दिमाग में नहीं आया।
जोएल




3

जे , 19 बाइट्स

(]/:~"1/:)"_ 1],:/:

इसे ऑनलाइन आज़माएं!

  • मुख्य क्रिया ]/:~"1/:
    • /:दायाँ आर्ग (निर्दिष्ट क्रम) को क्रमबद्ध करने वाले क्रम के अनुसार दायें बायाँ arg (मैट्रिक्स) सबसे अधिक होता है। इस प्रकार पंक्तियाँ।
    • अब वह परिणाम /:~"1निर्दिष्ट क्रम के अनुसार फिर से हल हो जाएगा ]। लेकिन इस बार हम रैंक 1 के साथ छँट रहे हैं, यानी, हम प्रत्येक पंक्ति को छाँट रहे हैं, जिसमें स्तंभों को छाँटने का प्रभाव है।
  • ],:/:हम दोनों निर्दिष्ट क्रम का उपयोग करके उपरोक्त लागू ]और ऊपर ग्रेड निर्दिष्ट क्रम की /:। यह हमें 2 परिणाम देता है जो हम चाहते हैं।

अच्छा! मैं दो बार सॉर्ट + ट्रांसफ़र करने के बारे में सोच रहा था, लेकिन लंबे समय तक खत्म हो जाएगा।
गैलेन इवानोव

u0-आधारित होने की अनुमति है, इसलिए क्रमबद्ध ( /:) {अदला-बदली के साथ अनुक्रमण ( ) किया जा सकता है
ngn

3

जावास्क्रिप्ट (Node.js) , 77 70 68 बाइट्स

a=>g=(u,v=[])=>[u.map((i,x)=>u.map(j=>a[i][j],v[i]=x)),v&&g(v,0)[0]]

इसे ऑनलाइन आज़माएं!


मुझे यह पता लगाने में एक मिनट लग गया कि क्या vथा। यह साफ-सुथरा है कि आपने एक आदिम मूल्य पर संपत्ति असाइनमेंट की गैर-सख्त मोड मूक विफलता के लिए एक उपयोग कैसे पाया, और अपने पुनरावर्तन बेस-केस के लिए इसका उपयोग किया।
पैट्रिक रॉबर्ट्स

3

एपीएल (Dyalog विस्तारित) , 12 बाइट्स SBCS

यूसीबी

⌷∘⎕¨⍋¨⍛⍮⍨⍮⍨⎕

इसे ऑनलाइन आज़माएं!

यू[3,1,2]

⍮⍨ निकटता-सेल्फी; [[3,1,2],[3,1,2]]

⍋¨ क्रमपरिवर्तन-प्रत्येक का उलटा; [[2,3,1],[2,3,1]]
 तो
⍮⍨ खुद के साथ juxtapose[[[2,3,1],[2,3,1]],[[3,1,2],[3,1,2]]]




¨


3

जे , 17 16 15 14 बाइट्स

-1 @ जोनाह को धन्यवाद

([{"1{)~(,:/:)

इसे ऑनलाइन आज़माएं!


1
अच्छा! आप 14 के साथ नीचे उतर सकते हैं ([{"1{)~(,:/:): इसे ऑनलाइन आज़माएं!
जोनाह

Btw, यादृच्छिक सवाल: मैंने आपको J, APL और K. उत्सुक में गोल्फ (बहुत अच्छी तरह से) पर ध्यान दिया है जिसे आप समग्र रूप से पसंद करते हैं? इसके अलावा, मैं आपको यह कहते हुए याद करता हूं कि आपने K को पेशेवर रूप से इस्तेमाल किया है, क्या मुझे वह सही याद है?
योना

@ जोना अगर मुझे एक चुनना होगा, तो वह निश्चित रूप से कश्मीर होगा ( यदि आप कारणों को जानना चाहते हैं तो के चैट में मुझे पींग दें ), लेकिन मैं सभी सरणी भाषाओं में गोल्फ का आनंद लेता हूं। दुख की बात है, मैं भाग्यशाली नहीं हूँ कि कुछ ऐसे लोग हैं जिनके पास k- भाषा की नौकरी हो सकती है
ngn

2

चारकोल , 24 बाइट्स

E⟦ηEη⌕ηκ⟧Eθ⪫E觧θ§ιμ§ιξ 

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। 0 अनुक्रमित। नोट: अनुगामी स्थान। स्पष्टीकरण:

    η                       Input `u`
   E                        Map over elements
     ⌕                      Index of
       κ                    Current index in
      η                     Input `u`
  η                         Input `u`
E⟦      ⟧                   Map over `u` and its inverse
          θ                 Input `A`
         E                  Map over elements
             θ              Input `A`
            E               Map over elements
                θ           Input `A`
               §            Indexed by
                  ι         Current vector
                 §          Indexed by
                   μ        Row index
              §             Indexed by
                     ι      Current vector
                    §       Indexed by
                      ξ     Column index
           ⪫                Join with spaces for readability
                            Implicitly print




1

जेली ,  12 11  13 बाइट्स

+2 :( मामलों को ठीक करने के लिए जब बी = सी

ṭþ`œị¥@Ƭị@2,0

एक dyadic लिंक सूचियों की एक सूची को स्वीकार करने, A( nद्वारा n), बाईं तरफ और पहले की एक सूची nठीक है, पर पूर्णांकों u, जो सूचियों की सूची की एक सूची पैदावार, [B, C]

इसे ऑनलाइन आज़माएं!

कैसे?

ṭþ`œị¥@Ƭị@2,0 - Link: A, u
       Ƭ      - collect up while the results are no longer unique, applying:
     ¥@       -   last two links as a dyad with swapped arguments:
  `           -     use left (u) as both arguments of:
 þ            -       outer product with:
ṭ             -         tack
   œị         -     multi-dimensional index into last result (starting with A)
                ...at the end of the Ƭ-loop we have [A,B,...,C]
                                                 or [A] if A=B=C
                                                 or [A,B] if B=C but A!=B
          2,0 - literal pair [2,0]
         @    - with swapped arguments:
        ị     -   index into (1-based & modular) -> [B,C]
                                                 or [A,A]=[B,C] if A=B=C
                                                 or [B,B]=[B,C] if B=C

1

क्यू, 26 बाइट्स

{Y:iasc y;(x[y;y];x[Y;Y])}

iasc यह तर्क के आधार पर अनुक्रमित करने के लिए रिटर्न देता है।


1

क्लीन , 91 बाइट्स

import StdEnv
$a u=map(\l={{a.[i,j]\\j<-l}\\i<-l})[u,[k\\i<-[0..]&_<-u,j<-u&k<-[0..]|j==i]]

इसे ऑनलाइन आज़माएं!

एरे की एक सरणी और शून्य-आधारित सूचकांकों की सूची लेते हुए परिभाषित $ :: {{a}} [Int] -> [{{a}}](उपयोग किया जाता है a = Int), बी और सी युक्त सरणियों के एरे की सूची लौटाता है।


1

पायथन 3 , 91 बाइट्स

lambda a,u:[[[a[y][x]for x in t]for y in t]for t in[u,[u.index(i)for i in range(len(u))]]]

इसे ऑनलाइन आज़माएं!

एक 2 डी और 1 डी सूची के रूप में पैरामीटर लेता है और एक सूची देता है जिसमें दो 2 डी सूचियां बी और सी होती हैं। मुझे यकीन नहीं है कि सभी फॉर-लूप करने के लिए एक क्लीनर तरीका है।


1

C ++ (gcc) , 148 142 बाइट्स

#import<queue>
#define q[o[i/z]*z+o[i%z]]
using V=std::vector<int>;int f(V m,V o,V&r,V&R,int z){int i=z*z;for(r=R=V(i);i--;r[i]=m q)R q=m[i];}

इसे ऑनलाइन आज़माएं!

@ वेक्टर के बजाय # वेक्टर <का उपयोग करने के लिए @ceilingcat सुझाव के लिए धन्यवाद, जो <वेक्टर> के बजाय रहस्यमय रूप से एसटीडी - वेक्टर लाता है


@ceilingcat अब मैं देख रहा हूं कि आयात कतार मुझे वेक्टर तक पहुंच प्रदान करती है .. क्या यह संकलक निर्भर है? मैं इस बारे में जानकारी खोजने का प्रयास कर रहा हूं, लेकिन कुछ भी नहीं मिला
AZTECCO

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.