अपने आप में n समय के साथ किसी सूची का कार्टेशियन उत्पाद


10

जब मूल्यों की एक सूची और एक सकारात्मक पूर्णांक दिया जाता है n, तो आपके कोड को सूची के कार्टेशियन उत्पाद को स्वयं के साथ आउटपुट करना चाहिए n

उदाहरण के लिए, pseudocode में आपका फ़ंक्शन निम्न के समान हो सकता है:

for x1 in list:
    for x2 in list:
        for x3 in list:
            ...
            for xn in list:
                print x1, x2, x3, ... , xn

उदाहरण:

repeated_cart([1,2,3], 3)

1 1 1  
1 1 2  
1 1 3  
1 2 1  
1 2 2  
1 2 3  
1 3 1  
1 3 2  
1 3 3  
2 1 1  
2 1 2  
2 1 3  
2 2 1  
2 2 2  
2 2 3  
2 3 1  
2 3 2  
2 3 3  
3 1 1  
3 1 2  
3 1 3  
3 2 1  
3 2 2  
3 2 3  
3 3 1  
3 3 2  
3 3 3

फंक्शंस में निर्मित (या आयातित पुस्तकालयों से कार्य) जो कार्टेशियन उत्पाद (या पावर) की गणना करते हैं, जिसके परिणामस्वरूप कोड कुछ उबाऊ होने के कारण अनुमति नहीं है।

इनपुट और आउटपुट को सीमांकित किया जाना चाहिए लेकिन किसी भी उचित विधि में लिया जा सकता है।

आदेश दिया गया है कि आउटपुट मायने नहीं रखता है लेकिन डुप्लिकेट की अनुमति नहीं है।

यह मेरा पहला प्रश्न है, इसलिए यदि मैंने कुछ भी गलत किया है, तो कृपया मुझे बताएं।


5
PPCG में आपका स्वागत है! कुछ भी गलत नहीं है, लेकिन इस मेटा पोस्ट और उत्तरों को देखने के लिए कुछ समय लें। चुनौतियों को लिखने से बचने की बातें
JayCe

4
और @JayCe के बिंदु पर अनुसरण करने के लिए, आप सैंडबॉक्स में एक प्रश्न पोस्ट करने से पहले प्रतिक्रिया प्राप्त करने के लिए (चाहिए) पोस्ट कर सकते हैं :-)
Giuseppe

@Giuseppe ठीक है, मैं अब से ऐसा होगा, धन्यवाद :)
JoshM


1
@ जाकोब सेट ठीक होना चाहिए
जोशएम

जवाबों:



6

आम लिस्प , 146 बाइट्स

(defun f(l n)(if(< n 2)(loop for x in l collect(list x))(loop for a in l nconc(loop for b in(f l(1- n))collect(cons a b)))))(princ(f(read)(read)))

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

ungolfed

(defun nloops (lst n)
  (if (< n 1)
      '(())
      (if (< n 2)
          (loop for x in lst collect (list x))
          (loop for a in lst
                nconc (loop for b in (nloops lst (1- n))
                            collect (cons a b))))))

2
आमतौर पर हम सुझाव देते हैं कि अपनी खुद की एक पोस्ट करने से पहले अन्य सबमिशन का इंतजार करें :-)
Giuseppe

1
@ गिउसेप्पे ओके, सलाह के लिए धन्यवाद :)
जोश

1
आपके पास सबमिट करने के लिए प्रिंट स्टेटमेंट नहीं है, क्योंकि एक फंक्शन की अनुमति है
ASCII-only

1
तो: 96
केवल


6

आर , 41 बाइट्स

function(l,n)unique(t(combn(rep(l,n),n)))

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

combnनिश्चित रूप से एक कार्टेशियन उत्पाद बिल्ट-इन नहीं है, क्योंकि यह nइसके इनपुट के सभी -combments की गणना करता है ।

आर , 40 बाइट्स

function(l,n)expand.grid(rep(list(l),n))

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

expand.grid शायद एक कार्टेशियन निर्मित उत्पाद है।


ऐसा लगता है कि आपके मुख्य सबमिशन में क्रमपरिवर्तन का क्रम गलत है।
किरिल एल

@KirillL। क्या कोई विशेष कारण महत्वपूर्ण है? मैंने किसी भी क्रम में उन्हें अनुमति देने के लिए पर्याप्त रूप से लचीला होने के रूप में आउटपुट कल्पना की व्याख्या की।
ग्यूसेप

ओपी की टिप्पणी है "सुनिश्चित करें कि आउटपुट सही क्रम में है", मैंने माना "सही" का मतलब उदाहरण के रूप में ही है।
किरिल एल

@KirillL। आह। यह नहीं देखा; यह सवाल के शरीर में नहीं है इसलिए मुझे नहीं पता था कि यह अस्तित्व में है! मैं पूछता हूँ कि यह स्पष्टीकरण के लिए वहाँ रखा जाता है।
ग्यूसेप


3

के (ngn / k) , 10 बाइट्स

{x@+!y##x}

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

{ }तर्क के साथ एक समारोह है xऔरy

#x इसकी लंबाई x

y##xxदोहराया की लंबाईy बार

!y##x 0,1, ..., लंबाई (x) -1 से अधिक लंबाई वाली y टुपल्स एक ट्रांसपोज़्ड मैट्रिक्स के रूप में

+ पक्षांतरित

x@xउन सूचकांकों के तत्व


3

एपीएल (डायलॉग क्लासिक) , 18 12 बाइट्स

{⍺[↑,⍳⍵⍴≢⍺]}

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

-6 बाइट्स @ngn को धन्यवाद!


आप कर सकते हैं का उपयोग एक वेक्टर तर्क के साथ सूचकांक उत्पन्न करने के लिए और फिर ⍺[ ]इसी मूल्यों को प्राप्त करने के लिए
NGN

मुझे RANK ERRORतब मिला जब मैंने ऐसा करने की कोशिश की।
ज़ाचारि


एकमात्र कैच 1 = 1 के साथ है, उस स्थिति में a एक सादे वेक्टर को लौटाता है, न कि नेस्टेड लम्बाई -1 वैक्टर के वेक्टर के रूप में, जैसा कि कोई अपेक्षा करेगा; यह उन बग्स में से एक है जो कभी भी ठीक नहीं होते हैं, पश्चगामी-अनुकूलता कारणों के लिए
ngn

3

पर्ल 5 , 33 बाइट्स

say for glob(join',',("{$_}")x<>)

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


अच्छा! इतने सारे उत्तर हाल ही में उपयोग करने में सक्षम हैं! आप कुछ करतब दिखाने के साथ 2 बाइट्स बचा सकते हैं: इसे ऑनलाइन आज़माएं!
डोम हेस्टिंग्स


3

रूबी , 53 बाइट्स

f=->l,n{n<2?l:l.flat_map{|i|f[l,n-1].map{|j|[i,*j]}}}

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

पुनरावर्ती दृष्टिकोण, इतना छोटा नहीं है, लेकिन किसी भी बिल्ट-इन से मुक्त होने की गारंटी है।

यह क्रमपरिवर्तन विधियों का उपयोग करने के लिए लुभावना है, लेकिन यह संभवतः गिनती नहीं करता है, और डॉक्स वास्तव में आदेश शुद्धता की कोई गारंटी नहीं देते हैं, हालांकि व्यवहार में काम करने के लिए लगता है:

रूबी , 35 बाइट्स

->l,n{[*l.repeated_permutation(n)]}

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




2

जेली , 11 9 7 बाइट्स

³;þẎƊ’¡

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

व्याख्या

³;þẎƊ’¡
³;þẎ    **Implements** the cartesian product of a value with the input
    Ɗ   Groups those together
     ’¡ Repeat (n-1) times

ओपी की टिप्पणी को देखें: पी
ज़ाचारि

मेरी टिप्पणी जिस पर मैं इसे लाया, वह यह है: "मैं यह भी मान रहा हूं कि पूरी चुनौती के लिए भवन भी बनाए गए हैं," इसलिए मैंने यह मान लिया कि यह ठीक है।
ज़ाचारि

ठीक है, चलो फिर ओपी की प्रतीक्षा करें
ज़ाचारि

@ Zacharý क्षमा करें, कार्टेशियन शक्ति समारोह की अनुमति नहीं है
जोश

3
मुझे नहीं पता, दो छोरों के लिए नेस्टेड मूल रूप से एक कार्टेशियन उत्पाद की परिभाषा है। मैं यह नहीं कह रहा हूं कि आपको इसे बदलना चाहिए, लेकिन मुझे लगता है कि इस चुनौती में बिल्ट-इन पर प्रतिबंध लगाना अस्पष्ट है।
dylnan

2

शुद्ध बैश (कोई बाहरी उपयोगिताओं नहीं), 57

printf -vn %0$1d
a=${n//0/{$2\}}
eval echo ${a//\}{/\},{}

इनपुट को कमांड-लाइन मापदंडों के रूप में दिया गया है; 1st है n, 2nd एक अल्पविराम से अलग की गई सूची है।

printf -vn %0$1d         ;# Create a string of n "0"s in the variable v
a=${n//0/{$2\}}          ;# Replace each "0" with "{a,b,...m}"
eval echo ${a//\}{/\},{} ;# Replace each "}{" with "},{" and evaluate the resulting brace expansion

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


2

जावा 10, 19 + 135 = 154 बाइट्स

import java.util.*;

List<List>f(Set l,int n){var o=new Stack();if(n<1)o.add(new Stack());else for(var t:l)for(var i:f(l,n-1)){i.add(t);o.add(i);}return o;}

यह ऑनलाइन की कोशिश करो

Ungolfed

List<List> f(Set l, int n) {
    var o = new Stack();
    if (n < 1)
        o.add(new Stack());
    else
        for (var t : l)
            for (var i : f(l, n - 1)) {
                i.add(t);
                o.add(i);
            }
    return o;
}

स्वीकृतियाँ

  • केविन क्रूज़सेन के लिए जावा 10 पोर्ट का धन्यवाद

आप जावा 10 के बजाय 8 उपयोग करते हैं, आप बदल सकते हैं Objectऔर Listके लिए-प्रत्येक छोरों करने के varलिए -4 बाइट्स। इसके अलावा, आप तो बदल सकते हैं Set<List>fकरने के लिए List<List>fऔर Set o=new HashSet();करने के लिए var o=new Stack();एक अतिरिक्त -1 बाइट के लिए। इसे ऑनलाइन आज़माएं।
केविन क्रूज़सेन

हम्म। मेमनों के लिए बाहर जाने वाले प्रकार अब वैध नहीं हैं
केवल

@ ASCII- केवल नहीं, अप्रतिबंधित लंबोदर की अनुमति है। मैं यहाँ एक लंबोदर का उपयोग नहीं कर सकता क्योंकि समाधान पुनरावृत्ति का उपयोग करता है।
जैकब

@ जाकोब आह, यह सही है> _>
केवल

2

Oracle SQL, 177 बाइट्स

एक संग्रह प्रकार बनाएँ (31 बाइट्स):

CREATE TYPE t IS TABLE OF INT;

फिर क्वेरी (146 बाइट्स) का उपयोग करें:

WITH n(a,b,c)AS(SELECT a,b,t()FROM i UNION ALL SELECT a,b-1,c MULTISET UNION t(COLUMN_VALUE)FROM n,TABLE(n.a)WHERE b>=0)SELECT c FROM n WHERE b=0

यह मानते हुए कि इनपुट पैरामीटर iकॉलम के साथ तालिका में हैं aऔर b:

CREATE TABLE i (a t,b INT) NESTED TABLE a STORE AS t_a;
INSERT INTO i VALUES ( t(1,2,3), 3 );

एसक्यूएल फिडल

परिणाम :

|     C |
|-------|
| 1,1,1 |
| 1,1,2 |
| 1,1,3 |
| 1,2,1 |
| 1,2,2 |
| 1,2,3 |
| 1,3,1 |
| 1,3,2 |
| 1,3,3 |
| 2,1,1 |
| 2,1,2 |
| 2,1,3 |
| 2,2,1 |
| 2,2,2 |
| 2,2,3 |
| 2,3,1 |
| 2,3,2 |
| 2,3,3 |
| 3,1,1 |
| 3,1,2 |
| 3,1,3 |
| 3,2,1 |
| 3,2,2 |
| 3,2,3 |
| 3,3,1 |
| 3,3,2 |
| 3,3,3 |

1

बैश , 61 बाइट्स

N=$1
shift
IFS=,
printf echo\\t%${N}s ""|sed "s/ /{$*},/g"|sh

इसे ऑनलाइन आज़माएं! मैंने स्ट्रिंग्स को दोहराते हुए पाया और कॉमा के साथ सूचियों को आश्चर्यजनक रूप से बैश में करने के लिए कठिन हो गया।


1

जावास्क्रिप्ट (नोड) , 75 बाइट्स

c=(m,n,a,i)=>a.length-n?m.map((_,j)=>c(m,n,[...a,m[j]],i+1)):console.log(a)

पुनरावर्ती फ़ंक्शन जो कंसोल को सूची को आउटपुट करता है। जहां aएक खाली सरणी है औरi 0 है (यकीन नहीं है कि यह अभी भी योग्य है):

c([1,2,3], 3, [], 0);

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


1
मुझे लगता है कि आपको करना होगा(m,n,a=[],i=0)=>
अरेटियर


1

जे , 17 बाइट्स

]{~(##)#:#@]i.@^[

यह काम किस प्रकार करता है?

मैं nसूची की लंबाई के आधार के साथ एक संख्या प्रणाली में सभी -digit संख्याओं की गणना करता हूं ।

            i.         - creates a list from zero to (not including)
         #@]           - the length of the list 
              @^       - to the power of
                [      - n (left argument)
   (##)                - creates a list of n times the length of the list (for the bases)
       #:              - converts all the numbers into lists of digits in the new base
]{~                    - use the digits as indices into the list

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




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