বুদ্বুদ সাজানোর কাজ চলছে


19

একটি ফাংশন বা প্রোগ্রাম তৈরি করুন যা দুটি ইনপুট নেয়:

  • পূর্ণসংখ্যার একটি তালিকা যা বাছাই করা হবে (২০ টিরও কম উপাদান)
  • Nআপনার কতটি তুলনা করা উচিত তা বলার জন্য একটি ধনাত্মক পূর্ণসংখ্যা

ফাংশনটি থামবে এবং Nতুলনার পরে ফলাফলগুলির পূর্ণসংখ্যার তালিকা আউটপুট করবে । Nতুলনা করার আগে যদি তালিকাটি সম্পূর্ণরূপে বাছাই করা হয়, তবে বাছাই করা তালিকা আউটপুট করা উচিত।


বুদ্বুদ সাজানোর আলগোরিদিম ভাল পরিচিত, এবং আমি মনে করি অধিকাংশ মানুষ জানি। নিম্নলিখিত সিউডো কোড এবং অ্যানিমেশন (লিঙ্কযুক্ত উইকিপিডিয়া-নিবন্ধ দুটি থেকে) প্রয়োজনীয় বিশদ সরবরাহ করতে হবে:

procedure bubbleSort( A : list of sortable items )
   n = length(A)
   repeat 
     swapped = false
     for i = 1 to n-1 inclusive do
       /* if this pair is out of order */
       if A[i-1] > A[i] then    
         /* swap them and remember something changed */
         swap( A[i-1], A[i] )
         swapped = true
       end if
     end for
   until not swapped
end procedure

নীচের অ্যানিমেশনটি অগ্রগতি দেখায়:

এখানে চিত্র বর্ণনা লিখুন

উদাহরণ (লিঙ্কযুক্ত উইকিপিডিয়া নিবন্ধ থেকে সরাসরি নেওয়া) তালিকাটি বাছাই করার সময় পদক্ষেপগুলি দেখায় ( 5 1 4 2 8 ):

প্রথম পাস

1: ( 5 1 4 2 8 ) ->  ( 1 5 4 2 8 ) // Here, algorithm compares the first two elements, 
                                   // and swaps since 5 > 1.
2: ( 1 5 4 2 8 ) ->  ( 1 4 5 2 8 ) // Swap since 5 > 4
3: ( 1 4 5 2 8 ) ->  ( 1 4 2 5 8 ) // Swap since 5 > 2
4: ( 1 4 2 5 8 ) ->  ( 1 4 2 5 8 ) // Now, since these elements are already in order 
                                   // (8 > 5), algorithm does not swap them.

দ্বিতীয় পাস

5: ( 1 4 2 5 8 ) ->  ( 1 4 2 5 8 )
6: ( 1 4 2 5 8 ) ->  ( 1 2 4 5 8 ) // Swap since 4 > 2
7: ( 1 2 4 5 8 ) ->  ( 1 2 4 5 8 )
8: ( 1 2 4 5 8 ) ->  ( 1 2 4 5 8 )

এখন, অ্যারে ইতিমধ্যে বাছাই করা হয়েছে, তবে এটি সম্পন্ন হয়েছে কিনা তা অ্যালগরিদম জানে না। সাজানো হয়েছে তা জানতে অ্যালগরিদমের কোনও সোয়াপ ছাড়াই একটি পুরো পাস দরকার।

তৃতীয় পাস

9: ( 1 2 4 5 8 ) ->  ( 1 2 4 5 8 )
10:( 1 2 4 5 8 ) ->  ( 1 2 4 5 8 )
11:( 1 2 4 5 8 ) ->  ( 1 2 4 5 8 )
12:( 1 2 4 5 8 ) ->  ( 1 2 4 5 8 )

পরীক্ষার কেস:

বিন্যাস: Number of comparisons (N): List after N comparisons

Input list:
5  1  4  2  8
Test cases: 
1: 1  5  4  2  8
2: 1  4  5  2  8
3: 1  4  2  5  8
4: 1  4  2  5  8
5: 1  4  2  5  8
6: 1  2  4  5  8
10: 1  2  4  5  8
14: 1  2  4  5  8

Input list:
0: 15  18  -6  18   9  -7  -1   7  19  19  -5  20  19   5  15  -5   3  18  14  19
Test cases:
1: 15  18  -6  18   9  -7  -1   7  19  19  -5  20  19   5  15  -5   3  18  14  19
21: -6  15  18   9  -7  -1   7  18  19  -5  19  19   5  15  -5   3  18  14  19  20
41: -6   9  -7  15  -1   7  18  18  -5  19  19   5  15  -5   3  18  14  19  19  20
60: -6  -7  -1   9   7  15  18  -5  18  19   5  15  -5   3  18  14  19  19  19  20
61: -6  -7  -1   7   9  15  18  -5  18  19   5  15  -5   3  18  14  19  19  19  20
81: -7  -6  -1   7   9  15  -5  18  18   5  15  -5   3  18  14  19  19  19  19  20
119: -7  -6  -1  -5   7   9  15   5  15  -5   3  18  14  18  18  19  19  19  19  20
120: -7  -6  -1  -5   7   9  15   5  15  -5   3  18  14  18  18  19  19  19  19  20
121: -7  -6  -1  -5   7   9   5  15  15  -5   3  18  14  18  18  19  19  19  19  20
122: -7  -6  -1  -5   7   9   5  15  15  -5   3  18  14  18  18  19  19  19  19  20
123: -7  -6  -1  -5   7   9   5  15  -5  15   3  18  14  18  18  19  19  19  19  20
201: -7  -6  -5  -1  -5   3   5   7   9  14  15  15  18  18  18  19  19  19  19  20
221: -7  -6  -5  -5  -1   3   5   7   9  14  15  15  18  18  18  19  19  19  19  20

  • হ্যাঁ, অন্তর্নির্মিত বুদ্বুদ সাজানোর অ্যালগরিদমের অনুমতি রয়েছে।
  • না, আপনি কেবল ধনাত্মক পূর্ণসংখ্যা বা অনন্য পূর্ণসংখ্যা ধরে নিতে পারবেন না।
  • বাছাই অবশ্যই উপরের বর্ণিত ক্রমে থাকতে হবে। আপনি তালিকার শেষে শুরু করতে পারবেন না

2
পরিষ্কার এবং পুরোপুরি যুক্তিযুক্ত। আমি
মিররওয়ালা

তালিকাটি কি খালি থাকবে না?
মাইল 21

এছাড়াও, তালিকার আকারটি 2 এর চেয়ে বড় বা সমান হবে? আমি লক্ষ্য করেছি নীচে কিছু উত্তর দৈর্ঘ্য 1 বা খালি তালিকার তালিকার জন্য কাজ করে না।
মাইলস

উত্তর:


2

জেলি , 25 বাইট

ḣ©ṫ-Ṣ®ṖṖ¤;;ṫḊ¥
JḊṁ¹³W¤;ç/

আমার উত্তর উপর ভিত্তি করে জে।

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

তুলনার সংখ্যা যাচাই করুন।

ব্যাখ্যা

সহায়ক লিঙ্কটি সূচি [i-1, i]অনুসারে তালিকাটিকে বাছাই করে পরিবর্তিত করে যা বুদ্বুদ সাজানোর তুলনা হিসাবে একই ফলাফল দেয় produces

ḣ©ṫ-Ṣ®ṖṖ¤;;ṫḊ¥  Helper link - Input: list A, index i
ḣ               Take the first i values
 ©              Save a copy of it
  ṫ-            Take the last two values
    Ṣ           Sort them
         ;      Append them to
     ®            Get the copy
      ṖṖ¤         Pop the last two values (Ṗ is pop)
          ;     Prepend it to
           ṫ      Take the last i values
            Ḋ¥    Dequeue - remove the head

JḊṁ¹³W¤;ç/  Input: list A and # of comparisons n
J           Enumerate the indices of A
 Ḋ          Dequeue - remove the head
  ṁ         Reshape it cyclically to length n
   ¹        Identity function (Just to avoid parsing rules)
       ;    Append it to
    ³         The list A
     W¤       Wrap it as an array
        ç/  Reduce from left to right using the helper link and return

9

জাভাস্ক্রিপ্ট (ES6), 102 82 80 86 80 বাইট

বাগ ফিক্স এবং 1 বাইট সংরক্ষিত @ এডক 65 এর জন্য ধন্যবাদ

(a,m)=>eval("for(i=0;m;a[j=i-1]>(b=a[i])?a[a[i]=a[j],j]=b:0)1/a[++i]?m--:i=0;a")

Recursion নাও হতে পারে হয় স্পষ্টভাবে না সম্ভবত শ্রেষ্ঠ পন্থা, কিন্তু আমি এখন জন্য একটি লুপ সঙ্গে স্টিকিং করছি।

চেষ্টা কর:


আমি গলফ আপনার রিকার্সিভ সংস্করণ পরিচালিত 82 নিচে খুব বাইট: f=(a,m,n=0,_,b=a[n+1])=>b+.5?m?f(a,m-1,n+1,a[n]>b?a[a[n+1]=a[n],n]=b:0):a:f(a,m,0)
নীল

@ নীল বাহ, এটি চিত্তাকর্ষক! আপনি যদি চান তা পোস্ট করতে পারেন।
ইটিএইচ প্রডাকশনগুলি

@ নীল আপনি ৮০ তেও আপনার পুনরাবৃত্ত সংস্করণটি করতে পারেন, কেবল শেষটি সরিয়ে ফেলুন,0
জোনাথন অ্যালান

ব্যবহার করে দেখুন 1/bপরিবর্তে b+.5জন্য চেক করতেundefined
edc65

ভাল, 1 / বি এর জন্য আমার পরামর্শটি এখনও ধরে আছে
edc65

7

হাস্কেল, 83 82 81 বাইট

y%x@(a:b:c)=(y++x):(y++[min a b])%(max a b:c)
y%x=[]%(y++x)
[x]!_=[x] 
x!n=[]%x!!n

ব্যবহারের উদাহরণ: [5,1,4,2,8] ! 5-> [1,4,2,5,8]

কার্যক্রমে % yবর্তমান পাসের সময় এতদূর পরিদর্শন করা উপাদানগুলির উপর নজর রাখে, xএখনও পরীক্ষা করা হয়নি। aএবং bপরের দুটি, অর্থাত্ প্রার্থী অদলবদল। আমরা যদি তালিকার শেষে পৌঁছানোর, আমরা প্রথম থেকেই শুরু হয়: y%x = []%(y++x)। সমস্ত পদক্ষেপগুলি একটি তালিকায় সংরক্ষিত হয় যেখানে মূল ফাংশনটি nতম উপাদানটিকে বেছে নিয়েছে।

সম্পাদনা করুন: পূর্ববর্তী সংস্করণগুলি একক উপাদান তালিকার জন্য কাজ করে না, ভাগ্যক্রমে নতুন সংস্করণটি আরও ছোট হয়।


এটি কি অনলাইনে পরীক্ষা করা সম্ভব? আমি হাস্কেল সম্পর্কে কিছুই জানি না এবং এটিকে সরাসরি অনলাইন আইডিতে পেস্ট করার চেষ্টা করার সময় ত্রুটিগুলি পাই। আমার ধারণা আমি কিছু বেসিক জিনিস মিস করছি ...?
স্টিভি গ্রিফিন

যোগ f=উত্তর দ্বিতীয় লাইন আগে, তারপর ধারণকারী প্রোগ্রাম একটি তৃতীয় পংক্তির শেষে main=print(f [5,1,4,2,8] 5)। এটি চলমানযোগ্য করা উচিত।
লিন

@ ওয়েইজআইফ ফার্স্ট: সম্পূর্ণ প্রোগ্রাম
নিমি

4

পাইথন 3, 77 74 বাইট

-৩ বাইটস @ মাল্টেসেনকে ধন্যবাদ জানায় (প্রারম্ভিক ভাষায় j)

lambda l,n,j=0:exec('j*=j<len(l)-1;l[j:j+2]=sorted(l[j:j+2]);j+=1;'*n)or l

আদর্শের ক্ষেত্রে পরীক্ষা করা cases

sortedপ্রতিটি তুলনা এবং অদলবদল অপারেশন করতে ব্যবহার করে তবে এটি একটি বুদ্বুদ বাছাই করছে।

সেটগুলি j=0(বাম সূচক), তারপরে nসংযুক্ত তালিকার আইটেমগুলির তুলনা এবং অদলবদল করে, যখনই এই উইন্ডোটি সীমা ছাড়িয়ে যায় তখন পুনরায় সেট jকরে 0

j*=j<len(l)-1বহুগুণ বৃদ্ধি করে দিবেন jদ্বারা False(অর্থাত 0যে সময়ে), প্রত্যেক অন্যান্য সময় যেহেতু তা বহুগুণে বৃদ্ধি করবেন jদ্বারা True(যেমন 1)।

(এটি এখনও একটি খালি তালিকার জন্য কাজ করবে))


1
আমি মনে করি আপনি
লম্বদা

1
এছাড়াও, আপনার পুনরায় সেট করার দরকার নেই j, আপনি ব্যবহার করতে পারেন%
মাল্টেসেন

@ মাল্টেসেন আসলে আমি মডুলো গাণিতিক ব্যবহার করতে পারি না এবং বাইটগুলি সংরক্ষণ করতে পারি না, যেহেতু আমাদের দৈর্ঘ্য 1 এর একটি তালিকা পরিচালনা করতে হবে, যখন আমাদের শূন্য ত্রুটি দ্বারা বিভাজন পেতে পারে, যাতে আমাকে বাইটে ঠেলে দেয় এমন হ্যান্ডলিক যুক্তি যুক্ত করে।
জোনাথন অ্যালান

1
সমস্ত পরীক্ষার ক্ষেত্রে ভাল কাজ করে এবং আমার ম্যাটল্যাব উত্তরের চেয়ে কিছুটা কম। +1 =) দুর্ভাগ্যক্রমে, evalইনলাইন অ্যাসাইনমেন্টের কারণে আমি ম্যাটল্যাবের সাথে একই কৌশলটি ব্যবহার করতে পারি না ।
স্টিভি গ্রিফিন

1
নতুন পরীক্ষার কেসগুলি অন্তর্ভুক্ত করার জন্য আপডেট হয়েছে
জোনাথন অ্যালান

3

পাওয়ারশেল ভি 2 +, 135 129 বাইট

param($a,$n)for($s=1;$s){($s=0)..($a.count-2)|%{if($a[$_]-gt$a[$_+1]){$a[$_],$a[$_+1]=$a[$_+1],$a[$_];$s=1}if(!--$n){$a;exit}}}$a

So. অনেক। ডলার।

( এই চ্যালেঞ্জটি প্রতিটি পাসে শেষ উপাদান (গুলি) বাদ দেওয়ার "বাছাই" অপ্টিমাইজেশন অন্তর্ভুক্ত করে না তা বুঝতে পেরে সংরক্ষণ করা ছয়টি বাইট সংরক্ষণ করা হয়েছে, এবং প্রতিবার পুরো পাসের মধ্য দিয়ে চলেছে runs এটি সরানো $a.countহয়েছে forলুপ এবং $zভেরিয়েবল নির্মূল । )

সোজা আপ বুদ্বুদ সাজান, এক নিফটি স্পট সহ, এক ধাপে অদলবদল -
$a[$_],$a[$_+1]=$a[$_+1],$a[$_]

বহির্গমন যুক্তি মাধ্যমে পরিচালিত হয় if(!--$n){$a;exit}

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

(অ্যারে এখানে শূণ্যস্থান দ্বারা বিভাজিত, কারণ ডিফল্ট দেখানো হয় আউটপুট ফিল্ড পৃথককারী একটি অ্যারের stringifying জন্য একটি স্থান। Stringification ঘটবে কারণ আমরা লেবেল সহ concatenating করছি "$_ -> "।)

PS C:\Tools\Scripts\golfing> 1,2,3,4,5,6,10,14|%{"$_ -> "+(.\bubble-sorting-in-progress.ps1 @(5,1,4,2,8) $_)}
1 -> 1 5 4 2 8
2 -> 1 4 5 2 8
3 -> 1 4 2 5 8
4 -> 1 4 2 5 8
5 -> 1 4 2 5 8
6 -> 1 2 4 5 8
10 -> 1 2 4 5 8
14 -> 1 2 4 5 8

PS C:\Tools\Scripts\golfing> 1,21,41,60,61,81,119,120,121,122,123,201,221|%{"$_ -> "+(.\bubble-sorting-in-progress.ps1 @(15,18,-6,18,9,-7,-1,7,19,19,-5,20,19,5,15,-5,3,18,14,19) $_)}
1 -> 15 18 -6 18 9 -7 -1 7 19 19 -5 20 19 5 15 -5 3 18 14 19
21 -> -6 15 18 9 -7 -1 7 18 19 -5 19 19 5 15 -5 3 18 14 19 20
41 -> -6 9 -7 15 -1 7 18 18 -5 19 19 5 15 -5 3 18 14 19 19 20
60 -> -6 -7 -1 9 7 15 18 -5 18 19 5 15 -5 3 18 14 19 19 19 20
61 -> -6 -7 -1 7 9 15 18 -5 18 19 5 15 -5 3 18 14 19 19 19 20
81 -> -7 -6 -1 7 9 15 -5 18 18 5 15 -5 3 18 14 19 19 19 19 20
119 -> -7 -6 -1 -5 7 9 15 5 15 -5 3 18 14 18 18 19 19 19 19 20
120 -> -7 -6 -1 -5 7 9 15 5 15 -5 3 18 14 18 18 19 19 19 19 20
121 -> -7 -6 -1 -5 7 9 5 15 15 -5 3 18 14 18 18 19 19 19 19 20
122 -> -7 -6 -1 -5 7 9 5 15 15 -5 3 18 14 18 18 19 19 19 19 20
123 -> -7 -6 -1 -5 7 9 5 15 -5 15 3 18 14 18 18 19 19 19 19 20
201 -> -7 -6 -5 -1 -5 3 5 7 9 14 15 15 18 18 18 19 19 19 19 20
221 -> -7 -6 -5 -5 -1 3 5 7 9 14 15 15 18 18 18 19 19 19 19 20

3

আর, 132 131 112 136 বাইট

প্রোগ্রামটি নিম্নলিখিতভাবে ইনপুট গ্রহণ করে: প্রথমে N, তারপরে নিজেই ভেক্টর। উদাহরণস্বরূপ, আপনি যদি চান v = [5 1 4 2 8]এবং n = 1, ইনপুটটি যেটি scanহয় 1 5 1 4 2 8। সুতরাং এই প্রোগ্রামটি চালানোর জন্য , আপনি প্রথম লাইনটি চালান , কনসোলে একের পর এক নম্বরটি ফিড করুন এবং তারপরে বাকীটি চালান (এটি একটি আরপিএল উত্তর)।

তারপরে নিম্নলিখিত কোডটি কৌশলটি করে:

v=scan()
s=m=0
while(!s){s=T;for(i in 3:length(v)){m=m+1
if(m>v[1]){s=T;break}
if(v[i-1]>v[i]){v[c(i-1,i)]=v[c(i,i-1)];s=F}}}
cat(v[-1])

টেস্ট:

Input: a vector with N first and the elements to be sorted next
1 5 1 4 2 8
5 5 1 4 2 8
14 5 1 4 2 8
60 15 18 -6 18  9 -7 -1  7 19 19 -5 20 19  5 15 -5  3 18 14 19

Output: 
1 5 4 2 8
1 4 2 5 8
1 2 4 5 8
-6 -7 -1  9  7 15 18 -5 18 19  5 15 -5  3 18 14 19 19 19 20

আপডেট করুন: 1 বাইট বকেয়া golfed Vlo


2
এটির জন্য ভেরিয়েবল হিসাবে ইনপুটগুলিকে হার্ডকোডিং করা প্রয়োজন এবং স্পষ্টভাবে একটি REPL প্রক্রিয়ার মাধ্যমে আউটপুট প্রদর্শন করা দরকার যা আমাদের / I পদ্ধতিগুলির গ্রহণযোগ্য তালিকা অনুসারে গ্রহণযোগ্য নয়
মেগো

@ মেগো ঠিক আছে, আমি এটি ঠিক করেছি। দয়া করে দেখুন এখন এটি সম্পূর্ণরূপে অনুগত কিনা ...
Andreï Kostyrka

দেখে মনে হচ্ছে আপনি প্রথম এস = টি মুছে ফেলতে পারেন; এবং এখনও সঠিক আউটপুট আছে; এটি আপনার 4 বাইট সংরক্ষণ করে সম্পাদনা: প্রকৃতপক্ষে, আপনি সময় () লুপটি পুরোপুরি সরিয়ে ফেলতে পারেন এবং কেবলমাত্র () লুপটি ব্যবহার করতে পারেন, আপনার এস = টিকে বিরতি দিয়ে প্রতিস্থাপন করুন, যা আমাদের কিছু কোঁকড়া ধনুর্বন্ধনী থেকে মুক্তি পেতে সহায়তা করে। এই ফলন হয়েছে: v = স্ক্যান (); এস = এম = 0; এর জন্য (আমি ইন 3: দৈর্ঘ্য (v)) {এম = এম + 1; যদি (এম> ভি [1]) বিরতি; যদি (ভি [i-- 1]> ভি [i]); ভি [সি (আই -১, আই)] = ভি [সি (আই, আই -১)]; ব্রেক}}; ভি [-1] মোট ১১7 বাইটের জন্য।
rturnbull

@ আর্টারনবুল আপনার সংস্করণটি আরও ভাল! আপনাকে কুডোস
Andreï Kostyrka

@rturnbull এই প্রাথমিক মন্তব্যগুলি কোথায় গেল? 19 বাইট দূরে গল্ফ করার আপনার পরামর্শ ... এটি কেবলমাত্র সেই অতিরিক্ত লুপটি সরিয়ে ফেলল যা অপরিহার্য ছিল কারণ বুদ্বুদ সাজানোর পারফরম্যান্স হ'ল (N²), যেখানে অতিরিক্ত লুপ ব্যতীত এটি দীর্ঘ হয়ে যায় (এন -1) দীর্ঘ। আমার চেক করা উচিত ছিল ... এখন এটি স্থির এবং ইনপুটটিতে কীভাবে খাওয়ানো হবে তার একটি ব্যাখ্যা রয়েছে! এটা কি আগের চেয়ে ভাল?
Andreï Kostyrka


2

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

f=(a,m,n=0,_,b=a[n+1])=>1/b?m?f(a,m-1,n+1,a[n]>b?a[a[n+1]=a[n],n]=b:0):a:f(a,m)

@ ইটিএইচ প্রডাকশনের মূল উত্তরের ভিত্তিতে। সম্পাদনা: 2 জন বাইট সংরক্ষণ করেছেন @ জোনাথন অ্যালানকে ধন্যবাদ। @ এডসি 65 এর জন্য 1 বাইট সংরক্ষণ করা হয়েছে।


2

জে , 62 60 বাইট

>@([:({.,(2/:~@{.}.),]}.~2+[)&.>/]|.@;<:@#@]<@|i.@[)^:(]1<#)

এটি একটি ক্রিয়া যা দুটি যুক্তি গ্রহণ করে: এলএইচএসে তুলনা সংখ্যা এবং আরএইচএসে পূর্ণসংখ্যার তালিকা। প্রথমে এটি পরীক্ষা করে যদি তালিকার দৈর্ঘ্য একের বেশি হয় কিনা। যদি তা না হয় তবে এটি তালিকাটি অবিস্মরণিত করে দেয়, অন্যথায় ফলাফলটি ফেরানোর আগে এটি নির্দিষ্ট সংখ্যার তুলনা করে কাজ করে performing

ব্যবহার

প্রথম পরীক্ষার ক্ষেত্রে, অতিরিক্ত কমান্ডগুলি একাধিক ইনপুট / আউটপুট ফর্ম্যাট করতে ব্যবহৃত হয়। দ্বিতীয় পরীক্ষার ক্ষেত্রে একক ইনপুট / আউটপুট হিসাবে প্রদর্শিত হয়।

   f =: >@([:({.,(2/:~@{.}.),]}.~2+[)&.>/]|.@;<:@#@]<@|i.@[)^:(]1<#)
   1 2 3 4 5 6 10 14 ([;f)"0 1 ] 5 1 4 2 8
┌──┬─────────┐
│1 │1 5 4 2 8│
├──┼─────────┤
│2 │1 4 5 2 8│
├──┼─────────┤
│3 │1 4 2 5 8│
├──┼─────────┤
│4 │1 4 2 5 8│
├──┼─────────┤
│5 │1 4 2 5 8│
├──┼─────────┤
│6 │1 2 4 5 8│
├──┼─────────┤
│10│1 2 4 5 8│
├──┼─────────┤
│14│1 2 4 5 8│
└──┴─────────┘
   1 f 15 18 _6 18 9 _7 _1 7 19 19 _5 20 19 5 15 _5 3 18 14 19
15 18 _6 18 9 _7 _1 7 19 19 _5 20 19 5 15 _5 3 18 14 19
   123 f 15 18 _6 18 9 _7 _1 7 19 19 _5 20 19 5 15 _5 3 18 14 19
_7 _6 _1 _5 7 9 5 15 _5 15 3 18 14 18 18 19 19 19 19 20
   221 f 15 18 _6 18 9 _7 _1 7 19 19 _5 20 19 5 15 _5 3 18 14 19
_7 _6 _5 _5 _1 3 5 7 9 14 15 15 18 18 18 19 19 19 19 20

ব্যাখ্যা

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

   i. # 5 1 4 2 8
0 1 2 3 4
   2 <\ i. # 5 1 4 2 8
┌───┬───┬───┬───┐
│0 1│1 2│2 3│3 4│
└───┴───┴───┴───┘
   2 <@{.\ i. # 5 1 4 2 8
┌─┬─┬─┬─┐
│0│1│2│3│
└─┴─┴─┴─┘

এগুলি প্রতিটি তুলনার শুরু সূচক। যদি 7 টি তুলনা করা হচ্ছে, পছন্দসই পরিমাণ পেতে এটি পুনরায় আকার দিন। জে ডান থেকে বামে পার্স করে, তাই এটি ডান থেকে বামে হ্রাস করে ডানদিকে ভাঁজ করে। প্রাথমিক তালিকা যুক্ত করুন এবং এটি বিপরীত করুন।

   7 $ 2 <@{.\ i. # 5 1 4 2 8
┌─┬─┬─┬─┬─┬─┬─┐
│0│1│2│3│0│1│2│
└─┴─┴─┴─┴─┴─┴─┘
   |. 5 1 4 2 8 ; 7 $ 2 <@{.\ i. # 5 1 4 2 8
┌─┬─┬─┬─┬─┬─┬─┬─────────┐
│2│1│0│3│2│1│0│5 1 4 2 8│
└─┴─┴─┴─┴─┴─┴─┴─────────┘

বিকল্পভাবে, [0, 7) পরিসীমা তৈরি করা যেতে পারে এবং প্রতিটি মান একই পরিসীমা তৈরি করতে তালিকার বিয়োগ 1 দৈর্ঘ্যের মডুলোর নেওয়া হয়।

   (<: # 5 1 4 2 8) <@| i. 7
┌─┬─┬─┬─┬─┬─┬─┐
│0│1│2│3│0│1│2│
└─┴─┴─┴─┴─┴─┴─┘

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

   > ({.,(2/:~@{.}.),]}.~2+[)&.>/ |. 5 1 4 2 8 ; 7 $ 2 <@{.\ i. # 5 1 4 2 8
1 2 4 5 8

চিত্তাকর্ষক, খুব চিত্তাকর্ষক +1।
ম্যাজিক অক্টোপাস উরন

1

মতলব, 93 91 বাইট

function l=f(l,m)
n=numel(l)-1;i=0;while n&m;i=mod(i,n)+1;m=m-1;l(i:i+1)=sort(l(i:i+1));end

বাদ দিয়ে 11 বাইট সংরক্ষণ করুন if l(i)>l(i+1);l(i:i+1)=l([i+1,i])এবং পরিবর্তে প্রতিবার দুটি উপাদানকে সাজান sort দৈর্ঘ্যের তালিকাগুলির জন্য কাজ করে 1. অষ্টাভের ব্যবহার করে একটি বা দুটি বাট সংরক্ষণ করতে পারেm-- অপারেটর তবে এটি বেশি নয়।

সেট করে আরও দুটি বাইট সাশ্রয় করে n=numel(l)-1;, কারণ তখন আমি কেবল while nপরিবর্তে while n>1এবং i=mod(i,n)+1পরিবর্তে করতে পারি i=mod(i,n-1)+1


রেকর্ডটির জন্য, এই উত্তরটি চ্যালেঞ্জ তৈরি হওয়ার অনেক ঘন্টা পরে লেখা হয়েছিল।


1

গ্রোভি (101 বাইট)

{l,n->(l.size()..0).each{i->(0..i-2).each{if(l[it]>l[it+1] && n>0 && it>-1){l.swap(it,it+1)};n--}};l}

সম্পাদনা: আমার নিজের অদলবদল বন্ধ করার দরকার নেই, গ্রোভির এটি তৈরি হয়েছিল।
এখানে চেষ্টা করে দেখুন: https://groovyconsole.appspot.com/script/5104724189642752

আউটপুট ট্রেস উদাহরণ:

4:[1, 5, 4, 2, 8]
3:[1, 4, 5, 2, 8]
2:[1, 4, 2, 5, 8]
1:[1, 4, 2, 5, 8]
0:[1, 4, 2, 5, 8] - Locks in the final answer.
-1:[1, 4, 2, 5, 8]
-2 (Return):[1, 4, 2, 5, 8]

পুরাতন বাস্তবায়ন (122 বাইট)

m={l,n->s={x,y->t=l[x];l[x]=l[y];l[y]=t};((l.size()-2)..2).each{i->(0..i).each{if(l[it]>l[it+1] && n){s(it,it+1)};n--}};l}

এটি এখানে চেষ্টা করুন: https://groovyconsole.appspot.com/script/6316871066320896



আমার মোবাইলে ... এটিকে যুক্ত করুন> = 0 সেকেন্ডে যদি বিবৃতিটি সমস্যার সমাধান করে।
ম্যাজিক অক্টোপাস উরন

এটি নেতিবাচক ইনপুট সহ তালিকাগুলিতে ব্যর্থ বলে মনে হচ্ছে। উদাহরণস্বরূপ দ্বিতীয় পরীক্ষার কেস।
স্টিভি গ্রিফিন

এখন কাজ করে, আমি গতরাতে মোবাইলে ছিলাম তাই প্রয়োজনীয় সম্পাদনাগুলি করতে পারলাম না।
ম্যাজিক অক্টোপাস n

1

পিএইচপি, 148 145 বাইট

<?php for($i=2,$a=$argv;$a[1]--;$i=$i==count($a)-2?2:$i+1)if($a[$i]>$a[$i+1])list($a[$i],$a[$i+1])=[$a[$i+1],$a[$i]];echo substr(join(' ',$a),5);

আমি লুপ কাঠামোর সাথে খুব খুশি নই তবে আমি তালিকাটি স্যুইচ করতে পছন্দ করি এবং এটি কাজ করে তাই আমি যেভাবেই পোস্ট করছি। php7.1 আমাকে কমপক্ষে 4 বাইট সংরক্ষণ করার অনুমতি দেবে।

আরও ভাল বিন্যাস সহ:

<?php 
for($i=2,$a=$argv;$a[1]--;$i=$i==count($a)-2?2:$i+1)
  if($a[$i]>$a[$i+1])
    list($a[$i],$a[$i+1])=[$a[$i+1],$a[$i]];
echo substr(join(' ',$a),5);

সম্পাদনা: জার্গ হালসারম্যান আমাকে ইমপ্লোডের পরিবর্তে যোগদানের কথা মনে করিয়ে দিয়েছিল।
দ্রষ্টব্য: একটি একক অক্ষর ফাইলের নাম সহ একটি ফাইলে থাকা দরকার।



$ T = $ একটি [$ i এর]; $ একটি [$ i এর] = $ একটি [$ আমি + 1]; $ একটি [$ আমি + 1] = $ টি; তারপরে সংক্ষিপ্ততর তালিকা ($ a [$ i], $ a [$ i + 1]) = [$ এ [$ আই + 1], $ এ [$ আই]]; এবং আমি নিশ্চিত নই যে প্রতিধ্বনি সাবস্ট্রটারের পরিবর্তে (ইমপ্লোড ('', $ এ), 5); এটি একটি $ a [1] = নাল; প্রতিধ্বনি যোগ ('', $ এ); আরও ভাল বিকল্প হয়।
জার্গ হালসারম্যান

1
অস্থায়ী ভেরিয়েবলটি 2 বাইট সংক্ষিপ্তরূপে ব্যবহার করার সময় এটি একাধিক স্টেটমেন্টও থাকে যাতে আপনার সম্পূর্ণ 2 টি কোঁকড়া ধনুর্বন্ধনীতে আবদ্ধ করতে বাইট ব্যবহার করতে হবে। $ A [1] = নালীর জন্য প্রথমে শ্বেত স্পেস এবং ফাইলের নাম এড়াতে আপনাকে আনসেট করতে হবে ($ a [0], $ a [1])।
ব্যবহারকারী59178

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