আমার জন্য এই আলকাজারটি সমাধান করুন


39

সম্প্রতি আমি আলকাজার নামে একটি খেলা খেলছি। এটি একটি বোর্ড ধাঁধা খেলা যেখানে আপনার লক্ষ্য এক দরজা থেকে প্রবেশ করা, সমস্ত স্কোয়ারের মধ্য দিয়ে যেতে এবং অন্য দরজা দিয়ে প্রস্থান করা। একমাত্র নিয়ম:

  • একবার প্রবেশ করুন, একবার ছেড়ে যান;
  • সমস্ত স্কোয়ারের মধ্য দিয়ে যান;
  • একাধিক স্কোয়ারের মধ্য দিয়ে যাবেন না

নীচের চিত্রটি একটি আলকাজার বোর্ডের উদাহরণ দেখায় এবং তার ডানদিকে সমাধান ধাঁধা (অবশ্যই এটি একটি সহজ):

নমুনা আলকাজার ধাঁধা

আপনি http://www.theincrediblecompany.com/try-alc जार এ আরও ধাঁধা খুঁজে পেতে পারেন এবং প্লেস্টোরে গেমটি ডাউনলোড করতে পারেন (পিএস: বিজ্ঞাপন নয়)

আমার সমস্যাটি হ'ল আমি এক স্তর বাদে প্রায় খেলা শেষ করেছি। আমি কেবল এটির সমাধানের উপায় খুঁজে পাচ্ছি না। সুতরাং আমি প্রস্তাবিত চ্যালেঞ্জটি হ'ল: একটি অ্যালগরিদম তৈরি করুন যা কোনও সাধারণ 1 দ্রবণযোগ্য 2 অ্যালকাজার স্তরকে সমাধান করে ves

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

╔═══════╗         ╔═══════╗
║▒ ▒ ▒ ▒║         ║┌─┐ ┌─┐║
║     ║ ║         ║│ │ │║│║
╣▒ ▒ ▒║▒╠         ╣│ └─┘║└╠
║ ══╦═╩═╣         ║│══╦═╩═╣
║▒ ▒║▒ ▒║         ║└─┐║┌─┐║
║   ║   ║   ==>   ║  │║│ │║
╣▒ ▒║▒ ▒║         ╣┐ │║│ │║
║ ║ ║   ║         ║│║│║│ │║
╣▒║▒ ▒ ▒║         ╣│║└─┘ │║
║ ║     ║         ║│║    │║
║▒ ▒ ▒ ▒║         ║└─────┘║
╚═══════╝         ╚═══════╝

উপরের বোর্ডে, ঘরগুলি পূরণ করতে হবে।

কেউ লক্ষ করতে পারেন যে কোষগুলির মধ্যে একটি উল্লম্ব এবং অনুভূমিক গাব রয়েছে। এটি কারণ দেয়ালগুলি যুক্ত করতে আমাকে কোষগুলির মধ্যে একটি স্থান সন্নিবেশ করতে হয়েছিল। এর অর্থ হল যে কেবলমাত্র গুরুত্বপূর্ণ কক্ষগুলি হ'ল উপরের, নীচে, বাম দিকে এবং প্রতিটি ঘরের ডানদিকে। তথ্য ক্ষতি ছাড়াই विकर्णগুলি সরানো যেতে পারে। উদাহরণস্বরূপ, নীচের বোর্ডে, উভয়ই একই ধাঁধা উপস্থাপন:

╔════╩╗         ═ ═ ╩ 
║▒ ▒ ▒║        ║▒ ▒ ▒║
║ ═══ ║           ═   
║▒ ▒ ▒║   ==   ║▒ ▒ ▒║
║     ║               
║▒ ▒ ▒║        ║▒ ▒ ▒║
╚╦════╝         ╦═ ══ 

এটি সমাধানগুলির জন্যও বৈধ। এটি হ'ল, কক্ষগুলি সংযুক্ত করার প্রয়োজন নেই:

╔════╩╗        ╔════╩╗        ╔════╩╗
║▒ ▒ ▒║        ║┌───┘║        ║┌ ─ ┘║
║ ═══ ║        ║│═══ ║        ║ ═══ ║
║▒ ▒ ▒║   ==   ║└───┐║   =>   ║└ ─ ┐║
║     ║        ║    │║        ║     ║
║▒ ▒ ▒║        ║┌───┘║        ║┌ ─ ┘║
╚╦════╝        ╚╦════╝        ╚╦════╝

উপরের উদাহরণে, উভয় সমাধান একই অর্থ same

হ্যাঁ, পরীক্ষার মামলাগুলি। এখানে তারা:

ধাঁধা ঘ

╔════╩╗        ╔════╩╗
║▒ ▒ ▒║        ║┌ ─ ┘║
║ ═══ ║        ║ ═══ ║
║▒ ▒ ▒║   =>   ║└ ─ ┐║
║     ║        ║     ║
║▒ ▒ ▒║        ║┌ ─ ┘║
╚╦════╝        ╚╦════╝

ধাঁধা 2

╔═════╗        ╔═════╗
║▒ ▒ ▒║        ║┌ ─ ┐║
║   ║ ║        ║   ║ ║
╣▒ ▒║▒║        ╣└ ┐║│║
║ ║ ║ ║   =>   ║ ║ ║ ║
╣▒║▒ ▒╠        ╣┐║│ │╠
║ ║   ║        ║ ║   ║
║▒ ▒ ▒║        ║└ ┘ │║
╚════╦╝        ╚════╦╝

ধাঁধা 3

╔════╩══╗        ╔════╩══╗
║▒ ▒ ▒ ▒║        ║┌ ┐ └ ┐║
║ ║   ║ ║        ║ ║   ║ ║
╣▒║▒ ▒║▒╠        ╣┘║└ ┐║│╠
║ ╚══ ║ ║        ║ ╚══ ║ ║
║▒ ▒ ▒ ▒╠   =>   ║┌ ─ ┘ │╠
║   ═══ ║        ║   ═══ ║
║▒ ▒ ▒ ▒║        ║│ ┌ ┐ │║
║   ║   ║        ║   ║   ║
║▒ ▒║▒ ▒║        ║└ ┘║└ ┘║
╚═══╩═══╝        ╚═══╩═══╝

ধাঁধা 4

╔═══════╗        ╔═══════╗
║▒ ▒ ▒ ▒║        ║┌ ┐ ┌ ┐║
║     ║ ║        ║     ║ ║
╣▒ ▒ ▒║▒╠        ╣│ └ ┘║└╠
║ ══╦═╩═╣        ║ ══╦═╩═╣
║▒ ▒║▒ ▒║        ║└ ┐║┌ ┐║
║   ║   ║   =>   ║   ║   ║
╣▒ ▒║▒ ▒║        ╣┐ │║│ │║
║ ║ ║   ║        ║ ║ ║   ║
╣▒║▒ ▒ ▒║        ╣│║└ ┘ │║
║ ║     ║        ║ ║     ║
║▒ ▒ ▒ ▒║        ║└ ─ ─ ┘║
╚═══════╝        ╚═══════╝

ধাঁধা 5

╔══╩══════╗        ╔══╩══════╗
║▒ ▒ ▒ ▒ ▒║        ║┌ ─ ┐ ┌ ┐║
║   ║     ║        ║   ║     ║
║▒ ▒║▒ ▒ ▒╠        ║└ ┐║└ ┘ │╠
║   ╠════ ║        ║   ╠════ ║
║▒ ▒║▒ ▒ ▒║   =>   ║┌ ┘║┌ ─ ┘║
║   ║     ║        ║   ║     ║
║▒ ▒║▒ ▒ ▒╠        ║└ ┐║└ ─ ─╠
║   ╠═════╣        ║   ╠═════╣
║▒ ▒║▒ ▒ ▒║        ║┌ ┘║┌ ─ ┐║
║   ║     ║        ║   ║     ║
║▒ ▒ ▒ ▒ ▒║        ║└ ─ ┘ ┌ ┘║
╚══╦═══╦══╝        ╚══╦═══╦══╝

ধাঁধা 6

╔═══════════╗        ╔═══════════╗
║▒ ▒ ▒ ▒ ▒ ▒║        ║┌ ┐ ┌ ┐ ┌ ┐║
║           ║        ║           ║
║▒ ▒ ▒ ▒ ▒ ▒║        ║│ └ ┘ └ ┘ │║
║       ═══ ║        ║       ═══ ║
║▒ ▒ ▒ ▒ ▒ ▒║        ║└ ┐ ┌ ─ ─ ┘║
║     ═══   ║        ║     ═══   ║
╣▒ ▒ ▒ ▒ ▒ ▒╠   =>   ╣┐ │ │ ┌ ┐ ┌╠
║           ║        ║           ║
║▒ ▒ ▒ ▒ ▒ ▒║        ║│ │ │ │ │ │║
║   ║   ║   ║        ║   ║   ║   ║
║▒ ▒║▒ ▒║▒ ▒║        ║│ │║│ │║│ │║
║   ║   ║   ║        ║   ║   ║   ║
║▒ ▒ ▒ ▒ ▒ ▒║        ║└ ┘ └ ┘ └ ┘║
╚═══════════╝        ╚═══════════╝

ধাঁধা 7

╔════╩════════╦╩╗        ╔════╩════════╦╩╗
║▒ ▒ ▒ ▒ ▒ ▒ ▒║▒║        ║┌ ─ ─ ─ ─ ─ ┐║│║
║ ║       ║   ║ ║        ║ ║       ║   ║ ║
║▒║▒ ▒ ▒ ▒║▒ ▒ ▒║        ║│║┌ ─ ─ ┐║┌ ┘ │║
║ ║ ║ ═══ ║     ║        ║ ║ ║ ═══ ║     ║
║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒╠        ║│ │║┌ ─ ┘ └ ┐ │╠
║   ║           ║        ║   ║           ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║        ║│ │ └ ┐ ┌ ┐ └ ┘║
║     ║ ║     ══╣        ║     ║ ║     ══╣
║▒ ▒ ▒║▒║▒ ▒ ▒ ▒║        ║│ └ ┐║│║│ └ ─ ┐║
║     ║ ║       ║        ║     ║ ║       ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║        ║│ ┌ ┘ │ └ ┐ ┌ ┘║
║           ║ ══╣   =>   ║           ║ ══╣
║▒ ▒ ▒ ▒ ▒ ▒║▒ ▒║        ║└ ┘ ┌ ┘ ┌ ┘║└ ┐║
╠══       ║ ╚══ ║        ╠══       ║ ╚══ ║
║▒ ▒ ▒ ▒ ▒║▒ ▒ ▒║        ║┌ ┐ └ ┐ │║┌ ─ ┘║
║     ║ ║ ║     ║        ║     ║ ║ ║     ║
║▒ ▒ ▒║▒║▒ ▒ ▒ ▒║        ║│ └ ┐║│║│ └ ─ ┐║
║ ║   ║ ║ ╔══   ║        ║ ║   ║ ║ ╔══   ║
║▒║▒ ▒ ▒ ▒║▒ ▒ ▒║        ║│║┌ ┘ │ │║┌ ┐ │║
║ ║     ║ ║     ║        ║ ║     ║ ║     ║
║▒ ▒ ▒ ▒║▒ ▒ ▒ ▒║        ║│ └ ─ ┘║└ ┘ │ │║
║       ╚══     ║        ║       ╚══     ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║        ║└ ─ ─ ─ ─ ─ ┘ │║
╚════╦═╦═╦═════╦╝        ╚════╦═╦═╦═════╦╝

ধাঁধা 8 (দুঃখিত, আমি সত্যিই এটির সমাধান নেই)

╔══╩╦══╩═══╩═╩═╩═══╩╗
║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║
║   ║               ║
╣▒ ▒║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║
║   ╚══ ╔══     ╔═══╣
╣▒ ▒ ▒ ▒║▒ ▒ ▒ ▒║▒ ▒╠
║       ║   ╔══ ║   ║
╣▒ ▒ ▒ ▒ ▒ ▒║▒ ▒ ▒ ▒╠
║           ║       ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒╠
║           ║       ║
╣▒ ▒ ▒ ▒ ▒ ▒║▒ ▒ ▒ ▒╠
║   ╔═══╗   ╚══     ║
╣▒ ▒║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒║
║   ║   ║           ║
╣▒ ▒║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒╠
║ ══╝   ║       ╔══ ║
║▒ ▒ ▒ ▒║▒ ▒ ▒ ▒║▒ ▒║
║   ══╗ ╚══ ╔══ ║   ║
╣▒ ▒ ▒║▒ ▒ ▒║▒ ▒ ▒ ▒╠
║     ║     ║   ║   ║
╣▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║▒ ▒║
║   ═══   ══╗   ║   ║
╣▒ ▒ ▒ ▒ ▒ ▒║▒ ▒ ▒ ▒╠
╠══ ║       ║   ╔══ ║
║▒ ▒║▒ ▒ ▒ ▒ ▒ ▒║▒ ▒╠
║   ╚══ ║   ║   ║   ║
╣▒ ▒ ▒ ▒║▒ ▒║▒ ▒ ▒ ▒╠
║       ║   ║       ║
║▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒ ▒║
╚══╦═══╦═══╦═╦═╦═╦═╦╝

ইনপুট

আপনার কোডের ইনপুটটিতে যতক্ষণ না এই নিয়মগুলি অনুসরণ করা হয় ততক্ষণ কোনও উপস্থাপনা থাকতে পারে:

  1. এটি অবশ্যই একটি গ্রাফিকাল ইনপুট হতে হবে। সুতরাং উদাহরণস্বরূপ কোনও সমন্বয় তালিকাটি পড়া সম্ভব নয়।

  2. অনুভূমিক দেয়াল, উল্লম্ব দেয়াল এবং দরজা অবশ্যই পৃথক হতে হবে এবং সেগুলি অবশ্যই একটি দৃশ্যমান চরিত্রের তৈরি করা উচিত (কোনও ফাঁকা অক্ষর নেই)।

  3. ঐ খালি দ্বারা প্রতিস্থাপিত হতে পারে। আমি তাদের হাইলাইট করার জন্য কেবল একটি আলাদা চরিত্র ব্যবহার করেছি।

আউটপুট

যতক্ষণ না এই নিয়মগুলি অনুসরণ করা হয় আউটপুটটিতে কোনও উপস্থাপনা থাকতে পারে:

  1. এটি অবশ্যই একটি গ্রাফিকাল আউটপুট হবে। অর্থাত্ এটিকে দেখে কেউ পথ দেখতে পাবে।

  2. নিয়ম এক নম্বর থেকে বোঝা যাচ্ছে যে পথের অক্ষরগুলি পৃথক হতে পারে। এটি হ'ল কমপক্ষে 6 টি পাথ অক্ষর থাকবে; অনুভূমিক, উল্লম্ব এবং কোণে।

  3. উত্তরটি বৈধ হওয়ার জন্য, আউটপুটটি অবশ্যই অবশ্যই সমস্ত কক্ষের (আমার উপস্থাপনায়, ) ভরাট সহ ইনপুট (স্পষ্টতই) এর মতো বোর্ড হতে হবে । কক্ষগুলির মধ্যে শূন্যস্থান পূরণ করা alচ্ছিক।

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

1 কিছু আলকাজার স্তর রয়েছে যাতে cellsচ্ছিক ঘর এবং টানেল রয়েছে। এগুলি বিবেচনা করা হবে না।

2 কিছু আলকাজার বোর্ড রয়েছে যা অসম্ভব।


2
আমার প্রোগ্রাম ধাঁধা 8 এর জন্য কোনও সমাধান খুঁজে পাচ্ছে না 8 আপনি কি নিশ্চিত যে এটি দ্রবণযোগ্য? কিছু টাইপও হতে পারে?
edc65

1
@ edc65 একই এখানে - # 8
এনজিএন

উত্তর:


5

পাইথন 3 , 809 728 723 714 693 688 684 663 657 641 639 627 610 571 569 বাইট

সম্পাদনা: @ ফিলিপ নারদী বাটিস্তার জন্য 55 টি বাইট সংরক্ষিত

টিআইওতে 60 সেকেন্ডে শেষ পরীক্ষার কেসটি চালায় না, তবে তবুও সঠিকভাবে কাজ করা উচিত। পথের জন্য স্থানাঙ্কের একটি তালিকা ফেরত দেয়। আই / ও থেকে তথ্য তালিকাগুলি পেতে প্রায় 400 টি বাইট ব্যবহার করা হয়।

A=enumerate
I,J="═║"
B=range
L=len
K=-1
Z=1,0
X=0,1
C=K,0
V=0,K
E=lambda a,b,p:(((a,b)in d)*L(p)==H*h)*p or max([E(q+a,w+b,p+[(q+a,w+b)])for q,w in y[a][b]if~-((q+a,w+b)in p)*-h>w+b>K<q+a<H]+[[]])
x=input().split("\n")
h=L(x[0])//2
H=L(x)//2
y=[[{C,Z,V,X}for i in B(h)]for j in B(H)]
d=[]
exec('d+=[(%s,i)for i,a in A(x[%s][1::2])if I<a]\nfor i,u in A(x[%s:%s:2]):\n d+=[(i,0)]*(J<u[0])+[(i,h-1)]*(J<u[K])\n for j,w in A(u[%s:%s:2]):\n  if"%s"==w:y[i][j]-={%s};y[i+%s][j+%s]-={%s}\n'*2%(0,*X,"",2,K,J,X,*X,V,H-1,K,2,K,1,"",I,Z,*Z,C))
print(max(E(*D,[D])for D in d))

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


@ হালওয়ার্ডহুমেল ভাল, চ্যালেঞ্জটির খারাপ গঠনের জন্য দুঃখিত। সুতরাং আমি নিম্নলিখিত প্রস্তাব। রান সময় দ্বারা বাইট সংখ্যা গণনা করে স্কোর গণনা করা হবে, সুতরাং রান সময় এবং বাইট উভয়ই পুরস্কৃত হবে। আপনি কি মনে করেন?
ফেলিপ ওলিনিক

1
@ ফিলিপ ওলাইনিক আমার মনে হয় না এটি খুব ভাল স্কোরিং সিস্টেম is এটিকে কোয়েড গল্ফের কাছে রাখা আরও ভাল সমাধান তবে আপনি যদি সত্যিই কোনও সমাধান খুঁজছেন তবে আমি নিশ্চিত যে এটি আরও কার্যকর হওয়ার জন্য পরিবর্তন করা যেতে পারে।
কায়ার্ড কইনিরিংহিংহ সেটিং

@ Cairdcoinheringaahing আমি বুঝতে পেরেছি যে সবচেয়ে মার্জিত সমাধানটি যেমন রয়েছে তেমন রাখা। কিন্তু একটি 8x12 ধাঁধা বোর্ড সমাধান করতে "দিন বা এমনকি কয়েক মাস" লাগে এমন একটি অ্যালগরিদম কোনওভাবে অক্ষম, আপনি কি ভাবেন না? আমি যেভাবে দেখছি, একটি অ্যালগরিদম যা কম সময়ের মধ্যে সমস্যার সমাধান করে তা পুরস্কৃত হওয়া উচিত, যদিও এটি আরও খানিকটা দীর্ঘ হয়।
ফেলিপে ওলাইনিক

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

আপনার exec(...)স্ট্রিংয়ে পাঁচটি নতুন লাইন রয়েছে \n, 5 * 2 = 10 বাইট হিসাবে উপস্থাপিত হয় । ট্রিপল-কোটেড স্ট্রিংটি ব্যবহার করে 4 বাইট যুক্ত হবে ( ...''...''...) তবে তারপরে 5 বাইট সরিয়ে ফেলবে, কারণ প্রকৃত নতুন লাইন অক্ষর ব্যবহার করা যেতে পারে। মোট এই এক বাইট সংরক্ষণ করতে পারে।
জোনাথন ফ্রেচ

5

এপিএল (ডায়ালগ ক্লাসিক) , 319 বাইট

iNj←⍳1+n←×/N←⌊2÷⍨⍴a←⎕⋄e←↑⊃,/{(,~'#='∊⍨a[(⍵⌽⍳2)∘+¨2×⍳N+⍵=⍳2])/,2,/[⍵]⊃,[⍵]/n i n}¨⍳2
r←{e g c←⍵⋄d←+/j∘.=∊g⋄e⌿⍨←(≠/c[e])∧2>⌈/d[e]⋄n≡≢g:gj/⍨d=10≡≢e:02>⌊/d+D←+/j∘.=,e:0⋄u←,¯1↑e←e[⍒⌊/D[e];]⋄e↓⍨←¯1⋄0≢r←∇e(g⍪u)(c-(-/c[u])×c=c[⊃u]):r⋄∇e g c}e(0e)j
a[1+2×⍳N]←' ??┌?─┐┬?└│├┘┴┤┼'[2⊥(↑(⊂i),¨¨{⊖∘⍉⍣⍵⊢n⍪¯1↓⌽∘⍉⍣⍵⊢i}¨⍳4)∊↓r⍪⌽r]
a

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

ক্লাসিক চরসেটে ফিট করার জন্য ইনপুট =#F7LJ<>^v.পরিবর্তে ব্যবহার করে ।═║╔╗╚╝╣╠╩╦▒

কয়েক সেকেন্ডে শেষ এক পাস বাদে সমস্ত পরীক্ষার কেস।

শেষ পরীক্ষাটি আমার কম্পিউটারে 47 মিনিট সময় নেয় এবং কোনও সমাধান দেয় না।

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


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

1
@ ফিলিপ ওলাইনিক হ্যাঁ, এটি একটি বরং অপ্রয়োজনীয় উদ্দীপনা অনুসন্ধান। এটি দ্রুত বিদ্যমান সমাধানগুলি সন্ধান করার কারণটি হ'ল এটি প্রথমে আরও বেশি সম্ভাব্য কেসটি চেষ্টা করে (গ্রাফের একটি নির্দিষ্ট প্রান্ত ছাড়াই বনাম সহ - আমার হিউরিস্টিকটি দুটি শীর্ষে অবস্থিত ডিগ্রিগুলির নূন্যতম, নিম্নতর সমান)। শেষ ক্ষেত্রে এটি মারাত্মকভাবে সম্পাদন করার কারণটি হ'ল এটি যে কোনওভাবেই সমস্ত সম্ভাবনা পরীক্ষা করে এবং কেবল সুস্পষ্ট দ্বন্দ্বের কারণে পুনরাবৃত্তি ছাঁটাই করে। সীমাবদ্ধ-ডিগ্রি (neighbors4 প্রতিবেশী) গ্রাফের বিশেষ ক্ষেত্রে এমনকি ভাল হ্যামিলটোনীয়-পথ অ্যালগরিদম বলে জানা যায় না।
ngn

3

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

মাল্টলাইন স্ট্রিং হিসাবে ইনপুট করুন, প্রতিটি লাইন একটি নতুন লাইন চরিত্রের সাথে সমাপ্ত হয়। দরজা অক্ষর '2' দিয়ে চিহ্নিত করা হয়েছে

'1 'অক্ষর দ্বারা চিহ্নিত চিহ্নিত পথটির সাথে একাধিক স্ট্রিং হিসাবে আউটপুট খুব সহজেই চিহ্নিতযোগ্য।

এটি একটি গভীরতা প্রথম অনুসন্ধান , আটকে থাকা অবস্থায় সমস্ত পাথ চেষ্টা করে এবং ব্যাকট্র্যাকিং। এটি মোটেও দক্ষ নয়, তবে 1 মিনিটেরও কম সময়গুলিতে ধাঁধা 1 .. 6 সমাধান করতে পারে।

z=>(w=z.search`
`+1,t=(w-2)*(z.length/w-1)/4,z=[...z],R=(p,l,q)=>[1,-1,w,-w].some(d=>l<t?z[q=p+d]<1&z[q+d]<1&&(R(q+d,++z[q]+l)||--z[q]):z[p+d]>1&&--z[p+d],++z[p])||--z[p],z.some((c,i)=>-c&&(x=i%w,R(i<w?i+w:x?x>w-3?i-1:i-w:i+1,--z[i])||++z[i]*0))&&z.join``.replace(/0/g,' '))

কম গল্ফড

z => (
  w = z.search`\n`+1, // board width and offset to next row
  t = (w-2)*(z.length/w-1)/4, // total size of board, number of cells that must be filled
  z = [...z], // convert string to array
  d = [1, -1, w, -w], // delta to next position in all directions
  // recursive search
  // given a current position, try to move in all directions
  // if the board is not full, look for an emoty cell
  // if the board is full, look for a door
  R = (p, // current position
       l, // fill level
       q  // parameter used as a local variable
      ) => (
        ++z[p], // mark current position
        // .some will terminate early if the called function returns true
        // in case of return true the recursive function returns all way up leaving the path marked
        // in case of return false we need to unmark path and backtrack
        d.some( d => // for each direction, offset in d
          l < t // check if board is full
          ? z[q=p+d] < 1 & z[q+d] < 1 // not full, try to advance 
            && (++z[q], // mark intermediate cell
                R(q+d, 1+l) // recursive call incrementing fill level
                || --z[q] // if R return false, backtrack: unmark intermediate cell
               )
          : z[p+d] > 1 && --z[p+d]
        ) // full, ok only if I find a door nearby
        || --z[p], // if some returns false, unmark and backtrak
  // look for doors and for each door call R 
  // when R returns true, stop and return the marked board
  // if R returns false for each door, no solution, return false
  z.some((c,i) => 
   -c && // if numeric and != 0
    (x = i%w,
     z[i]=1, // marking starting position (door)
     R(i<w ? i+w : x ? x > w-3 ? i-1 : i-w : i+1, 1)
     || (z[i] = 2, false) // if R returned false, unmark a return false
    ) 
  ) && z.join``.replace(/0/g,' ') 
)

পরীক্ষার স্নিপেটের ভিতরে একটি ডিএফএস ব্যবহার করে এমন কিছু সীমাবদ্ধতা রয়েছে যা এক মিনিটেরও কম সময়ে আমার ধাঁধা 7 সমাধান করে (আমার পিসিতে)। ধাঁধা 8 এর কোনও সমাধান নেই। সীমাবদ্ধতাসমূহ:

  • সমস্ত খালি ঘরগুলি অবশ্যই বর্তমান ঘর থেকে পৌঁছনীয় - খালি স্থানটি অবশ্যই দুটি ভাগে বিভক্ত হওয়া উচিত নয়
  • একটি পৌঁছনীয় দরজা অবশ্যই থাকতে হবে
  • কক্ষগুলির একটি কনফিগারেশন একাধিকবার অন্বেষণ করা যায় না
  • কেবলমাত্র একটি ফাঁকা সংলগ্ন ঘর রয়েছে এমন কোনও সেল এড়িয়ে যেতে পারে না

পরীক্ষা

সাবধান, 7 ধাঁধা যেকোন ব্রাউজারে জাভাস্ক্রিপ্ট সম্পাদনের সময়সীমা ছাড়িয়ে যাওয়ার জন্য (শর্ট এবং স্লো সলভার ব্যবহার করে)

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