বিপরীত সারণি


19

উদ্দেশ্য

সন্নিবেশ বাছাইয়ের জন্য এটি সারণি করার জন্য যে আন্দোলন করবে সেগুলি থেকে আসল স্ক্যাম্বলড তালিকা তৈরি করুন । মূল তালিকা থেকে সব সংখ্যার থাকবে 0করার N-1(সহ) যেখানে Nইনপুট মাপ।

ইনপুট

তালিকাটি বাছাই করার জন্য প্রয়োজনীয় পদক্ষেপগুলি সমন্বিত একটি তালিকা। প্রতিটি মান তার ডান অবস্থানে থাকা আসল (স্ক্যাম্বলড) নম্বর দ্বারা স্থানচ্যুত স্লটের পরিমাণ উপস্থাপন করে, মনে রাখবেন যে এই প্রক্রিয়াটি বাম থেকে ডানে রয়েছে। ইনপুট তালিকার
অবস্থানে (0-indexed) পজিশনের মান এবং সমেত iহবে lusive আপনার অবৈধ ইনপুটগুলি হ্যান্ডেল করার দরকার নেই, কোনও আচরণ এই ক্ষেত্রে গ্রহণযোগ্য (ক্র্যাশ, অসীম লুপ ইত্যাদি)।0i

আউটপুট

স্ক্যাম্বলড লিস্ট

পদক্ষেপে পদক্ষেপ পদক্ষেপ উত্পন্ন

Scrambled List | Moves to sort
[4,0,2,1,3,5]  | [0, , , , , ] #4 stay in place
[4,0,2,1,3,5]  | [0,1, , , , ] #0 is moved 1 slot to the left
[0,4,2,1,3,5]  | [0,1,1, , , ] #2 is moved 1 slot
[0,2,4,1,3,5]  | [0,1,1,2, , ] #1 is moved 2 slot
[0,1,2,4,3,5]  | [0,1,1,2,1, ] #3 is moved 1 slot
[0,1,2,3,4,5]  | [0,1,1,2,1,0] #5 is in the right place already
[0,1,2,3,4,5]

সুতরাং, ইনপুট জন্য [0,1,1,2,1,0]আপনার প্রোগ্রাম আউটপুট করা প্রয়োজন [4,0,2,1,3,5]
মনে রাখবেন যে চলাচলগুলি (চূড়ান্ত) বাছাই তালিকার অবস্থানে নয়, বাছাই করা বিভাগে (সাহসী বিভাগ)

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

[0,0,0] -> [0,1,2]
[0,1,0,1] -> [1,0,3,2]
[0,0,0,0,0,5] -> [1,2,3,4,5,0]
[0,1,2,3] -> [3,2,1,0]
[0,1,1,1] -> [3,0,1,2]
[0,1,1,2,1,0] -> [4,0,2,1,3,5]

জয়লাভ

এটি , তাই সংক্ষিপ্ত উত্তরটি জেতে।

code-golf  array-manipulation  code-golf  code-golf  animation  code-golf  restricted-source  code-golf  java  code-golf  decision-problem  graph-theory  code-golf  conversion  electrical-engineering  code-golf  ascii-art  code-golf  string  substitution  code-golf  math  code-golf  string  set-theory  code-golf  code-golf  compile-time  code-golf  kolmogorov-complexity  binary  code-golf  sequence  cops-and-robbers  code-golf  subsequence  card-games  code-golf  sequence  primes  code-golf  code-golf  number  graphical-output  music  code-golf  ascii-art  code-golf  string  lambda-calculus  code-golf  string  code-generation  code-golf  unicode  code-golf  math  combinatorics  code-golf  balanced-string  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-challenge  fastest-code  chess  code-golf  math  graphical-output  code-golf  string  hello-world  animation  code-golf  number  arithmetic  code-golf  integer  code-golf  code-golf  combinatorics  code-golf  kolmogorov-complexity  graphical-output  code-golf  string  code-golf  code-golf  game  code-golf  math  combinatorics  code-golf  ascii-art  popularity-contest  random  code-golf  arithmetic  number-theory  integer  code-golf  tips  underload  code-golf  math  sequence  primes  code-golf  math  path-finding  code-golf  ascii-art  primes  code-golf  kolmogorov-complexity  alphabet 

1
প্রোগ্রামটি কি ইনপুট হিসাবে তালিকার দৈর্ঘ্য নিতে পারে?
mbomb007

@ mbomb007 নাহ
রড

পরিবর্তে আমরা (এন -1) পদক্ষেপগুলি ব্যবহার করতে পারি? প্রথমটি অপ্রয়োজনীয়, যেহেতু এটি সর্বদা শূন্য।
জিবি

@ জিবি নিশ্চিত, যতক্ষণ না আউটপুট সঠিক হয়, আপনি যে কোনও অ্যালগরিদম ব্যবহার করতে পারেন
রড

উত্তর:


14

জেলি , 12 বাইট

L!_UÆ¡$œ?J’U

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

ব্যাখ্যা

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

L!_UÆ¡$œ?J’U
   U           Reverse {the input}
    Æ¡         and convert from base factorial to integer;
  _   $        subtract that from
L!             the factorial of the length of {the input};
       œ?      then take the nth permutation of
         J     [1,2,...,l], where l is the length of {the input},
          ’    subtract 1 from every elevent,
           U   and reverse it

বেস ফ্যাক্টরিয়াল এর ক্ষেত্রে, আমরা পর্যবেক্ষণ করতে পারি যে তালিকার প্রথম উপাদানটি 0 হতে হবে, দ্বিতীয়টি 0 বা 1 হতে পারে, তৃতীয়টি 0/1/2 ইত্যাদি হতে হবে। সুতরাং, বেস রূপান্তরকরণের জন্য এটির উপাদানগুলিকে সাধারণ লেখার ক্রমে আনতে আমাদের ইনপুটটি বিপরীত করতে হবে।

অতিরিক্তভাবে, সুনির্দিষ্ট রূপান্তর সম্পর্কিত আনুষাঙ্গিক আদেশের জন্য এবং সন্নিবেশ সাজানোর যে ক্রিয়াকলাপটি ব্যবহার করে তার সাথে মিলে যাওয়ার জন্য ক্রমের পরিবর্তনের জন্য, আমাদের দুটি সমন্বয় করা দরকার: ক্রমের ক্রমকে বিপরীত করা এবং আউটপুট তালিকার ক্রমটিকে বিপরীত করা। আউটপুট তালিকার বিপরীত করা যথেষ্ট সহজ, Uপ্রোগ্রামের শেষে কেবলমাত্র একটি দরকার । আদেশের ক্রমটিকে বিপরীত করতে, আমরা ইনপুট দৈর্ঘ্যের ফ্যাক্টরিয়াল থেকে বিয়োগ করি (এটি কাজ করে কারণ বেস ফ্যাক্টরিয়ালটি 0 থেকে (দৈর্ঘ্যের! -1) পরিসরে একটি সংখ্যা তৈরি করে, যেখানে ক্রমান্বয়ে 1 থেকে দৈর্ঘ্য পর্যন্ত জেলি সংখ্যাযুক্ত! , এমন একটি অন্তর্নিহিত অফ-বাই-ওয়ান উত্পাদন করা যা অফার-বাই-ওয়ান বাতিল করে দেয় যা আপনি সাধারণত কোনও ফ্যাক্টরিয়াল থেকে অনুমান সূচকটি বিয়োগ করার সময় পাবেন off

জেলি , 9 বাইট, @ জোনাথান অ্যালান এর সহযোগিতায়

UÆ¡Nœ?J’U

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

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


4
O_O কি জাদু হয় এই?
DLosc

ওহ দুর্দান্ত - আমি জানতাম যে আমার Æ¡এবং œ?অণুগুলি এর জন্য কাজ করবে (আমি ইতিমধ্যে এই চ্যালেঞ্জের জন্য এগুলি ব্যবহারের চেষ্টা শুরু করেছিলাম - আমি খুব কাছাকাছি ছিলাম, L!সেখানে কেবল প্রয়োজন ছিল )।
জনাথন অ্যালান

দুর্দান্ত কোড!
গ্রেগ মার্টিন

1
আসলে, আপনি এটি 9 টি বাইটে করতে পারেন UÆ¡Nœ?L’Uকারণ আমি œ?হালকাভাবে কাজ করতে (এবং অনুরূপ) প্রয়োগ করেছি (যেন তারা জেলি তালিকাগুলি ব্যবহার করছে)। Nনেতিবাচক মান মাত্র ইনডেক্স। নোট: আমি পরিবর্তন Jকরতে L- এই মাত্র কারণ একটি নম্বর দেওয়া এটা একটি সীমার অধীনে-ফণা যাহাই হউক না কেন) তোলে।
জোনাথন অ্যালান

6

গণিত, 92 বাইট

Permute[Range[l=Length@#]-1,(c=Cycles@{#}&)@{}©##&@@c[i-0~Range~#[[i]]]~Table~{i,l,1,-1}]&

খাঁটি ফাংশন ইনপুট হিসাবে ননেনিজেটিভ পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং নননেজিটিভ পূর্ণসংখ্যার একটি তালিকা ফেরত দেয়। উপরের ©কোডটিতে একটি রয়েছে , যা ভুল: এটি 3-বাইট প্রতীক ইউ + এফ 3 ইডি জন্য একটি স্থানধারক, যা ম্যাথামেটিকায় একটি বিন্দুর সাথে একটি বৃত্ত দ্বারা প্রতিনিধিত্ব করে, এবং যা ক্রম নির্ধারণের প্রতিনিধিত্ব করে।

c=Cycles@{#}&এমন একটি ফাংশন সংজ্ঞায়িত করে যা Cyclesএকটি পূর্ণরূপ প্রতিনিধিত্ব করে এমন একটি বস্তুতে পূর্ণসংখ্যার তালিকাকে রূপান্তর করে; উদাহরণস্বরূপ, c[{3,4}]একটি তালিকার 3 এবং 4 উপাদানগুলি অদলবদল অদলবদল হয়। c[i-0~Range~#[[i]]]~Table~{i,l,1,-1}]ইনপুট তালিকাটি নেয় এবং সন্নিবেশ সাজানোর পূর্বাবস্থায় ফেরাতে প্রয়োজনীয় ক্রম তৈরি করে। তারপরে c@{}©##&@@সনাক্তকরণের অনুমতি দিয়ে শুরু করে এই সমস্ত অনুমতি এক সাথে রচনা করে c@{}। পরিশেষে, Permute[Range[l=Length@#]-1,...]যথাযথ দৈর্ঘ্যের 0-সূচিযুক্ত তালিকায় এই অনুমতিটি প্রয়োগ করে।


1
কি অন্তর্নির্মিত না ?! অবশ্যই ...
জোনাথন অ্যালান

3
@{#}&)@{}©##&@@ভীতিজনক দেখাচ্ছে।
Yytsi

6

পাইথন 2, 79 68 বাইট

10 বাইট সংরক্ষণের জন্য ক্রেজারকে ধন্যবাদ

1 বাইট সংরক্ষণের জন্য টুকুকএক্সকে ধন্যবাদ

a=input();b=range(len(a));print[b.pop(j-a[j])for j in b[::-1]][::-1]

বিপরীতে চালগুলি তৈরি করে কাজ করে


2
যে 66 করুন ! কেমন হয়: a=input();b=range(len(a));print[b.pop(j-a[j]) for j in b[::-1]][::-1]। তালিকা বোঝার জন্য এফটিডব্লু!
এফএমাজ

1
@ ক্র্যাজোর আপনার কাছে এমন একটি জায়গা রয়েছে যা আগে সরিয়ে নেওয়া যেতে পারে for, সুতরাং 65 টি অনুমান করুন: ডি
ইয়াইત્সি

@ ক্রাজর তালিকাটি বুঝতে পেরেছেন যে বেশিরভাগ কাজ হয়নি, তবে আমি খ [:: - 1] ব্যবহার করার ধারণাটি পছন্দ করেছি!
গণিত জাঙ্কি

কোনভাবেই না? আমি মোবাইলের সাথে মন্তব্য করেছি, আমি কিছু ভুল করে লিখেছি। কোন অংশটি কাজ করে না? আমার জন্য, এটি সঠিকভাবে ব্যাখ্যা করা এবং সমস্ত পরীক্ষার কেস পূরণ করে।
এফএমাজ

@ ক্রাজর ওহ ওফফফ, না আপনি ঠিক বলেছেন না। আমিই সেই ব্যক্তি যিনি পরীক্ষার সময় এটি ভুল টাইপ করেছিলেন।
গণিত জাঙ্কি

5

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

a=>a.reverse(b=[...a.keys()]).map(o=>+b.splice(~o,1)).reverse()

বিরক্তিকরভাবে ইনপুট এবং আউটপুট উভয়ই ভুল ক্রমে। সম্পাদনা করুন: @ আরনল্ডকে ধন্যবাদ 4 টি বাইট সংরক্ষণ করা হয়েছে 2 বাইট সংরক্ষিত হয়েছে @ ইথ প্রডাকশনগুলির জন্য ধন্যবাদ।


আমি এখনও আরও ভাল উপায় খুঁজতে চেষ্টা করছিলাম তবে আপনি অনেক দ্রুত ছিলেন faster সুন্দর!
আর্নৌল্ড

1
তোমার দরকার নেই i, তাই না?
আর্নৌল্ড

@ আরনাউল্ড স্পষ্টতই তা নয়। আমি পাইথন উত্তরটি বোঝার চেষ্টা করে শুরু করেছি এবং আমি কেবল লক্ষ্য করেছি যে এটি আসলে ব্যবহার করে না i...
নিল

1

3

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

ETH প্রডাকশনগুলির জন্য 2 বাইট সংরক্ষণ করা হয়েছে

m=>(a=m.map((_,i)=>j=i)).map(_=>a.splice(j,0,+a.splice(j-m[j--],1)))&&a

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


দৈর্ঘ্য এবং একই সাথে ব্যাপ্তি পাওয়ার দুর্দান্ত উপায়। আমি পরামর্শ দিচ্ছিলাম a=m.map(_=>j++,j=0), তবে এটি একই দৈর্ঘ্য এবং আমি নিশ্চিত যে আপনি এটি ইতিমধ্যে ব্যবহার করে দেখেছেন।
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশনগুলি আপনি ঠিক বলেছেন: আমি এটিও চেষ্টা করেছি। :-) (উল্লেখ্য যে, এই সমতুল্য নয় মূল্য হতে পারে: এই সেট হবে jথেকে a.lengthবদলে a.length-1এবং করতে হবে a.splice(--j,0,a.splice(j-m[j],1)[0]))
Arnauld

হেই, আমি সে সম্পর্কেও ভেবেছিলাম, তবে আমি এটি উল্লেখ করার মতো বলে মনে করিনি কারণ এটি একই দৈর্ঘ্য
ইটিএইচ প্রডাকশনগুলি

1
ইজি -2:+a.splice(j-m[j--],1)
ইটিএইচ প্রোডাকশনগুলি

2

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

f x|n<-length x-1=reverse x#[n,n-1..0]
(n:r)#l=r#(take n l++drop(n+1)l)++[l!!n]
x#l=x

এটি অনলাইন চেষ্টা করুন! ব্যবহারের উদাহরণ: f [0,1,1,2,1,0]ফলন [4,0,2,1,3,5]

f xবিপরীত #তালিকা xএবং একটি তালিকা সহ ফাংশন কল [length x - 1, length x - 2, ... , 0](n:r)#lসঞ্চালিত বিপরীত সন্নিবেশ সাজানোর যাও recursively গ্রহণ করে nআউট তম উপাদান l, যেখানে l!!nউৎপাদনের nতম উপাদান এবং take n l++drop(n+1)lউৎপাদনের তালিকা lসঙ্গে nমুছে তম উপাদান।


হাস্কেল, এত সুন্দর।
এফএমাজ

1

পার্ল, 61 বাইট

@o=@p=0..@ARGV-1;splice@o,$_,0,splice@o,$_-pop,1for reverse@p

আউটপুট অ্যারে @o এ শেষ হয়। কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট অ্যারে সহ উদাহরণ:

perl -le'@o=@p=0..@ARGV-1;splice@o,$_,0,splice@o,$_-pop,1for reverse@p;print@o' 0 1 1 2 1 0
402135

1

রুবি, 49 বাইট

->l{(w=l.size).times{l.insert(l.shift+w-=1,w)};l}

বৃহত্তম সংখ্যার সাথে শুরু করে তালিকার অভ্যন্তরে "বিপরীত সন্নিবেশ" সম্পাদন করে।

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