একটি অ্যারের একক অদলবদল


19

স্ট্যাক ওভারফ্লোতে একটি প্রশ্ন থেকে নেওয়া থেকে অনুপ্রাণিত

চ্যালেঞ্জ

একটি পূর্ণসংখ্যা দেওয়া হয় n>1, অ্যারেতে ঠিক দু'টি এন্ট্রি অদলবদলের মাধ্যমে প্রাপ্ত সমস্ত অ্যারে আউটপুট [1, 2, ..., n]

অ্যারেগুলি কোনও ক্রমে উত্পাদন করা যেতে পারে।

আপনি ধারাবাহিকভাবে [0, 1, ..., n-1](1-ভিত্তিক) পরিবর্তে (0-ভিত্তিক) ব্যবহার করতে পারেন [1, 2, ..., n]

অতিরিক্ত বিধি

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

ইনপুট 2আউটপুট দেয় (অনুমান করা 1-ভিত্তিক)

2 1

ইনপুট 3আউটপুট দেয় (নোট করুন যে তিনটি অ্যারে কোনও ক্রমে থাকতে পারে)

1 3 2
2 1 3
3 2 1

ইনপুট 4আউটপুট দেয়

1 2 4 3
1 3 2 4
1 4 3 2
2 1 3 4
3 2 1 4
4 2 3 1

ইনপুট 7আউটপুট দেয়

1 2 3 4 5 7 6
1 2 3 4 6 5 7
1 2 3 4 7 6 5
1 2 3 5 4 6 7
1 2 3 6 5 4 7
1 2 3 7 5 6 4
1 2 4 3 5 6 7
1 2 5 4 3 6 7
1 2 6 4 5 3 7
1 2 7 4 5 6 3
1 3 2 4 5 6 7
1 4 3 2 5 6 7
1 5 3 4 2 6 7
1 6 3 4 5 2 7
1 7 3 4 5 6 2
2 1 3 4 5 6 7
3 2 1 4 5 6 7
4 2 3 1 5 6 7
5 2 3 4 1 6 7
6 2 3 4 5 1 7
7 2 3 4 5 6 1


5
আমি [0 ... n-1]বনাম এর নমনীয়তা প্রশংসা [1 ... n]! 1+জে শূন্য-সূচকগুলির কারণে আমাকে যখন সামলাতে হয় তখন আমি সর্বদা কিছুটা বিরক্ত বোধ করি ।
কোল

উত্তর:


3

জেলি , 11 8 বাইট

ŒcżU$y€R

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

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

ŒcżU$y€R  Main link. Argument: n

Œc        Take all 2-combinations of [1, ..., n].
  żU$     Zip the result with the reversed pairs.
       R  Range; yield [1, ..., n].
     y€   For each [[i, j], [j, i]] in the result to the left, yield the result to
          the right, with i replaced by j and vice versa. 

ঠিক yকি করে? এটি আমার কাছে সর্বদা রহস্যের বিষয় ছিল।
কেয়ার্ড কোইনারিংহিংহিং

এটি প্রতিস্থাপন সম্পাদন করে। উদাহরণস্বরূপ, [1, 2, 3] এ[1,2],[4,3]y1,2,3 প্রতিটি 1 এর সাথে 4 এবং প্রতি 2 টি 3 দিয়ে প্রতিস্থাপন করে ।
ডেনিস

8

আর , 54 বাইট

function(n)combn(n,2,function(x){z=1:n
z[x]=rev(x)
z})

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

একটি ম্যাট্রিক্স প্রদান করে যেখানে প্রতিটি কলামই এক ক্রমান্বন হয়।

combn(n,k)আকারের সব সমন্বয় উত্পন্ন kতালিকা থেকে n, বা থেকে 1:nযদি nএকটি একক পূর্ণসংখ্যা। FUNফলস্বরূপ সংমিশ্রণগুলিতে প্রয়োগ করতে এটি optionচ্ছিকভাবে কোনও ফাংশনও গ্রহণ করে । সুতরাং আমরা একটি ফাংশন লিখি যা অদলবদল সম্পাদন করে এবং অদলবদল তালিকাটি ফেরত দেয়। ফলাফলগুলি তখন সমস্তগুলিতে একটিতে জমা হয় array, যা এই ক্ষেত্রে দ্বিমাত্রিক এবং তাই একটি ম্যাট্রিক্স।





5

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 43 বাইট

r/.{#->#2,#2->#}&@@@Subsets[r=Range@#,{2}]&

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

ব্যাখ্যা: আকার 2 Subsets[Range@#,{2}]এর সমস্ত সাবসেট তৈরি করে {1,2,...,n}, তারপরে প্রতিটি উপসেটের জন্য, /.তালিকার সেই দুটি জিনিসকে অদলবদল করে {1,2,...,n}

এই পদ্ধতির হতাশাজনকভাবে অন্যান্য জমাগুলির অনেকের মতোই, তবে এখানে ম্যাথামেটিকার কাছে 3 টি অতিরিক্ত বাইটের জন্য আরও অনন্য:

r~Permute~Cycles@{#}&/@Subsets[r=Range@#,{2}]&

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


2
আরও একটি মূর্খ গণিত সমাধান হতে হবে ReplaceList[Range@#,{a___,b_,c___,d_,e___}:>{a,d,c,b,e}]&। আমি এটি কতটা সহজ (বা এটি সরাসরি কীভাবে সমস্যাটি এনকোড করে) পছন্দ করি তবে দুর্ভাগ্যক্রমে প্যাটার্নের সাথে মেলে সিনট্যাক্সটি এত ভার্বোজের যে এটি 57 বাইটের সমাপ্ত হয়।
মার্টিন ইন্ডার

5

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

g n|b<-[1..n]=[[last$k:[j|k==i]++[i|k==j]|k<-b]|i<-b,j<-b,j<i]

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

i<-b                -- loop 'i' through [1..n]
     j<-b           -- loop 'j' through [1..n]
          j<i       -- consider only cases where j<i 
 [            k<-b] -- make a list by looping 'k' through [1..n] 
  last              -- pick
          [i|k==j]  -- 'i' if k==j
       [j|k==i]     -- 'j' if k==i
     k              -- 'k' else   

4

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

f 0=[]
f x=map(++[x])(f$x-1)++[[1..y-1]++x:[y+1..x-1]++[y]|y<-[1..x-1]]

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


এটি সর্বশেষের সমস্ত অনুক্রমের শেষের সাথে বর্তমান নম্বর যুক্ত করে এবং তারপরে নতুন নম্বর অন্তর্ভুক্ত সমস্ত অদলবদল গণনা করে।


4

এমএটিএল , 12 বাইট

:2XN!"G:@tP(

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

            %implicit input, say, 4
:           %range, stack is {[1,2,3,4]}
2           %push 2
XN          %nchoosek, compute all combinations of [1,2,3,4] taken 2 at a time
            %this results in a matrix where each row is a combination, i.e.,
            %[1, 2;
              1, 3;
              1, 4;
              2, 3;
              2, 4;
              3, 4]
!           %transpose, because "for" iterates over columns
"           %begin for loop
G:          %push input and range, stack is now [1,2,3,4]
@t          %push "for" index (the column), say, [1;2], twice
P           %flip array, so stack is now: {[1,2,3,4],[1;2],[2;1]}
(           %assignment index, sets [1,2,3,4]([1;2])=[2;1],
            %resulting in [2,1,3,4]
            %implicit end of loop, implicit end of program, print the stack implicitly.


1
আমি পরীক্ষার কেস তৈরি করতে যে কোডটি ব্যবহার করি তার চেয়ে 2 বাইট কম, এবং আরও কার্যকর :-)
লুইস মেন্ডো

@ লুইস মেন্ডো আপনি কীভাবে পরীক্ষার কেস তৈরি করেছেন? আমি উদ্বিগ্ন ছিলাম আমার দীর্ঘায়িত হওয়ায় আদেশটি একই ছিল না!
জিউসেপ

1
আমি ব্যবহৃত :tY@wy=~!s2=Y)। Rahnema1 এর অক্টোব উত্তর হিসাবে একই পদ্ধতির, আমি মনে করি
লুইস মেন্ডো



2

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

0-সূচিযুক্ত অ্যারে মুদ্রণ করে।

n=>(a=[...Array(n).keys()]).map(i=>a.map(j=>i>j&&alert(a.map(k=>k-i?k-j?k:i:j))))

ডেমো

alert()console.log()ব্যবহারকারী-বন্ধুত্বের জন্য এই স্নিপেটের সাথে প্রতিস্থাপিত হয় ।






2

রুবি , 55 53 বাইট

->n{n.times{|x|x.times{|y|(w=*0...n)[w[x]=y]=x;p w}}}

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

0 ভিত্তিক সমাধান

এখানে কৌশলটি হ'ল অভ্যন্তরীণ লুপটি সর্বদা একটি পুনরাবৃত্তিটিকে "এড়িয়ে যায়": প্রথমবার এটি চালানো হয় না, তবে কেবল দ্বিতীয় পাসে একবার।

আমি 55 বাইটের সাথে খুশি ছিলাম যতক্ষণ না আমি দেখলাম যে আর -55 তে নামানো যেতে পারে, তাই আমাকে এটি 53 এ নিয়ে যেতে হয়েছিল।


নমনীয় আউটপুট সীমাবদ্ধতার খুব চালাক ব্যবহার।
ইউনিহীড্রন


1

পাইথ, 9 বাইট

t{.rLQ*=U

প্রদর্শন

দুটি মান পরিবর্তন করার সহজ উপায় .rহ'ল পাইথের রোটারি ট্রান্সলেশন ফাংশন। এবং এর .r<list>[A, B]সমস্ত উপস্থিতি অদলবদল করবেABlist

অতএব, অনুবাদ ফাংশন প্রয়োগের দ্বারা UQথেকে, তালিকা 0থেকে n-1তালিকায় বিভিন্ন নম্বর প্রতিটি দুই উপাদান তালিকা সঙ্গে, আমরা পছন্দসই আউটপুট উত্পন্ন করবে। Qইনপুট, nএবং Uএটি পরিসীমা ফাংশন।

এটি করার সহজ উপায় হ'ল:

.rLUQ.cUQ2

.cUQ2পরিসরে স্বতন্ত্র উপাদানের সমস্ত 2 টি উপাদান সংমিশ্রণ উত্পন্ন করে এবং তাদের এবং তালিকার উপরে ফাংশনটি .rLUQমানচিত্র করে ।.rUQ

তবে, এটি 10 ​​বাইট হবে।

পরিবর্তে .cUQ2স্বতন্ত্র অর্ডারযুক্ত জোড়গুলি তৈরির পরিবর্তে আমরা সমস্ত জোড়া তৈরি করতে পারি *=U। এটি স্পষ্টতই সমতুল্য *=UQQ। এটা তোলে মুছে যাওয়ার দ্বারা শুরু হয় Qসঙ্গে UQ, তারপর এর কার্টিজিয়ান পণ্য গ্রহণ UQএবং UQ। এটি পরিসরে সমস্ত জোড়া সংখ্যা দেয়, প্রয়োজনীয়ভাবে অর্ডার করা বা আলাদা নয়।

.rLQপ্রতিটি তালিকা ব্যবহার করে অদলবদল। পুনরাহ্বান যে Qএখন থেকে লিস্টে সমান 0করতে n-1, না n

কারণ জোড়গুলি অর্ডার করা হয়নি, এখানে নকল রয়েছে। {সদৃশ অপসারণ। জোড়াগুলি পৃথক না থাকায় অপরিবর্তিত তালিকা উপস্থিত রয়েছে। এই তালিকাটি সদৃশ হওয়ার পরে সর্বদা প্রথম হবে, কারণ {প্রথম উপস্থিতির ক্রম সংরক্ষণ করে এবং অপরিবর্তিত তালিকাটি ঘোরান দ্বারা উত্পাদিত হয় [0,0]tঅ্যাল্পের পছন্দসই তালিকা প্রদান করে প্রথম উপাদানটি সরিয়ে দেয়।


1

পাইথ, 11 বাইট

fq2snVTUQ.p

অনলাইনে এটি চেষ্টা করুন
ইসাকের পদ্ধতির মতো সংক্ষিপ্ত নয়, তবে পোস্ট করার মতো আলাদা।

ব্যাখ্যা

fq2snVTUQ.p
         .pQ  Take the permutations of the (implicit) range [0,...,input].
f     T       Filter to get the permutations...
   snV UQ     ... where the number of differences with [0,...,input]...
 q2           ... is 2.

1

জাভা 8, 109 105 বাইট

n->{String r="";for(int i=0,j,k;i++<n;)for(j=i;j++<n;r+="\n")for(k=0;k++<n;)r+=k!=i?k!=j?k:i:j;return r;}

আমি মরিচা হয়ে পড়েছি .. কয়েক মাসের মধ্যে কোড-গল্ফ হয় নি .. @ স্টেডিবক্সের সি উত্তর পোর্টিং শেষ হয়েছে .. সম্ভবত আরও কিছু গল্ফ করা যেতে পারে।

এখানে চেষ্টা করুন।



1

রুবি , 80 বাইট

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

->n{(r=1..n).map{|x|r.map{|y|r.map{|i|i==x ?y:i==y ?x:i}}}.flatten(1).uniq[1,n]}

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

আমার মনে একটি দৃষ্টিভঙ্গি ছিল যে কোনও কারণে রুবিকে সবচেয়ে ভাল অনুবাদ করা হয়েছিল ... তাই আমি রুবিকে সত্যিই চিনি না ...


আমি এটি ছাড়িয়ে গিয়েছি: কোডগল্ফ.স্ট্যাকেক্সেঞ্জাওটা / a / 152652 / 21830 । দুঃখিত!
ইউনিহীড্রন

দুঃখ প্রকাশ করার দরকার নাই! আমি মনে করি আমি বেশিরভাগ পিপিসিজি ব্যবহারকারীদের পক্ষে কথা বলি যখন আমি বলি যে প্রতিযোগিতাটি পিপিসিজিকে শীতল করে তোলে।
সম্পূর্ণরূপে

1
আপনার কোড হিসাবে, ১। আপনি 1..nএকটি চার-পরিবর্তনশীলকে বরাদ্দ করতে পারেন এবং এটি পুনরায় ব্যবহার করতে পারেন (নিউলাইন বা সেমিকোলনগুলির সাথে পৃথক বিবৃতি), ২. টার্মারি স্টেটমেন্টে বন্ধনী ছাড়াই করুন: i==x ?y:i==y ?x:i(নোট যেখানে আমার সম্ভাব্য শেবাং পৃথক করার জন্য স্পেস রয়েছে তা নোট করুন ) এবং 3. uniq[1,n]পরিবর্তে uniq[1..-1]
ইউনিহীড্রন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.