ডিক্সোগ্রাফিকভাবে সাজানো ক্রমে প্রিপেন্ড-অ্যাপেন্ড ক্রমগুলির সেট তৈরি করুন


14

নিম্নলিখিত পদ্ধতি দ্বারা উত্পন্ন করা যেতে পারে এমন সংখ্যার ক্রম হতে দৈর্ঘ্যের একটি প্রিপেন্ড-এপেন্ড ক্রম নির্ধারণ করুন :n1, 2, ..., n

  • নম্বর দিয়ে শুরু করুন 1

  • প্রতিটি সংখ্যার 2জন্য n, এই সংখ্যাটি অনুক্রমের শুরু বা শেষের দিকে রাখুন (হয় এটি পূর্বে যুক্ত করুন বা সংযোজন করুন, সুতরাং ক্রমের নাম) the

উদাহরণস্বরূপ, দৈর্ঘ্য 4-এর প্রিপেন্ড-অ্যাপেন্ড ক্রম উত্পন্ন করার জন্য এটি একটি বৈধ উপায়

1
21     [beginning]
213    [end]
2134   [end]

আপনার টাস্ক একটি প্রোগ্রাম বা ফাংশন যা একটি সংখ্যা নিতে হবে নির্মাণ করা হয় nথেকে 3থেকে 30ইনপুট হিসাবে, এবং মুদ্রণ বা দৈর্ঘ্যের সমস্ত শুরুতে যোগ-পরিশেষে যোগ সিকোয়েন্স আসতে nউপরে 9 প্রতিনিধিত্ব করা হবে আভিধানিক ক্রমে (আপনি স্ট্রিং এবং তালিকা, সংখ্যা outputting করছি অক্ষর হিসাবে a-u, স্ট্রিং দৈর্ঘ্য সংরক্ষণ করতে)। উদাহরণস্বরূপ, এটি সেই আদেশটির জন্য n = 4:

1234  [RRR]
2134  [LRR]
3124  [RLR]
3214  [LLR]
4123  [RRL]
4213  [LRL]
4312  [RLL]
4321  [LLL]

সাধারণত, দৈর্ঘ্যের 2 এন -1 প্রিপেন্ড-অ্যাপেন্ড অনুমতি রয়েছে n

আপনি আপনার কোডটিতে আপনার ভাষাতে কোনও অন্তর্নির্মিত বাছাইয়ের ক্রিয়া ব্যবহার করতে পারবেন না। যে কোনও ভাষায় এটি করার সবচেয়ে সংক্ষিপ্ত প্রোগ্রাম।


আমি আউটপুট ফর্ম্যাট প্রয়োজনের ভক্ত নই, বিশেষত অক্ষরে রূপান্তর a-u। আমরা কি কেবল সংখ্যার তালিকা আউটপুট করতে পারি?
xnor

3
আপনি হয়ত কিছু সময়ের পরে উত্তরটি গ্রহণ করতে চাইতে পারেন কারণ কিছু লোকের কোনও প্রশ্নের উত্তর যদি তার গ্রহণযোগ্য উত্তর থাকে তবে তা উত্তর দেয় না।
অপ্টিমাইজার

1
সুতরাং আপনার কাছে গ্রহণযোগ্য উত্তরটি ভুল আছে ..
অপ্টিমাইজারটি

2
FryAmTheEggman আপনি নিজের সম্পাদনা করার 21 মিনিট আগে তার উত্তর পোস্ট করেছিলেন।
জো জেড

2
@ অপ্টিমাইজার আমি এটিকে সবচেয়ে অদ্ভুত উপায় বলে মনে করি না - ফ্রাইআম দ্য এজম্যানের উত্তরটি আপনার হওয়ার 21 মিনিটের আগে 19 বাইট ছিল। এটি এটিকে সর্বাধিক-পোস্ট সংক্ষিপ্ত উত্তর দেয়।
জো জে।

উত্তর:


10

সিজেম, 22 20 19 17 বাইট

]]l~{)f+_1fm>|}/p

কোড সম্প্রসারণ :

]]                   "Put [[]] onto stack. What we will do with this array of array is";
                     "that in each iteration below, we will first append the next";
                     "number to all present arrays, then copy all the arrays and";
                     "move the last element to first in the copy";
  l~                 "Read input number. Lets call it N";
    {         }/     "Run this code block N times ranging from 0 to N - 1";
     )f+             "Since the number on stack starts from 0, add 1 to it and append";
                     "it to all arrays in the array of array beginning with [[]]";
        _1fm>        "Copy the array of array and move last element from all arrays";
                     "to their beginning";
             |       "Take set union of the two arrays, thus joining them and eliminating";
                     "duplicates. Since we started with and empty array and started adding";
                     "numbers from 1 instead of 2, [1] would have appeared twice if we had";
                     "simply done a concat";
                p    "Print the array of arrays";

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

এটি কোডের একটি ডিবাগ সংস্করণ:

]]l~ed{)edf+ed_ed1fm>ed|ed}/edp

আসুন দেখুন কীভাবে এটি ইনপুটটির জন্য কাজ করে 3:

[[[]] 3]                                 "]]l~"            "Empty array of array and input";
[[[]] 1]                                 "{)"              "First iteration, increment 0";
[[[1]]]                                  "{)f+"            "Append it to all sub arrays";
[[[1]] [[1]]]                            "{)f+_"           "Copy the final array of array";
[[[1]] [[1]]]                            "{)f+_1fm>"       "shift last element of each";
                                                           "sub array to the beginning";
[[[1]]]                                  "{)f+_1fm>|}"     "Take set based union";
[[[1]] 2]                                "{)"              "2nd iteration. Repeat";
[[[1 2]]]                                "{)f+"
[[[1 2]] [[1 2]]]                        "{)f+_";
[[[1 2]] [[2 1]]]                        "{)f+_1fm>";
[[[1 2] [2 1]]]                          "{)f+_1fm>|}";
[[[1 2] [2 1]] 3]                        "{)";
[[[1 2 3] [2 1 3]]]                      "{)f+"
[[[1 2 3] [2 1 3]] [[1 2 3] [2 1 3]]]    "{)f+_";
[[[1 2 3] [2 1 3]] [[3 1 2] [3 2 1]]]    "{)f+_1fm>";
[[[1 2 3] [2 1 3] [3 1 2] [3 2 1]]]      "{)f+_1fm>|}";
[[[1 2 3] [2 1 3] [3 1 2] [3 2 1]]]      "{)f+_1fm>|}/";

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


6

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

f 1=[[1]]
f n=(\x->map(++[n])x++map(n:)x)$f$n-1

1
f n=[[n:x,x++[n]]|x<-f$n-1]>>=idতালিকান বোধগম্যে স্যুইচ করা কয়েক বাইট সংরক্ষণ করে : (কোড-গল্ফার কনক্যাট ফাংশন ব্যবহার করে >>=id)।
নিমি

1
@ নিমিমি কিন্তু এটির ভুল অর্ডারে
গর্বিত হাসেল্লার ২২:০৩

@ প্রফেসহেস্কিলার: ওহে প্রিয়, মনোযোগটি যথেষ্ট পরিমাণে পড়েনি। আমি এটিকে ঠিক করার চেষ্টা করেছি এবং @ আলেফাল্ফার সংস্করণ হিসাবে একই দৈর্ঘ্যের চারটি ভিন্ন ভিন্ন উপায় পেয়েছি, তাই আমি কোনও উন্নতি দিতে পারছি না। f n=[x++[n]|x<-f$n-1]++[n:x|x<-f$n-1], f n=map(++[n])(f$n-1)++[n:x|x<-f$n-1], f n=map(++[n])(f$n-1)++map(n:)(f$n-1),f n=(++[n])#n++(n:)#n;p#i=map p$f$i-1
nimi

5

পাইথন 2, 68

f=lambda n:[[1]]*(n<2)or[x*b+[n]+x*-b for b in[1,-1]for x in f(n-1)]

সংখ্যার তালিকার একটি তালিকা আউটপুট করে।

একটি পুনরাবৃত্তি সমাধান। জন্য n==1, আউটপুট [[1]]। অন্যথায়, nসমস্ত- (n-1)দক্ষতার শুরু বা শেষে যুক্ত করুন। প্রস্তুতি এডমিশনের চেয়ে পরে ক্রমশক্তিটিকে অভিধানিকৃত করে তোলে, সুতরাং আদেশগুলি সাজানো থাকে।

"বুলিয়ান" bএনকোডগুলি [n]শুরু বা শেষে রাখা উচিত কিনা । আসলে, আমরা তালিকা বাকি সরাতে xএক্সপ্রেশনে x*b+[n]+x*-b। ফেলে bযেমন -1বা 1অস্বীকার দ্বারা ব্যবহারের উল্টানো দেয়, যেহেতু দ্বারা গুন একটি তালিকা -1খালি তালিকা রয়েছে।


4

পাইথ, 19

usCm,+dH+HdGr2hQ]]1

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

এটি একটি সম্পূর্ণ প্রোগ্রাম যা স্টিডিন থেকে ইনপুট নেয়।

এটি এক্সনোরের সমাধানের অনুরূপ উপায়ে কাজ করে তবে মানগুলি কিছুটা সৃজনহীনভাবে উত্পন্ন করে, তাই তাদের অবশ্যই পুনঃক্রম করতে হবে। প্রতিটি স্তরে যা ঘটে তা হ'ল প্রতিটি পূর্বের মানগুলির তালিকার শেষে এবং শুরুতে নতুন মান যুক্ত হয় এবং এগুলি প্রতিটি 2-টিউপলে মোড়ানো থাকে যা তালিকায় একত্রে আবৃত থাকে। উদাহরণস্বরূপ, প্রথম পদক্ষেপ এটি করে:

[[1]]
[([1,2], [2,1])]

তারপরে, টিপলগুলির এই তালিকাটি জিপ করা হয় (এবং তারপরে বাইরেরতম তালিকাটি সরিয়ে ফেলার জন্য যোগফল)। তালিকায় কেবলমাত্র একটি মান রয়েছে বলে প্রথম ক্ষেত্রে এটি কেবল উপরের থেকে মোড়কযুক্ত মান দেয়।

2-> 3 দেখানোর পদক্ষেপগুলি:

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

2

গণিত, 57 54 49 বাইট

f@1={{1}};f@n_:=#@n/@f[n-1]&/@Append~Join~Prepend

উদাহরণ:

f[4]

{{1, 2, 3, 4}, {2, 1, 3, 4}, {3, 1, 2, 4}, {3, 2, 1, 4}, {4, 1, 2, 3} , {4, 2, 1, 3}, {4, 3, 1, 2}, {4, 3, 2, 1}


2

জে, 26 বাইট

   0|:<:((,,.,~)1+#)@[&0,.@1:

   (0|:<:((,,.,~)1+#)@[&0,.@1:) 3
1 2 3
2 1 3
3 1 2
3 2 1

FUZxxl ধন্যবাদ 1 বাইট উন্নতি ।


সাবস্টিটিউট ,.জন্য ,"1একটি অক্ষর জন্য।
FUZxxl

1

Pyth, 34 33 31 29

মূলত xnor এর পাইথন উত্তরের একটি অনুবাদ । আমি পাইথের সাথে এখনও দুর্দান্ত নই, সুতরাং উন্নতির পরামর্শ স্বাগত।

yপূর্ণসংখ্যার তালিকার একটি তালিকা ফেরত দিতে একটি ফাংশন সংজ্ঞায়িত করে ।

L?]]1<b2smm++*kdb*k_dy-b1,1_1

আপডেট: FryAmTheEggman ধন্যবাদ 2 বাইট সংরক্ষণ করা

ব্যাখ্যা:

L                                  define a function y with argument b that returns
 ?*]]1<b2                          [[1]] if b < 2 else
         s                         sum(
          m                        map(lambda d:
           m                       map(lambda k:
            ++*kdb*k_d             k*d + [b] + k*-d
                      y-b1         , y(b - 1))
                          ,1_1)    , (1, -1))

কিছু পাইথ স্টাফ: -b1হতে পারে tb, [1_1)হতে পারে ,1_1(তবে আপনি কেবল বন্ধকটি বন্ধ করতে পারেন কারণ আপনাকে কেবল ফাংশনটি তৈরি করার জন্য প্রয়োজনীয় বাইটগুলি গণনা করতে হবে, যদিও আপনি এটি বন্ধ না করে কল করতে পারবেন না), এবং আপনি bকোনও তালিকাতে মোড়ানোর দরকার নেই কারণ ইন্টিতে একটি তালিকা যুক্ত করার সময় পাইথটি স্বয়ংক্রিয়ভাবে তালিকায় রূপান্তরিত হয়।
FryAmTheEggman

আমি নিজেই দ্বিতীয় মানচিত্রটি সম্পাদন করে বেশ কয়েকটি বাইট সংরক্ষণ করার উপায় নিয়ে এসেছি [1,-1]। আমি হার্ডকোডের ছোট কিছুতে বাইটগুলি সংরক্ষণ করতে পারি, বিশেষত যখন আপনি যুক্তিটিকে সহজ করেন। আমি পেয়েছিL?]]1<b2sCm,+db+bdytb
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান আপনি সম্ভবত এটি নিজের উত্তর হিসাবে যুক্ত করতে চাইতে পারেন। এটা ঠিক দুর্দান্ত।
পূর্কাকুডারী

ঠিক আছে, আমি পোস্ট করার আগে সিজেএমকে পরাস্ত করার চেষ্টা করতে চেয়েছিলাম তবে আমার ধারণা জিপ ট্রিকটি পোস্ট করার যোগ্যতার পক্ষে যথেষ্ট আকর্ষণীয়।
পাইথের

1

খাঁটি বাশ, 103

আমি প্রত্যাশার চেয়ে দীর্ঘ:

a=1..1
for i in {2..9} {a..u};{
((++c<$1))||break
a={${a// /,}}
a=`eval echo $a$i $i$a`
}
echo ${a%%.*}

1

জাভাস্ক্রিপ্ট (ES6) 73 80

@ অপ্টিমাইজারের দুর্দান্ত সমাধানটির জাভাস্ক্রিপ্ট বাস্তবায়ন।

পুনরাবৃত্তি (73):

R=(n,i=1,r=[[1]])=>++i>n?r:r.map(e=>r.push([i,...e])+e.push(i))&&R(n,i,r)

আইট্রেটিভ (74):

F=n=>(i=>{for(r=[[1]];++i<=n;)r.map(e=>r.push([i,...e])+e.push(i))})(1)||r

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

R(4)

[[1, 2, 3, 4], [2, 1, 3, 4], [3, 1, 2, 4], [3, 2, 1, 4], [4, 1, 2, 3] , [4, 2, 1, 3], [4, 3, 1, 2], [4, 3, 2, 1]]


0

আমার জাভা সমাধান:

public static void main(String[] args) {
    listPrependAppend(4);
}

private static void listPrependAppend(int n) {
    int total = (int) Math.pow(2, n - 1);
    int ps;
    boolean append;
    String sequence;
    String pattern;

    for (int num = 0; num < total; num++) {
        sequence = "";
        pattern = "";
        append = false;
        ps = num;
        for (int pos = 1; pos < n + 1; pos++) {
            sequence = append ? (pos + sequence) : (sequence + pos);
            append = (ps & 0x01) == 0x01;
            ps = ps >> 1;
            if (pos < n) {
                pattern += append ? "L" : "R";
            }
        }
        System.out.format("%s\t[%s]%n", sequence, pattern);
    }
}

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

2
আপনার সমাধানটি শ্রদ্ধেয়, সংক্ষিপ্ত এবং নিজস্বভাবে উপস্থাপিত হওয়ার পরেও আপনি সঠিক যে এটি সমস্যাটির পক্ষে যথেষ্ট প্রার্থী নন।
জো জেড

1
@ ব্রিটআরয়ান আপনি অপ্রয়োজনীয় সাদা স্থান সরিয়ে এবং ওয়ান-চর ভেরিয়েবলের নাম ব্যবহার করে আপনার কোডটি আরও ছোট করতে পারেন। আপনি falseমত কিছু দ্বারা প্রতিস্থাপন করতে পারেন 5<4
প্রোগ্রামফক্স

1
ধন্যবাদ বন্ধুরা. কোড চ্যালেঞ্জগুলিতে অংশ নেওয়ার এটি আমার প্রথম প্রচেষ্টা ছিল। আমি কেবল কিছু প্রোগ্রামিং চ্যালেঞ্জ খুঁজছিলাম এবং বুঝতে পারি নি লক্ষ্যটি হ'ল সংক্ষিপ্ততম সমাধানটি পাওয়া। :) আমাকে অংশগ্রহণ করার জন্য ধন্যবাদ।
ব্রেট রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.