একটি পার্মিটার নির্মাণ করুন


9

এই চ্যালেঞ্জের জন্য আপনি একটি ফাংশন তৈরি করতে যাচ্ছেন (আপনার ফাংশনটি একটি সম্পূর্ণ প্রোগ্রাম হতে পারে) যা ইনপুট হিসাবে একটি তালিকা নেয় এবং সেই তালিকার একটি অনুমান প্রদান করে। আপনার ফাংশন অবশ্যই নিম্নলিখিত প্রয়োজনীয়তা মান্য করতে হবে।

  • এটি অবশ্যই নির্দোষ হতে হবে।

  • আপনার ফাংশনটি নিজের সাথে একটি চলক সংখ্যক বার রচনা করা তার যে কোনও আদেশের তালিকা পাওয়ার জন্য সক্ষম হতে হবে।

এটি একটি কোড-গল্ফ প্রশ্ন তাই কম বাইট ভাল হওয়ার সাথে উত্তরগুলি বাইটে স্কোর করা হবে।

আরও বিধি

  • আপনি তালিকা কোন প্রকার, (সময় লাগতে পারে [Integer], [String], [[Integer]]এটা যত দীর্ঘ)

    • খালি খালি থাকতে পারে
    • কমপক্ষে 16 টি সম্ভাব্য মান সহ স্বতন্ত্র বস্তু থাকতে পারে। (আপনি একটি হাস্কেল ব্যবহার করতে পারবেন না [()]এবং দাবি করতে পারবেন না যে আপনার কাজটি রয়েছে id)
    • সদৃশ বস্তু থাকতে পারে (কোনও সেট নেই)
  • আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন, তবে অবশ্যই মানক IO মানতে হবে।


তবে S_nকেবল চক্রের জন্যn<3
লিকি নুন

@ ল্যাকিয়ুন, এটি কোনও একক ক্রমাঙ্কের জন্য জিজ্ঞাসা করছে না যা প্রতিসম গ্রুপ তৈরি করে: এটি একটি next_permutationফাংশন চাইছে ।
পিটার টেলর

এটি কি কেবলমাত্র 0 এবং 1 এর তালিকাগুলির অনুমতি দেওয়া যথেষ্ট?
xnor

আমি নিশ্চিত নয় যে আমি এই বিধিনিষেধের বিষয়টি বুঝতে পেরেছি। আপনি যদি বুলিয়ানগুলির তালিকাকে অনুমতি দেন তবে কোনও দুটি স্বতন্ত্র আইটেমের উপরে পুনরাবৃত্তি না করার মুল্য কী?
ডেনিস

@ ডেনিস আপনি একটি ভাল পয়েন্ট করেছেন। আমি বুলিয়ানগুলির তালিকা বাতিল করে দেব। অথবা এমন ধরণেরগুলির মধ্যে সম্ভবত 16 টিরও কম মান রয়েছে।
অ্যাডহক গার্ফ হান্টার

উত্তর:


4

সিজেএম (11 বাইট)

{_e!_@a#(=}

একটি ডুপ্লিকেট উপাদান সহ একটি চার-উপাদান তালিকার সম্পূর্ণ চক্র দেখাচ্ছে অনলাইন ডেমো

ব্যবচ্ছেদ

{      e# Define a block
  _e!  e#   Find all permutations of the input. Note that if there are duplicate
       e#   elements in the input then only distinct permutations are produced.
       e#   Note also that the permutations are always generated in lexicographic
       e#   order, so the order is independent of the input.
  _@a# e#   Find the index of the input in the list
  (=   e#   Decrement and get the corresponding element of the list
       e#   Incrementing would also have worked, but indexing by -1 feels less
       e#   wrong than indexing by the length, and makes this more portable to
       e#   GolfScript if it ever adds a "permutations" built-in
}

2

ম্যাথমেটিকা ​​+ কম্বিনেটরিকা (অন্তর্নির্মিত প্যাকেজ) 34 বাইট

প্যাকেজটি লোড করার জন্য 19 বাইট এবং ফাংশনের জন্য 15 টি।

<<"Combinatorica`";NextPermutation

ব্যবহার:

%@{c, b, a}

অন্তর্নির্মিত ছাড়া, 61 বাইট

Extract[s=Permutations[Sort@#],Mod[s~Position~#+1,Length@s]]&

কম্বিনেটরিকা পুরোপুরি ম্যাথমেটিকায় অন্তর্ভুক্ত হওয়ার কথা, তবে আমি মনে করি যে নেক্সটপার্মিউশন ফাংশনটি উপেক্ষা করা হয়েছিল।



2

সি ++, 42 বাইট

#include <algorithm>
std::next_permutation

এই সঠিক অপারেশনটি সি ++ এ অন্তর্নির্মিত।


2
কেন পরে জায়গা #include?
Yytsi

2

জাভাস্ক্রিপ্ট (ES6), 145 139 137 134 108 বাইট

একটি নিখুঁত 25 বাইট সংরক্ষণ করেছেন @ নীলকে ধন্যবাদ!

বর্ণানুক্রমিক অক্ষরের অ্যারে হিসাবে ইনপুট নেয়। পরের আদেশটি অন্য অ্যারে হিসাবে ফেরত দেয়।

a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,a.concat(a.splice(x+1).sort()))

কিভাবে?

এটি ডিক্সিকোগ্রাফিক অর্ডে একটি প্রজন্ম যা প্রতিটি পুনরাবৃত্তির 4 টি ধাপে প্রক্রিয়া করে:

  1. বৃহত্তম সূচক এক্স যেমন একটি [এক্স] <a [এক্স + 1] পান

    a.map((v, i) => v < a[i + 1] ? (t = v, x = i) : ...)
  2. X এর চেয়ে বৃহত্তর বৃহত্তম সূচক Y সন্ধান করুন যা একটি [ওয়াই]> এ [এক্স]

    a.map((v, i) => v < a[i + 1] ? ... : y = i > x & v > t ? i : y)
  3. একটি [এক্স] এর মান একটি [ওয়াই] এর সাথে অদলবদল করুন

    a[x] = a[y], a[y] = t
  4. চূড়ান্তভাবে একটি [X + 1] থেকে চূড়ান্ত উপাদানটি অন্তর্ভুক্ত করে চূড়ান্ত শিকড়কে সাজান

    a.concat(a.splice(x + 1).sort())

উদাহরণ:

ধাপ

ডেমো


আপনি বিপরীত বদলে বাছাই করতে পারবেন না? এছাড়াও আমি মনে করি v<a[i+1]&&(t=v,x=i)একটি বাইট সংরক্ষণ করে এবং আপনি সম্ভবত spliceদুটি sliceএস ব্যবহার করে আরও বেশি সঞ্চয় করতে পারবেন ।
নীল

@ নীল ভাল ধরা!
আর্নৌল্ড

আমি মনে করি map112 বাইটের জন্য আমি দু'টিও একীভূত করতে সক্ষম হয়েছি :a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,t=a.splice(++x).sort(),a.concat(t))
নীল

আমাকে স্বীকার করতে হবে আমি ভাবিনি a.concat(a.splice(++x).sort())যে কাজ করবে বলে অন্যথায় আমি চেষ্টা করে দেখতাম ...
নীল

@ নীল ধন্যবাদ! আপডেট করা হয়েছে। (4 সঙ্গে আরো কারণ আমরা সত্যিই প্রয়োজন হবে না সংরক্ষণ করা বাইট টি থেকে CONCAT () )।
আর্নৌল্ড

1

জেলি , 6 বাইট

Œ¿’œ?Ṣ

অবতরণ শব্দকোষ ক্রমে ক্রমবিন্যাসের মধ্য দিয়ে চক্র।

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

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

Œ¿’œ?Ṣ  Main link. Argument: A (array)

Œ¿      Compute the permutation index n of A, i.e., the index of A in the
        lexicographically sorted list of permutations of A.
  ’     Decrement the index by 1, yielding n-1.
     Ṣ  Sort A.
   œ?   Getthe (n-1)-th permutation of sorted A.

1

সি, 161 বাইট

আসল ও (এন) অ্যালগরিদম।

#define S(x,y){t=x;x=y;y=t;}
P(a,n,i,j,t)int*a;{for(i=n;--i&&a[i-1]>a[i];);for(j=n;i&&a[--j]<=a[i-1];);if(i)S(a[i-1],a[j])for(j=0;j++<n-i>>1;)S(a[i+j-1],a[n-j])}

ব্যবহারের উদাহরণ:

int main(int argc, char** argv) {
    int i;
    int a[] = {1, 2, 3, 4};

    for (i = 0; i < 25; ++i) {
        printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
        P(a, 4);
    }

    return 0;
}

1

পাইথন 2 , 154 বাইট

x=input()
try:exec'%s=max(k for k in range(%s,len(x))if x[%s-1]<x[k]);'*2%tuple('i1kjii');x[i-1],x[j]=x[j],x[i-1];x[i:]=x[:i-1:-1]
except:x.sort()
print x

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


আমি মনে করি এটি একটি ফাংশন হিসাবে সংক্ষিপ্ত যা তালিকায় স্থানটিতে অনুমতি দেয়।
orlp

আমি চেষ্টা করেছিলাম, তবে execকোনও ফাংশনে আমাকে সব ধরণের ত্রুটি দিয়েছিল
ডেনিস

0

জেলি , 10 বাইট

ṢŒ!Q©i⁸‘ị®

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

বাছাই করুন> সমস্ত অনুগমন> ইনপুট সন্ধান করুন> 1> সূচকে "সমস্ত অনুগতিতে যুক্ত করুন"


@ পিটারটেলর আমি এটি ঠিক করেছি।
লিকি নুন

অনুমোদনের জন্য নির্দিষ্ট বিল্টিন রয়েছে (যেমন আপনি কেবল এটি করতে পারেন Œ¿‘œ?Ṣ)। আমি চুরির মতো মনে করি না, ভাল, একই রকম।
এরিক দি আউটগল্ফার

@ এরিক অটগল্ফার এটি ডুপ্লিকেট ধারণ করে এমন ইনপুটগুলির জন্য কিছুটা অগোছালো হতে পারে।
ফাঁস নুন

হুম ... আমার ধারণা, আমার কাছে একটি সংস্করণ ছিল যা এর আগে কাজ করেছিল তবে আপনি Qআপত্তিজনক ব্যবহার করেন বলে মনে হয় । আপনি এখনও গল্ফ করতে পারেন ṢŒ!Qµi³‘ị
এরিক আউটগল্ফার


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