কতো বদলে গেছে


18

একটি রিফল শিফেল এক ধরণের শ্যাফেল যেখানে ডেকটি দুটি পার্টিশনে বিভক্ত হয় এবং পার্টিশনগুলি আবার একসাথে স্প্লাই করে নতুন শফলেড ডেক তৈরি করা হয়।

কার্ডগুলি একসাথে এমনভাবে বিভক্ত করা হয় যাতে পার্টিশনের মধ্যে কার্ডগুলি তাদের আপেক্ষিক ক্রম বজায় রাখে তারা এর সদস্য । উদাহরণস্বরূপ, যদি কার্ড ডেকে কার্ড বি এর আগে হয় এবং কার্ড এবং বি একই পার্টিশনে থাকে তবে কার্ড অবশ্যই চূড়ান্ত ফলাফলের কার্ড বি এর আগে হওয়া উচিত , এমনকি তাদের মধ্যে কার্ডের সংখ্যা বৃদ্ধি পেয়েছে কিনা। যদি এবং বি বিভিন্ন পার্টিশনে থাকে তবে তারা চূড়ান্ত ফলাফলের সাথে, কোনও প্রারম্ভিক অর্ডার নির্বিশেষে যে কোনও ক্রমে থাকতে পারে।

প্রতিটি রিফেল শ্যাফেলকে তখন কার্ডের মূল ডেকের অনুক্রম হিসাবে দেখা যেতে পারে। উদাহরণস্বরূপ আদেশ

1,2,3 -> 1,3,2

একটি রিফাল পরিবর্তন যদি আপনি ডেক বিভক্ত

1, 2 | 3

আমরা দেখতে পাচ্ছি যে প্রতিটি কার্ডের 1,3,2বিভাজনে প্রতিটি অন্যান্য কার্ডের জন্য একই আপেক্ষিক ক্রম রয়েছে। 2এখনও পরে 1

অন্যদিকে নিম্নলিখিত অনুক্রমটি একটি রাইফেল বদল নয়

1,2,3 -> 3,2,1

আমরা এটি দেখতে পারি কারণ দুটি (অ-তুচ্ছ) পার্টিশনের জন্য

1, 2 | 3
1 | 2, 3 

কার্ডের একটি জুড়ি রয়েছে যা তাদের আপেক্ষিক ক্রমগুলি বজায় রাখে না। প্রথম পার্টিশনে উপস্থিত 1এবং 2তাদের ক্রম পরিবর্তন করেন, দ্বিতীয় পার্টিশন যখন 2এবং 3তাদের ক্রম পরিবর্তন করুন।

তবে আমরা দেখতে পাই যে 3, 2, 1দুটি রাইফেল শ্যাফেল রচনা করে তৈরি করা যেতে পারে,

1, 3, 2 + 2, 3, 1 = 3, 2, 1

প্রকৃতপক্ষে প্রমাণ করার মতো একটি সহজ সরল সত্যটি হ'ল যে কোনও ক্রিয়াকলাপকে আমার কয়েকটি সংখ্যক রাইফেল শফল ক্রমশক্তি সংমিশ্রণ করা যায়।

কার্য

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

এটি তাই কম বাইট ভাল হওয়ার সাথে বাইটে উত্তরগুলি দেওয়া হবে।

আপনি পরিচয়ের অনুক্রমের জন্য 1 বা 0 টি আউটপুট দিতে পারেন।

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

1,3,2 -> 1
3,2,1 -> 2
3,1,2,4 -> 1
2,3,4,1 -> 1
4,3,2,1 -> 2

3
তাহলে, আমরা কি শিগগিরই রিফেলসোর্ট অ্যালগরিদমগুলি দেখতে পাব?
mbomb007

না করা উচিত 4,3,2,1হবে 2? প্রথমে আমরা মাঝখানে বিভক্ত হয়ে লাভ করি 3,1,4,2এবং তারপরে আমরা আবার মাঝখানে বিভক্ত হয়ে একই
অনুমান

পছন্দ করুন আমার রেফারেন্স বাস্তবায়ন সহ আমাকে সমস্যাটি খুঁজে পেতে হবে।
গম উইজার্ড

উত্তর:


2

পাইথন 3 , 255 বাইট

তালিকার দৈর্ঘ্য পর্যন্ত সমস্ত সম্ভাব্য রাইফেলগুলি পরীক্ষা করে (প্রয়োজনীয় সর্বাধিক সংখ্যা), তাই এটি বড় ইনপুটটির জন্য খুব ধীর। সম্ভবত বেশ কিছুটা গল্ফ করা যেতে পারে।

lambda x:f(range(1,len(x)+1),x)
f=lambda x,y,i=0:x==y and i or i<len(x)and min(f(q,y,i+1)for a in range(1,len(x))for q in g(x[:a],x[a:]))or i
g=lambda x,y:(x or y)and[[v]+q for v in x[:1]for q in g(x[1:],y)]+[[v]+q for v in y[:1]for q in g(x,y[1:])]or[[]]

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


2

পরিষ্কার , 206 ... 185 বাইট

import StdEnv
f=flatten
$a b#[c:d]=b
|a>[]#[u:v]=a
=[a++b,b++a:f[[[u,c:e],[c,u:e]]\\e<- $v d]]=[b]
@l#i=length l
=hd[n\\n<-[0..],e<-iter n(f o map(uncurry$o splitAt(i/2)))[[1..i]]|l==e]

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

পরিবর্তিত nসময়ের প্রতিটি সম্ভাব্য ফলাফল উত্পন্ন করে এবং তালিকাটি কোনও সদস্য কিনা তা পরীক্ষা করে।
যদিও সমস্যাটি সমাধানের এটি মারাত্মকভাবে অদক্ষ উপায়, তবুও এই কোডটি সংশ্লেষের পরিবর্তে তালিকা বোধগম্যতার কারণে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কোনওরকম প্রাথমিক স্তরের গ্রাফ হ্রাস সীমাবদ্ধ করে এবং ক্লিনের আবর্জনা সংগ্রহকারীকে দর্শনীয় প্রদর্শনীতে ফলাফল দেয়।

Ungolfed:

import StdEnv
shuffle [] l
    = [l]
shuffle [a: b] [c: d]
    = [[a: b]++[c: d], [c: d]++[a: b]: flatten [
        [[a, c: e], [c, a: e]]
        \\ e <- shuffle b d
        ]]
numReq l
    = until cond ((+)1) 0
where
    cond n 
        = let
            mapper
                = map (uncurry shuffle o splitAt (length l/2))
            options
                = iter n (removeDup o flatten o mapper) [[1..length l]]
        in isMember l options

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

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