দ্বীপপুঞ্জের মানচিত্র (এবং একটি নদী)


20

ভূমিকা

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

ইনপুট বিবরণ

অঞ্চলটি দৈর্ঘ্য mএবং প্রস্থের কক্ষগুলির একটি আয়তক্ষেত্রাকার গ্রিড n। নীচের বামে 0,0ঘরটি থাকবে এবং উপরের ডানদিকে ঘরটি হবে m-1,n-1mএবং nটিপল হিসাবে ইনপুট সরবরাহ করা হয় m,n

দীর্ঘ দূরত্বের ভৌগলিক শব্দ প্রযুক্তি ব্যবহার করে নদীর চারপাশের দ্বীপগুলির অবস্থান চিহ্নিত করা হয়েছে। দ্বীপগুলির আকার (যেমন দ্বীপটি কতগুলি কোষে অধিষ্ঠিত রয়েছে )ও চিহ্নিত করা গেছে তবে আকারটি পাওয়া যায় নি। আমরা একটি tuple এই তথ্য সরবরাহ s,x,yযেখানে sদ্বীপের আকার, এবং xএবং yx এবং যে দ্বীপের একটি বিশেষ কক্ষের Y অবস্থানের হয়। ইনপুটটির প্রতিটি টিপল স্থান পৃথক করা হয়, তাই এখানে একটি উদাহরণ ইনপুট রয়েছে:

7,7 2,0,0 2,3,1 2,6,1 2,4,3 2,2,4 8,0,6 1,2,6 3,4,6

আরও পরিষ্কারভাবে চিত্রিত করার জন্য, এখানে একটি গ্রাফের ইনপুট রয়েছে:

 y 6|8 1 3
   5|
   4|  2
   3|    2
   2|
   1|   2  2
   0|2  
     =======
     0123456
     x

আউটপুট বিবরণ

অঞ্চলের অংশগুলি উপস্থাপন করতে ASCII অক্ষর ব্যবহার করে একটি মানচিত্র আউটপুট করুন। প্রতিটি ঘর হয় #(জমি) বা .(জল) হবে। মানচিত্রে এই নিয়মগুলি অনুসরণ করা উচিত:

  1. সংজ্ঞা। একটি দ্বীপটি স্থল কোষগুলির একটি orthogonally সুসংগত গ্রুপ যা পুরোপুরি নদী কোষ এবং / অথবা অঞ্চলটির সীমানা দ্বারা আবদ্ধ।
  2. সংজ্ঞা। একটা নদী পানি কোষের একটি orthogonally সংলগ্ন গ্রুপ জমি কোষ এবং / অথবা এলাকার সীমান্ত দ্বারা সম্পূর্ণরূপে বেষ্টিত হয় এবং "হ্রদ" (পানি কোষের 2x2 এলাকায়) ধারণ করে না।
  3. বিধি । মানচিত্রে ঠিক একটি নদী থাকবে।
  4. বিধি । ইনপুট প্রতিটি সংখ্যাযুক্ত সেল একটি দ্বীপ ঠিক ধারণকারী অংশ হইবে sকোষ।
  5. বিধি । মানচিত্রের প্রতিটি দ্বীপে ইনপুটটিতে নম্বরযুক্ত কক্ষগুলির মধ্যে একটিতে থাকা উচিত।
  6. বিধি । প্রতিটি ইনপুট জন্য একটি একক অনন্য মানচিত্র বিদ্যমান।

এখানে উদাহরণ ইনপুট আউটপুট:

#.#.##.
#....#.
#.##...
##..##.
###....
...##.#
##....#

এখানে আরেকটি ইনপুট এবং আউটপুট।

ইনপুট:

5,5 3,0,1 1,4,1 2,0,4 2,2,4 2,4,4

আউটপুট:

#.#.#
#.#.#
.....
###.#
.....

3
দ্রষ্টব্য: এটি নুরিকাবে সমাধানকারী হিসাবে একই প্রশ্ন ।
অ্যাবসিন্থে

1
আমরা কি কোনও সুবিধাজনক বিন্যাসে ইনপুট নিতে পারি, বা আমাদের প্রশ্নের মধ্যে থাকা উচিত?
এরিক আউটগল্ফার

1
এই থেকে সমস্যা 4 হয় 2012 Dyalog প্রতিযোগিতা
ngn

@ngn কখন থেকে "ক্রিপ্টোগ্রাফিক হ্যাশ পোস্ট করা হয় ... ... স্বাভাবিক? (তবে আমি মনে করি এটি কোনও অনুমোদিত যখন কোনও চ্যালেঞ্জ স্পষ্টরূপে এটির অনুমতি দেয়)
ব্যবহারকারী 202729

1
এখানে ধাঁধা- নুরিকাবে ডট কমের জন্য একটি বুকমার্কলেট রয়েছে - এটি বর্তমান ধাঁধাটিকে এই চ্যালেঞ্জের জন্য একটি বৈধ ইনপুটতে রূপান্তর করে এবং বোর্ডের ঠিক নীচে লাল রঙে দেখায়:javascript:(_=>{var t=Game.nurikabe().task,m=t.length,n=t[0].length,s=[m,n];for(var i=0;i<m;i++)for(var j=0;j<n;j++)if(t[i][j]>=0)s+=' '+[t[i][j],i,j];puzzleContainerDiv.insertAdjacentHTML('beforeend','<hr><tt style=color:red>'+s+'</tt><hr>')})();void(0)
এনজিএন

উত্তর:


10

সি + পিকোস্যাট , 2345 995 952 বাইট

#include<picosat.h>
#define f(i,a)for(i=a;i;i--)
#define g(a)picosat_add(E,a)
#define b calloc(z+1,sizeof z)
#define e(a,q)if(a)A[q]^A[p]?l[q]++||(j[++k]=q):s[q]||(i[q]=p,u(q));
z,F,v,k,n,h,p,q,r,C,*x,*A,*i,*l,*s,*j,*m;u(p){s[m[++n]=p]=1;e(p%F-1,p-1)e(p%F,p+1)e(p>F,p-F)e(p<=F*v-F,p+F)}t(){f(q,k)l[j[q]]=0;f(q,n)s[m[q]]=0;k=n=0;i[p]=-1;u(p);}main(){void*E=picosat_init();if(scanf("%d,%d",&F,&v)-2)abort();z=F*v;for(x=b;scanf("%d,%d,%d",&r,&p,&q)==3;g(p),g(0))x[p=F-p+q*F]=r;f(p,F*v-F)if(p%F)g(p),g(p+1),g(p+F),g(p+F+1),g(0);for(A=b,i=b,l=b,s=b,j=b,m=b;!C;){picosat_sat(E,C=h=-1);f(p,F*v)A[p]=picosat_deref(E,p)>0,i[p]=0;f(p,F*v)if(x[p])if(i[q=p]){for(g(-q);i[q]+1;)q=i[q],g(-q);g(C=0);}else if(t(),r=n-x[p]){f(q,r<0?k:n)g(r<0?j[q]:-m[q]);g(C=0);}f(p,F*v)if(!i[p])if(t(),A[p]){g(-++z);f(q,k)g(j[q]);g(C=0);f(q,n)g(-m[q]),g(z),g(0);}else{C&=h++;f(q,k)g(-j[q]);g(++z);g(++z);g(0);f(q,F*v)g(s[q]-z),g(q),g(0);}}f(p,F*v)putchar(A[p]?35:46),p%F-1||puts("");}

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

(সতর্কতা: এই টিআইও লিঙ্কটি একটি 30 কিলোবাইট ইউআরএল যা পিকোস্যাট 965 এর একটি সংযুক্ত কপি রয়েছে, তাই আপনি এটি কয়েকটি ব্রাউজারে লোড করতে সক্ষম নাও হতে পারেন তবে এটি কমপক্ষে ফায়ারফক্স এবং ক্রোমে লোড হয়))

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

আমরা প্রতিটি ঘরের (স্থল বা জল) ভেরিয়েবলের সাথে স্যাট সলভারটি আরম্ভ করি এবং কেবল নিম্নলিখিত সীমাবদ্ধতাগুলি:

  1. প্রতিটি সংখ্যাযুক্ত ঘরটি জমি।
  2. প্রতি 2 × 2 আয়তক্ষেত্রে কমপক্ষে একটি জমি থাকে।

বাকি সীমাবদ্ধতাগুলি সরাসরি SAT- এ এনকোড করা শক্ত, সুতরাং পরিবর্তে আমরা একটি মডেল পেতে সলভারটি চালাই, এই মডেলের সংযুক্ত অঞ্চলগুলি অনুসন্ধানের জন্য গভীরতা-প্রথম অনুসন্ধানগুলির ক্রম চালাই এবং নীচে অতিরিক্ত বাধা যুক্ত করুন:

  1. খুব বড় স্থল অঞ্চলে প্রতিটি সংখ্যাযুক্ত কক্ষের জন্য, একটি সীমাবদ্ধতা যুক্ত করুন যে সেই অঞ্চলে বর্তমান স্থল কোষগুলির মধ্যে কমপক্ষে একটি জল কোষ থাকা উচিত।
  2. খুব সামান্য একটি স্থল অঞ্চলে প্রতিটি সংখ্যাযুক্ত কক্ষের জন্য, একটি সীমাবদ্ধতা যুক্ত করুন যে সেই অঞ্চলের সীমান্তবর্তী বর্তমান জলের কোষগুলির মধ্যে কমপক্ষে একটি ল্যান্ড সেল থাকতে হবে।
  3. একই স্থল অঞ্চলে অন্য সংখ্যাযুক্ত কক্ষের মতো প্রতিটি সংখ্যাযুক্ত কক্ষের জন্য একটি সীমাবদ্ধতা যুক্ত করুন যে তাদের মধ্যে বর্তমান স্থল কোষগুলির পথের সাথে কমপক্ষে একটি জলের ঘর থাকতে হবে (প্রথম পৃষ্ঠার গভীরতা-প্রথম অনুসন্ধান থেকে মূল পয়েন্টগুলি হাঁটার মাধ্যমে পাওয়া যাবে) )।
  4. কোনও জমিযুক্ত কক্ষ সহ প্রতিটি ভূমি অঞ্চলের জন্য, সেগুলির মধ্যে বাধা যুক্ত করুন
    • এই সমস্ত বর্তমান স্থল কোষগুলি জল হওয়া উচিত, বা
    • এই অঞ্চলের সীমান্তবর্তী কমপক্ষে বর্তমান জলের কোষগুলির মধ্যে একটি স্থলভূমি হওয়া উচিত।
  5. প্রতিটি জলের অঞ্চলের জন্য, সীমাবদ্ধতাগুলি যুক্ত করুন either
    • বর্তমানের সমস্ত জলের কোষগুলি জমি বা, হওয়া উচিত
    • বর্তমানের জলের কোষগুলি ব্যতীত প্রতিটি কোষের স্থল হওয়া উচিত, বা
    • এই অঞ্চলের সীমানা ঘেঁষে কমপক্ষে একটি বর্তমান ভূমি কোষের জল হওয়া উচিত।

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

এটি লক্ষণীয়ভাবে কার্যকর; এটি 15 × 15 এবং 20 × 20 টি সেকেন্ডের ক্ষুদ্র ভগ্নাংশে সমাধান করে।

( কিছুক্ষণ আগে, ইনক্রিমেন্টাল এসএটি সলভারে সংযুক্ত অঞ্চলগুলিকে ইন্টারেক্টিভভাবে সীমাবদ্ধ করার এই ধারণাটি দেওয়ার জন্য লোপসিকে ধন্যবাদ জানাই ))

ধাঁধা-নুরিকাবে.কম থেকে আরও কিছু বড় পরীক্ষার মামলা

15 × 15 হার্ড ধাঁধা ( 5057541 , 5122197 , 5383030 , 6275294 , 6646970 , 6944232 ) এর এলোমেলো পৃষ্ঠা :

15,15 1,5,1 3,9,1 5,4,2 1,6,2 2,11,2 2,2,3 3,9,3 2,4,4 1,10,4 5,12,4 3,1,5 1,3,5 3,8,5 1,13,5 5,5,6 1,12,6 1,2,8 2,9,8 1,1,9 2,6,9 6,11,9 3,13,9 5,2,10 2,4,10 4,10,10 1,5,11 2,12,11 2,3,12 2,8,12 5,10,12 1,5,13 1,9,13 1,6,14 1,8,14
15,15 4,2,0 2,5,0 1,3,1 2,14,2 1,3,3 2,11,3 1,13,3 1,5,4 11,7,4 1,9,4 1,4,5 1,8,5 2,10,5 12,14,5 3,5,6 1,4,7 2,10,7 3,9,8 4,0,9 1,4,9 1,6,9 3,10,9 1,5,10 1,7,10 8,9,10 1,1,11 10,3,11 2,11,11 6,0,12 1,11,13 2,9,14 1,12,14
15,15 2,2,0 8,10,0 2,3,1 2,14,2 2,3,3 3,5,3 3,9,3 2,11,3 5,13,3 6,0,4 3,7,4 3,3,5 2,11,5 2,6,6 1,8,6 1,4,7 2,10,7 1,6,8 2,8,8 5,3,9 2,11,9 2,7,10 7,14,10 2,1,11 4,3,11 2,5,11 1,9,11 2,11,11 2,0,12 4,6,13 1,11,13 3,4,14 1,12,14
15,15 2,0,0 2,4,0 3,6,1 2,10,1 1,13,1 2,5,2 2,12,2 3,0,3 2,2,3 4,7,3 2,9,3 1,14,3 1,4,4 1,8,4 2,12,5 4,2,6 3,4,6 1,14,6 7,7,7 1,10,8 2,12,8 3,2,9 2,14,9 2,0,10 2,6,10 1,10,10 2,5,11 4,7,11 2,12,11 1,14,11 3,2,12 3,9,12 1,1,13 2,4,13 3,8,13 2,10,14 5,14,14
15,15 1,3,0 1,14,0 3,7,1 3,10,1 2,13,1 3,1,2 4,5,2 2,12,3 3,3,4 1,8,4 1,1,5 3,5,5 1,9,5 5,13,5 3,3,6 1,8,6 2,2,7 2,12,7 1,6,8 1,8,8 2,11,8 2,1,9 4,5,9 2,9,9 2,13,9 2,6,10 4,11,10 1,2,11 3,9,12 2,13,12 3,1,13 2,4,13 3,7,13 1,0,14
15,15 2,8,0 2,4,1 2,7,1 1,10,1 6,4,3 1,1,4 12,5,4 3,11,4 5,13,4 3,10,5 3,0,6 1,6,6 2,8,6 4,13,7 2,3,8 1,6,8 3,8,8 2,14,8 2,4,9 5,1,10 4,3,10 1,9,10 6,13,10 3,8,11 1,10,11 3,4,13 2,7,13 3,10,13 1,6,14 1,14,14

20 × 20 সাধারণ ধাঁধাগুলির একটি এলোমেলো পৃষ্ঠা ( 536628 , 3757659 ):

20,20 1,0,0 3,2,0 2,6,0 1,13,0 3,9,1 3,15,1 2,7,2 3,13,2 3,0,3 2,3,3 3,18,3 3,5,4 2,9,4 2,11,4 2,16,4 1,0,5 2,7,5 1,10,5 1,19,5 3,2,6 1,11,6 2,17,6 2,0,7 3,4,7 5,6,7 2,9,7 4,13,7 3,15,7 1,3,8 1,10,8 1,14,9 2,18,9 3,1,10 2,4,10 1,8,10 1,10,10 3,12,10 3,16,10 1,9,11 1,17,11 2,19,11 2,0,12 2,2,12 1,4,12 4,6,12 2,13,12 2,15,12 1,14,13 2,17,13 1,3,14 2,5,14 4,7,14 2,15,14 3,0,15 1,2,15 2,13,15 3,18,15 3,7,16 7,10,16 1,17,16 2,0,17 2,3,17 2,5,17 3,11,17 3,15,17 1,0,19 1,2,19 1,4,19 2,6,19 5,8,19 1,11,19 1,13,19 3,15,19 2,18,19
20,20 1,0,0 1,4,0 5,8,0 1,17,0 1,19,0 2,17,2 3,6,3 2,10,3 2,12,3 4,14,3 6,0,4 3,4,4 4,7,4 1,11,4 1,18,4 1,6,5 3,12,5 4,15,5 4,4,6 2,16,6 2,19,6 6,0,7 3,10,7 2,12,8 2,17,8 3,3,9 2,5,9 4,8,9 2,10,9 3,0,10 1,2,10 5,14,10 2,16,10 2,19,10 7,7,11 3,12,12 2,17,12 2,2,13 4,4,13 3,6,13 4,14,13 3,0,14 1,3,14 1,5,14 3,16,14 1,2,15 1,9,15 2,11,15 5,13,15 3,19,15 1,4,16 3,6,16 1,3,17 1,12,17 1,14,17 1,16,17 6,0,19 2,2,19 3,5,19 2,7,19 5,9,19 1,11,19 2,13,19 1,15,19 4,17,19

3

জিএলপিকে , (প্রতিযোগিতা না করা) 2197 বাইট

এটি যেমন একটি প্রতিদ্বন্দ্বিতামূলক এন্ট্রি

  • আমি ইনপুট ডেটা ফর্ম্যাটটি অনুসরণ করি না (যেমন GLPK কেবল ফাইলগুলি থেকে ইনপুট ডেটা পড়তে পারে) এবং
  • জিএলপিকে আরআইওতে পাওয়া যাচ্ছে না বলে মনে হচ্ছে।

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

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

যদিও এই গঠনের পারফরম্যান্স দুর্দান্ত নয়। বিপুল পরিমাণ সীমাবদ্ধতার সাথে সরাসরি সমস্ত জটিলতা খাওয়ার দ্বারা, সমাধানটি 15 x 15 উদাহরণের জন্য 15 সেকেন্ডের কাছাকাছি সময় নেয়।

কোড (এখনও অবরুদ্ধ)

# SETS
param M > 0, integer; # length
param N > 0, integer; # width
param P > 0, integer; # no. of islands

set X := 0..N-1;  # set of x coords
set Y := 0..M-1;  # set of y coords
set Z := 0..P-1;  # set of islands

set V := X cross Y;
set E within V cross V := setof{
  (sx, sy) in V, (tx, ty) in V :

  ((abs(sx - tx) = 1) and (sy = ty)) or 
  ((sx = tx) and (abs(sy - ty) = 1))
} 
  (sx, sy, tx, ty);


# PARAMETERS
param islands{x in X, y in Y, z in Z}, integer, default 0;
param island_area{z in Z} := sum{x in X, y in Y} islands[x, y, z];

# VARIABLES
var is_river{x in X, y in Y}, binary;
var is_island{x in X, y in Y, z in Z}, binary;
var flow{(sx, sy, tx, ty) in E, z in Z} >= 0;

# OBJECTIVE
minimize obj: sum{(sx, sy, tx, ty) in E, z in Z} flow[sx, sy, tx, ty, z];

# CONSTRAINTS
s.t. islands_are_connected{(x, y) in V, z in Z}:

    islands[x, y, z] 
  - is_island[x, y, z]
  + sum{(sx, sy, tx, ty) in E: x = tx and y = ty} flow[sx, sy, x, y, z]
  - sum{(sx, sy, tx, ty) in E: x = sx and y = sy} flow[x, y, tx, ty, z]
  = 0;


s.t. island_contains_hint_location{(x, y) in V, z in Z}:

    is_island[x, y, z] >= if islands[x, y, z] > 0 then 1 else 0;


s.t. each_square_is_river_or_island{(x, y) in V}:

    is_river[x, y] + sum{z in Z} is_island[x, y, z] = 1;


s.t. islands_match_hint_area{z in Z}:

    sum{(x, y) in V} is_island[x, y, z] = island_area[z];


s.t. river_has_no_lakes{(x,y) in V: x > 0 and y > 0}:

  3 >= is_river[x, y] + is_river[x - 1, y - 1]
     + is_river[x - 1, y] + is_river[x, y - 1];


s.t. river_squares_have_at_least_one_neighbor{(x, y) in V}:

    sum{(sx, sy, tx, ty) in E: x = tx and y = ty} is_river[sx, sy] 
 >= is_river[x, y];


s.t. island_fields_have_at_least_one_neighbor{(x, y) in V, z in Z: island_area[z] > 1}:

    sum{(sx, sy, tx, ty) in E: x = tx and y = ty} is_island[sx, sy, z]
 >= is_island[x, y, z];


s.t. islands_are_separated_by_water{(x, y) in V, z in Z}:

    sum{(sx, sy, tx, ty) in E, oz in Z: x = sx and y = sy and z != oz} is_island[tx, ty, oz]
 <= 4 * P * (1 - is_island[x, y, z]);

solve;

for{y in M-1..0 by -1}
{
    for {x in X} 
    {
        printf "%s", if is_river[x, y] = 1 then "." else "#";
    }
    printf "\n";
}

সমস্যা ডেটা

5 এক্স 5

data;
param M := 5;
param N := 5;
param P := 5;
param islands :=
# x,y,z,area
  0,1,0,3
  4,1,1,1
  0,4,2,2
  2,4,3,2
  4,4,4,2;
end;

7 এক্স 7

data;
param M := 7;
param N := 7;
param P := 8;
param islands :=
# x,y,z,area
  0,0,0,2 
  3,1,1,2 
  6,1,2,2 
  4,3,3,2 
  2,4,4,2 
  0,6,5,8 
  2,6,6,1 
  4,6,7,3;
end;

15 x 15

data;
param M := 15;
param N := 15;
param P := 34;
param islands :=
# x,y,   z,area
5,  1,   0, 1
9,  1,   1, 3
4,  2,   2, 5
6,  2,   3, 1
11, 2,   4, 2
2,  3,   5, 2
9,  3,   6, 3
4,  4,   7, 2
10, 4,   8, 1
12, 4,   9, 5
1,  5,  10, 3
3,  5,  11, 1
8,  5,  12, 3
13, 5,  13, 1
5,  6,  14, 5
12, 6,  15, 1
2,  8,  16, 1
9,  8,  17, 2
1,  9,  18, 1
6,  9,  19, 2
11, 9,  20, 6
13, 9,  21, 3
2,  10, 22, 5
4,  10, 23, 2
10, 10, 24, 4
5,  11, 25, 1
12, 11, 26, 2
3,  12, 27, 2
8,  12, 28, 2
10, 12, 29, 5
5,  13, 30, 1
9,  13, 31, 1
6,  14, 32, 1
8,  14  33, 1;
end;

ব্যবহার

হয়েছে glpsolএকটি ফাইল (যেমন হিসাবে ইনস্টল, মডেল river.mod), পৃথক ফাইল (গুলি) (যেমন ইনপুট ডেটা 7x7.mod)। তারপর:

glpsol -m river.mod -d 7x7.mod

এই প্লাস কিছু ধৈর্য সমাধান নির্দিষ্ট আউটপুট বিন্যাসে ("কিছু" ডায়াগনস্টিক আউটপুট একসাথে) মুদ্রণ করবে।


2
আমি মনে করি যে এই উত্তরটি প্রতিযোগিতামূলক হিসাবে বিবেচিত হওয়া উচিত কারণ এটি অন্যের পক্ষে এটি কার্যকর হয়েছে কিনা তা যাচাই করা সম্ভব। আইও ফর্ম্যাটের পার্থক্যগুলি এই ধারনা দ্বারা আচ্ছাদিত করা উচিত যে কোনও যুক্তিসঙ্গত আইও ফর্ম্যাট গ্রহণ করা উচিত।
fəˈnɛtɪk

2
@ fəˈnɛtɪk সম্মত। এটি সবে শেষ হওয়া এনএনগনের অনুগ্রহের পক্ষে যোগ্য ছিল না, যার জন্য বিশেষত টিআইও-তে চালিতযোগ্য একটি উত্তর প্রয়োজন, তবে এটি নিজেই প্রশ্নের প্রয়োজন নয়।
অ্যান্ডারস ক্যাসরগ

প্রদত্ত যে আমি এটি গল্ফ করা শুরু করি নি, আমি এটিকে প্রতিযোগিতা হিসাবে বিবেচনা করব না (এখনও)। একবার আমি নিশ্চিত হয়েছি যে আমি সমস্ত অপ্রয়োজনীয় সীমাবদ্ধতাগুলি ছাঁটাই করেছি, আমি সমস্ত ঘোষণাকে এক-চরিত করব।
ojdo

3

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

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

L,S,O,R,F=len,set,None,range,frozenset
U,N,J,D,I=S.update,F.union,F.isdisjoint,F.difference,F.intersection
def r(n,a,c):
 U(c,P)
 if L(I(N(Q[n],C[n]),a))<2:return 1
 w=D(P,N(a,[n]));e=S();u=S([next(iter(w))])
 while u:n=I(Q[u.pop()],w);U(u,D(n,e));U(e,n)
 return L(e)==L(w)
def T(a,o,i,c,k):
 s,p,m=a
 for _ in o:
  t=s,p,N(m,[_]);e=D(o,[_])
  if t[2] in c:o=e;continue
  c.add(t[2]);n=D(Q[_],m);U(k,n)
  if not J(i,n)or not r(_,N(m,i),k):o=e
  elif s==L(t[2]):yield t
  else:yield from T(t,N(e,n),i,c,k)
s,*p=input().split()
X,Y=eval(s)
A=[]
l=1,-1,0,0
P=F((x,y)for y in R(Y)for x in R(X))
exec("Q%sl,l[::-1]%s;C%s(1,1,-1,-1),l[:2]*2%s"%(('={(x,y):F((x+i,y+j)for i,j in zip(',')if X>x+i>-1<y+j<Y)for x,y in P}')*2))
for a in p:a,x,y=eval(a);k=x,y;A+=[(a,k,F([k]))]
A.sort(reverse=1)
k=F(a[1]for a in A)
p=[O]*L([a for a in A if a[0]!=1])
g,h=p[:],p[:]
i=0
while 1:
 if g[i]is O:h[i]=S();f=O;g[i]=T(A[i],Q[A[i][1]],D(N(k,*p[:i]),[A[i][1]]),S(),h[i])
 try:p[i]=g[i].send(f)[2]
 except:
  f=I(N(k,*p[:i]),h[i]);g[i]=p[i]=O;i-=1
  while J(p[i],f):g[i]=p[i]=O;i-=1
 else:
  i+=1
  if i==L(p):
   z=N(k,*p)
   if not any(J(z,F(zip([x,x+1]*2,[y,y,y+1,y+1])))for x in R(X-1)for y in R(Y-1)):break
   for c in h:U(c,z)
b=[X*['.']for i in R(Y)]
for x,y in z:b[y][x]='#'
for l in b[::-1]:print(''.join(l))

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

অ-golfed কোড

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