রোগুয়েলিকে পাথফাইন্ডিং


21

রোগুয়েলিকে পাথফাইন্ডিং

আপনার কাজটি নীচে বর্ণিত উপাদানগুলির দ্বি-মাত্রিক অ্যারে দেওয়া হবে, যা কোনও অন্ধকারের প্রতিনিধিত্ব করে, কোনও দানব জাগ্রত না করে দুর্বৃত্তরা যে পরিমাণ সোনার টুকরোগুলি সংগ্রহ করতে পারে তার প্রতিনিধিত্ব করে এমন একক সংখ্যাকে আউটপুট বা ফিরিয়ে দেয়।

অ্যারের উপাদানগুলি নিম্নরূপ:

  1. শূন্যস্থানগুলি .একটি বা একটি স্থান দ্বারা প্রতিনিধিত্ব করা হয় , আপনার কল;
  2. রোগের প্রারম্ভিক অবস্থানটি অবশ্যই, প্রতিনিধিত্ব করে @;
  3. একটি সোনার টুকরা প্রতিনিধিত্ব করে $;
  4. দেয়াল দ্বারা প্রতিনিধিত্ব করা হয় #;
  5. দানব নিম্নলিখিত regexp থেকে অক্ষর দ্বারা প্রতিনিধিত্ব করা হয়: [a-zA-Z*&]

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

পাথফাইন্ডিংয়ের নিয়মগুলি হ'ল:

  1. দুর্বৃত্তরা কেবল খালি ঘর বা সোনার সমন্বিত কোষের মধ্য দিয়ে চলতে পারে;
  2. এটি একটি সংলগ্ন বা ত্রিভুজ সংলগ্ন কক্ষে যেতে একটি পালা লাগে;
  3. সোনা তোলা তাত্ক্ষণিক;
  4. দুর্বৃত্ত এটি জাগ্রত না করে একাধিক বারের জন্য দৈত্যের সাথে সংলগ্ন বা তির্যকভাবে সংলগ্ন থাকতে পারে না, যা নিষিদ্ধ;
  5. দুর্বৃত্ত একটি দৈত্য সময়ের কোন নম্বর, দৈত্য শুধুমাত্র জেগে উঠবে দুর্বৃত্ত দুই ব্যয় যদি সচেতনতা এলাকায় প্রবেশ করতে পারেন পরপর এটা কাছাকাছি পালাক্রমে।

ইনপুট এবং আউটপুট বিধি

দ্বিমাত্রিক অ্যারে, একটি ফ্ল্যাট অ্যারে, একটি স্ট্রিং বা অন্য যে কোনও কিছু সহ আপনি যেকোন যুক্তিসঙ্গত বিন্যাসে ইনপুট পেতে পারেন। যদি এটি আপনার জীবনকে আরও সহজ করে তোলে তবে আপনি অ্যারের মাত্রাগুলিও নিতে পারেন।

এটি গ্যারান্টিযুক্ত যে শুরুতে দুর্বৃত্তের কাছাকাছি থাকবে না।

একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন ঠিক আছে।

স্কোরিং

এটি , স্কোর হ'ল কম জমা হওয়ার সাথে আপনার জমা দেওয়ার বাইটস গণনা।

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

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

1)
@..
.$.
...  -> 1

শুধু একটি বিবেক পরীক্ষা।

2)
@....
...g$
.....  -> 0

আবার, একটি বিবেক পরীক্ষা।

3)
@....
...$g
.....  -> 1

দুর্বৃত্ত বাম দিক থেকে সোনার দখল করতে পারে।

4)
@....g..
.......$
........
.....h..  -> 1

দুর্বৃত্তদের মধ্যে দুর্বৃত্তরা জিগ-জাগ করতে পারে, প্রতিটির কাছাকাছি সময়ে একাধিক বারের জন্য কখনই না থাকে।

5)
@....z..
.......$
.....b..  -> 0

পূর্ববর্তী পরীক্ষার কেস থেকে কৌশলগুলি এখানে কাজ করে না - দানব সংবেদনশীলতা অঞ্চলগুলি ওভারল্যাপ করে।

6)
@$#.
###$
....  -> 1

বিবেক পরীক্ষা।

7)
@..#..
$.$g.$
...#..  -> 2

পূর্বোক্ত।

8)
@#.d#$
$...##
e.....
..$...
##..$b
.#..g$  -> 3

এখানকার সমস্ত সোনার মধ্যে কেবল তিনটিই নিরাপদে পৌঁছে যেতে পারে: প্রারম্ভিক অবস্থানের নিকটবর্তী সোনারটি একটি নীচে এবং তারপরে আবার শুরুর অবস্থানে ফিরে পাওয়া যায়। উপরের বাম কোণ থেকে অব্যাহতি পেতে দুর্বৃত্তকে তির্যকভাবে নীচে-ডানদিকে দু'বার সরতে হবে। মাঝের সোনার কোনও চ্যালেঞ্জ নেই। বাইরের সোনার দ্বারা রক্ষিত gএবং bমাঝারি সোনার ডানদিকে এবং পরে পিছনে স্থান থেকে তির্যকভাবে সরানো যায়। বাকিটি পাওয়া যায় না: শীর্ষ-ডান স্বর্ণটি দেয়ালগুলি দ্বারা অবরুদ্ধ করা হয়েছে, এবং নীচে-ডান স্বর্ণের দৈত্য সংবেদনশীলতার ক্ষেত্রে দুটি পালা দরকার।

নিম্নলিখিত পরীক্ষার ক্ষেত্রে mbomb007 দ্বারা উদারভাবে দান করা হয়েছিল।

9)
  12345678
a @....g.D
b .......$
c ......#.
d .....h..  -> 1

এই এক কঠিন। একটি পথ b4-b5-c6-b7-c8-b8(grab)

10)
  12345678
a @....g.D
b .......$
c .......#
d .....h..  -> 1

একটি পথ [bc]4-c5-b6-c7-b8(grab)

11)
  12345678
a @....g.D
b ......#$
c .......#
d .....h..  -> 1

অতিরিক্ত প্রাচীর আসলে কিছুই পরিবর্তন করে না, [bc]4-c5-b6-c7-b8(grab)এটি এখনও একটি সমাধান।


আপনার আরও বৃহত্তর এবং জটিল উদাহরণ যুক্ত করা উচিত। এছাড়াও, অন্ধকূপটির সর্বনিম্ন এবং সর্বাধিক মাত্রা কী কী? 1x1 অন্ধকূপটি কি @বৈধ ইনপুট?
mbomb007


@ mbomb007 আমি একটি নতুন উদাহরণ যুক্ত করেছি। গ্রিডের আকার হিসাবে, আমি কমপক্ষে 3x3 এ সীমাবদ্ধ করা যুক্তিযুক্ত বলে মনে করি।
মিশেল

@ mbomb007 মন আমি যদি আপনার উদাহরণগুলি সম্পাদনা করি? তারা, একবার বোঝে, যুক্তিটি খুব ভালভাবে প্রদর্শন করে।
মিশেল

মুক্ত মনে. এটাই আমি তাদের জন্য তৈরি করেছিলাম। এটি লক্ষণীয়ও হতে পারে যে কোনও পরীক্ষার কেস ঘোরানোর ফলে তার ফলাফলের কোনও প্রভাব থাকতে পারে না।
mbomb007

উত্তর:


5

পূর্ববর্তী সমাধানগুলি (সেগুলির একটি অংশ) টিও লিঙ্কের পাদদেশের পাত্রে পাওয়া যাবে (এগুলি সম্ভবত আরও পাঠযোগ্য)

জাভাস্ক্রিপ্ট (নোড.জেএস) , 883 436 411 360,345 311 বাইট

g=>g.map((r,y)=>[...r].map((c,x)=>A+=c=="$"&&P(g,x,y)),A=0)|A
P=(g,x,y,m={},p={},I=i=9,M={})=>{if(/[.$]/.test(c=(g[y]||0)[x])){for(;i--;)if(/^[^.@$#]$/.test(C=(g[y+~-(i/3)]||0)[x+i%3-1])){if(m[C])return
M[C]=1}for(;I--;)if(!p[(X=x+~-(I/3))+","+(Y=y+I%3-1)]&&P(g,X,Y,M,{...p,[x+","+y]:1}))return 1}return c=="@"}

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

ব্যাখ্যা -

প্লেয়ার থেকে নগদে যাওয়ার পরিবর্তে আমি কেস থেকে @ এ গিয়েছি। আমি মনে করি আমার দ্রুত হওয়া উচিত কারণ আমি জানি কখন সন্ধান বন্ধ করা উচিত (@ এ পৌঁছানো) এবং আপনি যখন নগদ সন্ধান করেন তখন আপনি সমস্ত দাগ (এবং সেগুলিতে যাওয়ার উপায়গুলি) কভার না করা পর্যন্ত আপনাকে সর্বদা চলতে হবে। সুতরাং আলগোটি সেভাবে বেশ সহজ - মূল ফাংশন g.map((r,y)=>[...r].map((c,x)=>A+=c=="$"&&P(g,x,y)),A=0)|A: নগদ সন্ধান করুন -> যদি আপনি এটি পেলেন -> প্লেয়ারের সন্ধান শুরু করুন -> আপনি যদি তাকে খুঁজে পান -> বর্ধনশীল এ এখন পাথ সন্ধানকারী ওরফে পি-তে পৌঁছে দেয় if(/[.$]/.test(c=(g[y]||[])[x]))কিনা ঠিক তা পরীক্ষা করে দেখুন বর্তমান ঘরটি "বিশেষ" -> যদি তাই হয় তবে আমরা যদি খেলোয়াড় হয়ে থাকে তবে আমরা ফিরতে চাই। বিশেষ ক্ষেত্রে: @ # (দানব)

for(;i--;) if(/^[a-zA-Z*&]$/.test(C=(g[y+~-(i/3)]||0)[x+i%3-1])) -> if my neighbor is a monster {if(m[C])return false -> and it already was in the previous turn - this path is not value M[C]=1} -> if not just add it to the neighbors monsters for(;I--;) if(!p[(X=x+~-(I / 3))+","+(Y=y+I%3-1)]&&P(g,X,Y,M,{...p,[x+","+y]:1}))return true আবার প্রতিবেশীদের পুনরাবৃত্তি করুন - আমি যদি ইতিমধ্যে না থাকি (পি পথটি নেওয়া হয়) চালিয়ে যান (পি কল করুন)


দুর্দান্ত গল্ফিং! কয়েকটি জিনিস আমি লক্ষ্য করেছি: (1) আপনার কোডে 2 য় এবং 7 তম লাইনে অতিরিক্ত জলছবি বিশিষ্ট স্থান রয়েছে এবং বেশিরভাগ লাইন ব্রেকগুলি অযথা (কেবলমাত্র 1 এবং 6 লাইনের একটি বিরতি প্রয়োজন), এবং I / 3অকারণে স্থান রয়েছে। যে সাদা জায়গাটি বাদ দিন এবং আপনার স্কোরটি আসলে 324! (২) return true হতে পারে return 1(সত্যবাদী মান) এবং return falseসহজেই হতে পারে return(বোঝানো undefined, একটি মিথ্যা মান)। (৩) ^[^.@$#]$কোনও নন-দানবকে ^[a-zA-Z*&]$পরীক্ষা করার জন্য রেজেক্সটি দৈত্যদের জন্য যাচাই করার চেয়ে ছোট । চমৎকার কাজ!
অ্যাপসিলাররা

হ্যাঁ আমি জানি আমি এটিকে আরও খাটো করতে পারি :)
ড্যানিয়েলইন্ডি

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