2-মাত্রিক বুদ্বুদ বাছাই


17

বাছাই করা 2-মাত্রিক অ্যারেটির কোনও অর্থ রাখে না ... বা এটি?

আপনার কাজটি হ'ল একটি ইনপুট গ্রিড নেওয়া এবং এটিতে বুদ্বুদ-সাজানোর মতো অ্যালগরিদম প্রয়োগ করা যতক্ষণ না গ্রিডের সমস্ত মান প্রতিটি সারি এবং কলামে বাম থেকে ডান এবং নীচে থেকে কমতে থাকে।

অ্যালগরিদম নিম্নলিখিত হিসাবে কাজ করে:

  • প্রতিটি পাস তার ডান এবং নীচে প্রতিবেশীদের সাথে প্রতিটি সেলকে তুলনা / অদলবদল করে, শীর্ষ থেকে নীচে, প্রতিটি সারি একের পর এক সারিতে যায়।
    • যদি ঘরটি তার ডান এবং নীচে থাকা প্রতিবেশীদের মধ্যে কেবল একটির চেয়ে বেশি হয় তবে তার চেয়ে বড়টি তার সাথে বদলে ap
    • যদি ঘরটি তার ডান এবং নীচের উভয় প্রতিবেশীর চেয়ে বড় হয় তবে ছোট প্রতিবেশীর সাথে অদলবদল করুন
    • যদি ঘরটি তার ডান এবং নীচের প্রতিবেশী উভয়ের চেয়ে বেশি হয় যা একই মান, তবে নীচের প্রতিবেশীর সাথে অদলবদল করুন।
    • যদি ঘরটি তার ডান এবং নীচের প্রতিবেশীদের উভয়ের চেয়ে বড় না হয় তবে কিছুই করবেন না
  • পুরো পাস জুড়ে কোনও অদলবদল না হওয়া অবধি এটি চালিয়ে যান। প্রতিটি সারি এবং কলামটি বাম থেকে ডান এবং নীচে থেকে নীচে ক্রমে থাকে এমনটি হবে।

উদাহরণ

4 2 1
3 3 5
7 2 1

পাসের প্রথম সারিতে 4 এবং 2 অদলবদল করবে, তারপরে 1 দিয়ে 4।

2 1 4
3 3 5
7 2 1

যখন আমরা মাঝারিটি 3 পেয়ে যাব, এটি নীচের 2 এর সাথে সজ্জিত হবে

2 1 4
3 2 5
7 3 1

তারপরে 5 টি নীচে 1 দিয়ে অদলবদল হবে

2 1 4
3 2 1
7 3 5

প্রথম পাসের শেষ সারিটি 7 টি ডানদিকে সরায়

2 1 4
3 2 1
3 5 7

তারপরে আমরা আবার শীর্ষ সারিতে ফিরে যাই

1 2 1
3 2 4
3 5 7

এবং একের পর এক সারিতে চালিয়ে যান ...

1 2 1
2 3 4
3 5 7

... গ্রিডটি "বাছাই করা" হওয়া পর্যন্ত

1 1 2
2 3 4
3 5 7

আরেকটি উদাহরণ

3 1 1
1 1 1
1 8 9

হয়ে

1 1 1
1 1 1
3 8 9

বরং

1 1 1
1 1 3
1 8 9

কারণ নীচের দিকে অদলবদল অগ্রাধিকার নেয় যখন কোনও ঘরের ডান এবং নীচে প্রতিবেশী উভয়ই সমান হয়।

একটি ধাপে ধাপে রেফারেন্স বাস্তবায়ন এখানে পাওয়া যাবে

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

5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6

হয়ে

0 0 1 1 2 2 3 6
2 2 3 3 6 7 8 8
3 3 5 7 8 9 9 9

2 1 2 7 8 2 1 0
2 2 2 2 3 2 1 0
1 2 3 4 5 4 3 2
9 8 7 6 5 4 3 6
6 5 4 3 2 2 1 0

হয়ে

0 0 0 1 1 1 2 2
1 1 2 2 2 2 2 2
2 2 2 2 3 3 3 3
3 4 4 4 4 5 6 6
5 5 6 7 7 8 8 9

বিধি

  • আপনি যে কোনও সুবিধাজনক বিন্যাসে ইনপুট গ্রিড নিতে পারেন
  • আপনি গ্রিডের মানগুলি স্বাক্ষরযুক্ত 16-বিট পরিসরে (0-65535) সমস্ত অ-নেতিবাচক পূর্ণসংখ্যার হিসাবে ধরে নিতে পারেন।
  • আপনি ধরে নিতে পারেন গ্রিডটি একটি নিখুঁত আয়তক্ষেত্র এবং জাগড অ্যারে নয়। গ্রিডটি কমপক্ষে 2x2 হবে।
  • আপনি যদি বাছাইয়ের অন্য একটি অ্যালগরিদম ব্যবহার করেন তবে আপনাকে অবশ্যই একটি প্রমাণ সরবরাহ করতে হবে যে এটি সর্বদা 2D বুদ্বুদ বাছাইয়ের এই বিশেষ ব্র্যান্ডের মতো একই ফলস্বরূপ অর্ডার তৈরি করবে , ইনপুটটি যাই হোক না কেন। আমি এটি একটি তুচ্ছ প্রমাণ হিসাবে প্রত্যাশা করব, তাই আপনি সম্ভবত বর্ণিত অ্যালগরিদম ব্যবহার করে আরও ভাল।

শুভ গল্ফিং!


আপনার চ্যালেঞ্জে নির্দিষ্ট করা অ্যালগরিদমটি কি আমাদের কার্যকর করতে হবে?
অজ্ঞতার

1
অ্যারে কমপক্ষে 2x2 হবে?
ousurous

3
@ এম্বোডিমেন্টফ অজ্ঞতা: কেবলমাত্র যদি আপনি প্রমাণ করেন যে এর ফলস্বরূপ এটি সমস্ত ক্ষেত্রে সমতুল্য বাছাইয়ের ফলাফল । আমি এটি একটি তুচ্ছ প্রমাণ হিসাবে আশা করি।
গরুর মাংসের

4
যিনি এটিকে "অত্যধিক বিস্তৃত" হিসাবে বন্ধ করার পক্ষে ভোট দিয়েছেন, আপনার যুক্তিটি ব্যাখ্যা করতে আপনি কি আপত্তি করবেন? এটি এক সপ্তাহের জন্য 3 টি উপগ্রহ এবং সংশোধনের জন্য কোনও মন্তব্য সহ স্যান্ডবক্সে ছিল তাই পূর্বের conকমত্যটি ছিল এটি একটি শালীন চ্যালেঞ্জ was
বিফস্টার

উত্তর:




1

ওল্ফ্রাম ভাষা (গণিত) , 183 বাইট

(R=#;{a,b}=Dimensions@R;e=1;g:=If[Subtract@@#>0,e++;Reverse@#,#]&;While[e>0,e=0;Do[If[j<b,c=R[[i,j;;j+1]];R[[i,j;;j+1]]=g@c]If[i<a,c=R[[i;;i+1,j]];R[[i;;i+1,j]]=g@c],{i,a},{j,b}]];R)&

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

আমি গণিত বিশেষজ্ঞ নন, আমি নিশ্চিত যে এটি আরও কম করা যেতে পারে। বিশেষত আমি মনে করি যে দ্বিগুণ বিবৃতিটি ব্যবহার করে সংক্ষিপ্ত করা যেতে পারে Transposeতবে আমি কীভাবে জানি না।



0

পরিষ্কার , 240 বাইট

import StdEnv
$l=limit(iterate?l)
?[]=[]
?l#[a:b]= @l
=[a: ?b]
@[[a,b:c]:t]#(t,[u:v])=case t of[[p:q]:t]=([q:t],if(a>p&&b>=p)[b,p,a]if(a>b)[a,b,p][b,a,p]);_=(t,sortBy(>)[a,b])
=[v%(i,i)++j\\i<-[0..]&j<- @[[u:c]:t]]
@l=sort(take 2l)++drop 2l

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

বর্ণিত ঠিক মতো অ্যালগরিদমকে কার্যকর করে।

প্রশ্নটিতে ফর্ম্যাটটি নিতে লিংকে ইনপুট পার্সিং অন্তর্ভুক্ত রয়েছে।


0

পাইথন 2 , 215 208 বাইট

m=input()
h=len(m);w=len(m[0])
while 1:
 M=eval(`m`)
 for k in range(h*w):i,j=k/w,k%w;v,b,a=min([(M[x][y],y,x)for x,y in(i,j),(i+(i<h-1),j),(i,j+(j<w-1))]);M[i][j],M[a][b]=M[a][b],M[i][j]
 M!=m or exit(M);m=M

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

-7 বাইট, ওভসকে ধন্যবাদ


ডিবাগ / এসটিডিআরআরতে আউটপুট সহ 208 বাইট
ovs

@ ওভস, ধন্যবাদ :)
টিফিল্ড

0

সি # (.নেট কোর) , 310 বাইট

লিনকিউ ছাড়াই। সিস্টেম.কলেশন ব্যবহার করে ব্যবহার করে the ফাংশনটি ফিরে আসার পরে আউটপুট ফর্ম্যাট করার জন্য জেনেরিক। জিনিসটি বোকা বিশাল। গল্ফের অপেক্ষায়!

a=>{int x=a.GetLength(0),y=a.GetLength(1);bool u,o;int j=0,k,l,t,z;for(;j<x*y;j++)for(k=0;k<x;k++)for(l=0;l<y;){o=l>y-2?0>1:a[k,l+1]<a[k,l];u=k>x-2?0>1:a[k+1,l]<a[k,l];z=t=a[k,l];if((u&!o)|((u&o)&&(a[k,l+1]>=a[k+1,l]))){t=a[k+1,l];a[k+1,l]=z;}else if((!u&o)|(u&o)){t=a[k,l+1];a[k,l+1]=z;}a[k,l++]=t;}return a;}

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


0

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

G=input()
O=e=enumerate
while O!=G:
 O=eval(`G`)
 for i,k in e(G):
	for j,l in e(k):v,x,y=min((G[i+x/2][j+x%2],x&1,x/2)for x in(0,1,2)if i+x/2<len(G)and j+x%2<len(k));G[i][j],G[i+y][j+x]=v,l
print G

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

টিফিল্ডের উত্তর থেকে স্বতন্ত্রভাবে বিকাশ হয়েছে, এর কিছু পার্থক্য রয়েছে।


0

কাঠকয়লা , 118 বাইট

≔I9.e999η≧⁻ηηFθ⊞ιη⊞θ⟦η⟧FΣEθLι«FLθ«≔§θκιFLι«≔§ιλζ≔§ι⊕λε≔§§θ⊕κλδ¿››ζδ›δ嫧≔§θ⊕κλζ§≔ιλδ»¿›ζ嫧≔ι⊕λζ§≔ιλε»»»»¿⊟θ¿Eθ⊟ιEθ⪫ι 

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। আমি কিছু প্রাকৃতিক ফর্ম্যাটিংয়ের জন্য কয়েক বাইটও ব্যয় করেছি। ব্যাখ্যা:

≔I9.e999η≧⁻ηηFθ⊞ιη⊞θ⟦η⟧

জাভাস্ক্রিপ্টে সুবিধাজনক সম্পত্তি রয়েছে যা অ্যারের শেষ উপাদানটি a[i]>a[i+1]হলে মিথ্যা i। চারকোলে এটি অনুকরণ করতে, আমি nanকাস্টিং দ্বারা একটি গণনা করি9.e999 করে এবং তারপরে নিজে থেকে বিয়োগ করে । (কাঠকয়লা তাত্ক্ষণিক ভাসমান ধ্রুবকগুলিকে সমর্থন করে না)) আমি তারপরে ডানদিকে মূল অ্যারেটি প্যাড করব এবং ঠিক আরও nanএকটি অতিরিক্ত সারি যুক্ত করব nan। (কাঠকয়ালের সাইক্লিক ইনডেক্সিংয়ের অর্থ এই যে সারিটিতে আমার কেবল একটি উপাদান প্রয়োজন))

FΣEθLι«

অ্যারেতে প্রতিটি উপাদানের জন্য লুপ। কাজটি করার জন্য এটি যথেষ্ট লুপের বেশি হওয়া উচিত, কারণ আমি অতিরিক্ত nanসমস্তগুলিও অন্তর্ভুক্ত করছি ।

FLθ«≔§θκι

প্রতিটি সারি সূচকে লুপ করুন এবং সেই সূচীতে সারিটি পান। (কাঠকয়লা কোনও আদেশ দিয়ে নয় তবে কমান্ড দিয়ে উভয়ই করতে পারে)) এতে ডামি সারি অন্তর্ভুক্ত রয়েছে তবে এটি কোনও সমস্যা নয় কারণ সমস্ত তুলনাটি ব্যর্থ হবে।

FLι«≔§ιλζ

প্রতিটি কলাম সূচকের উপর লুপ করুন এবং সেই সূচীতে মানটি পান। আবার, এটি ডামি মানগুলি লুপ করবে তবে তুলনাগুলি আবার ব্যর্থ হবে।

≔§ι⊕λε≔§§θ⊕κλδ

ডান এবং নীচে মানগুলিও পান।

¿››ζδ›δ嫧≔§θ⊕κλζ§≔ιλδ»

যদি ঘরটি নীচের মানের চেয়ে বেশি হয় এবং এটি সত্য না যে নীচের মানটি ডান মানের থেকে বেশি হয় তবে নীচের মানটির সাথে ঘরটি অদলবদল করুন।

¿›ζ嫧≔ι⊕λζ§≔ιλε»»»»

অন্যথায় যদি ঘরটি ডান মানের থেকে বেশি হয় তবে এগুলি স্যুপ করে নিন।

¿⊟θ¿Eθ⊟ιEθ⪫ι 

অন্তর্ভুক্ত nanআউটপুট জন্য মানগুলি সরান এবং অ্যারে ফর্ম্যাট করুন।


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