অ্যাডভেঞ্চারার প্রাণবন্ত


12

চ্যালেঞ্জ

আপনার কাজ হ'ল অ্যাডভেঞ্চারারকে একটি ভঙ্গুর (অর্থাত্ হ্যালোইন) বিভ্রান্তির মধ্য দিয়ে চলাচল করা। অ্যাডভে ক ; তিনি চরিত্রের তরল, যদিও, তাই কোনও ভিন্ন চরিত্রের দ্বারা তাকে উপস্থাপন করতে আপত্তি নেই।

অ্যাডভ অ্যানিমেট করতে, আপনি প্রতিটি ফ্রেম মুদ্রণ করেন; একটি ফ্রেম এটিতে তার বর্তমান অবস্থান সহ মানচিত্র। অ্যাডভ প্রতিটি প্রতিটিতে একটি স্থান এগিয়ে নিয়ে যায় এবং কখনই ব্যাকট্র্যাক হয় না। তিনি প্রথম সারিতে শুরু করেন এবং শেষে শেষ করেন।

ইনপুট

ডিলিমিটার বা স্ট্রিং অ্যারের সাথে স্ট্রিংয়ের মতো কোনও যুক্তিসঙ্গত বিন্যাস। আপনি ধরে নিতে পারেন ইনপুটটি 3 * 3 এর চেয়ে বেশি একটি মানচিত্র হবে, কেবলমাত্র একটি সম্ভাব্য পথ রয়েছে। কেবলমাত্র উপস্থিত চরিত্রগুলি হবে #এবং

আউটপুট

ফ্রেম।

গোলকধাঁধার উদাহরণ ( ঠিক আছে ... গোলকধাঁধা )

এটিতে অ্যাডভ ছাড়াই এখানে একটি মানচিত্র রয়েছে; প্রথম এবং শেষ ফ্রেমগুলি হ'ল এই খালি মানচিত্র (এই মানচিত্রটি 9x15):

### #####
##  #####
## ######
##      #
####### #
#   ### #
# # #   #
# #   ###
# #######
#    ####
#### ####
####  ###
##### ###
##### ###
##### ###

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

এর জন্য সঠিক ফলাফলটি এখানে পাওয়া যাবে (37 ফ্রেম)।

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


প্রথম এবং শেষ সারিতে সর্বদা একক খালি ঘর থাকবে? সবসময় কি কোনও একক সম্ভাব্য পথ থাকবে (কোনও দ্বিখণ্ডিতকরণ নেই)?
লুইস মেন্ডো

@ লুইস মেন্দো, হ্যাঁ, এবং "একমাত্র সম্ভাব্য পথ" আছে
ড্যানিয়েল

1
প্রবেশদ্বার কি সর্বদা শীর্ষে থাকবে?
ধ্বংসাত্মক লেবু

@ আবিষ্কারযোগ্য জলছবি, হ্যাঁ, এবং প্রস্থানটি নীচে থাকবে।
ড্যানিয়েল

4
তার আসল নাম ডেভ, তবে সে সব মিলিয়ে গেছে।
mbomb007

উত্তর:


4

পার্ল, 84 বাইট

ধন্যবাদ 30 টু হসপেল আমাকে প্রায় 30 বাইট আউট গল্ফের সঠিক দিকের দিকে পরিচালিত করার জন্য!

বাইটকাউন্টে কোড এবং -0pপতাকাগুলির 82 বাইট অন্তর্ভুক্ত রয়েছে ।

/.*/;say y/A/ /r;s/&(.{@{+}})? /A$1&/s||s/ (.{@{+}})?&/&$1A/s||s/ /&/?redo:y;A&;  

মনে রাখবেন যে দুটি চূড়ান্ত স্পেস রয়েছে এবং কোনও চূড়ান্ত নিউলাইন নেই (এটি অন্যথায় কাজ করবে না)।

গোলকধাঁধাকে ইনপুট হিসাবে নেয় কারণ এ্যাডভের বাইরে বেরিয়ে আসার জন্য প্রয়োজনীয় সমস্ত ফ্রেমগুলি আউটপুট দেয়। নোট করুন যে অ্যাডভেভ একটি &পরিবর্তে একটি , যেহেতু পরেরটি ইউটিএফ 8 নয় (এবং পার্ল ডিফল্টরূপে utf8 ব্যবহার করে না)। -0pEপতাকা সহ এটি চালান :

perl -0pE '/.*/;say y/A/ /r;s/&(.{@{+}})? /A$1&/s||s/ (.{@{+}})?&/&$1A/s||s/ /&/?redo:y;A&;  ' <<< "### #####
##  #####
## ######
##      #
####### #
#   ### #
# # #   #
# #   ###
# #######
#    ####
#### ####
####  ###
##### ###
##### ###"

কেবলমাত্র চোখের জন্য , আমি এই অ্যানিমেটেড সংস্করণটিও তৈরি করেছিলাম, এটি কিছুটা দীর্ঘ but

perl -0nE 'system(clear);/.*/;say y/A/ /r;select($,,$,,$,,0.15);s/&(.{@{+}})? /A$1&/s||s/ (.{@{+}})?&/&$1A/s||s/ /&/?redo:say"\e[H",y/A&/  /r' <<< "### #####
##  #####
## ######
##      #
####### #
#   ### #
# # #   #
# #   ###
# #######
#    ####
#### ####
####  ###
##### ###
##### ###"

আমি মনে করি এটি সেরা অ্যালগরিদম তবে এটি এখনও 20 বাইটেরও বেশি দ্বারা কমে যেতে পারে ...
টন হসপেল

টনহোস্পেল -৯ বাইট এখনও অবধি (আমি সরিয়ে ফেললাম $s="@+", আমি আগে বুঝতে পারি নি যে @+কেবলমাত্র একটি সফল রেজেক্স হলেই পরিবর্তন করা হয়েছে And এবং redoতার পরিবর্তে whileএক বা দুটি বাইট সংরক্ষণ করা হবে)। এটি আরও গল্ফ কিভাবে সম্পর্কে কোন ইঙ্গিত? আমি অনুমান করছি আমাকে y///কোনওভাবে সেগুলি থেকে মুক্তি দিতে হবে , বা আরও s///ছোট করতে হবে ... তবে কোনওভাবেই আমি জানি না কীভাবে।
দাদা

@ টনহসপেল (তবে আপনি যদি কোনও সমাধানে কাজ করেন এবং এটি পোস্ট করতে চান তবে এটি ধরে রাখবেন না কারণ এটি একই অ্যালগরিদম বা অন্য কিছু, আমি কিছুতেই আপত্তি করব না;))
দাদা

কীভাবে রেজেক্স ভেরিয়েবলগুলি লুপগুলিতে রাখা হয় না বা রাখা হয় না তা খুব সূক্ষ্ম। y///যেহেতু আপনি দিক নির্দেশ করে কিছু প্রয়োজন জরিমানা কিন্তু প্রধান উন্নতি মিশ্রন বদল থেকে আসবে (কিন্তু আপনি বেছে নিতে লক্ষ্য যা পার্শ্ব দিকে)
টন Hospel

@ টনহসপেল সত্যই, আমার এটি দেখা উচিত ছিল, তবে আমি একত্রিত করার জন্য s/ &/&A/এবং s/& /A&/একসাথে (এবং এর পরের একসাথে) চেষ্টা করার চেষ্টা করছিলাম যে সেগুলি আমার একত্র করার দরকার ছিল না! অনেক ধন্যবাদ! (এবং এটি কীভাবে গল্ফ করতে হয় তা আমাকে জানতে দেওয়ার জন্য ধন্যবাদ!)
দাদা

3

জাভাস্ক্রিপ্ট (ES6), 137

(1 বাইট সংরক্ষিত thx @ETH প্রোডাকশন)

m=>(o=>{for(p=m.search` `-o,r=[m];[d,o/d,-o/d].some(q=>1/m[d=q,q+=p]?p=q:0);r.push(q.join``))(q=[...m])[p]=0})(d=1+m.search`
`)||[...r,m]

কম গল্ফড

m=>{
  d = o = 1+m.search`\n`; // offset to next row and starting direction
  p = m.search` `-o; // starting position, 1 row above the first
  for( r=[m]; // r is the output array, start with empty maze
       // try moving in 3 directions (no back)
       // if no empty cell found, we have exit the maze
       [d,o/d,-o/d].some(q => 1/m[d=q,q+=p]? p=q : 0);
       r.push(q.join``) // add current frame
     )
     q=[...m], q[p] = 0; // build frame, '0' used to mark Adve position
  return [...r,m] // add last frame with maze empty again
}

পরীক্ষা

F=
m=>(o=>{for(p=m.search` `-o,r=[m];[d,o/d,-o/d].some(q=>1/m[d=q,q+=p]?p=q:0);r.push(q.join``))(q=[...m])[p]=0})(d=1+m.search`\n`)||[...r,m]

function go() {
  var i=I.value,r=F(i),
      frame=x=>(x=r.shift())&&(O.textContent=x,setTimeout(frame,100))
  frame()
}

go()
#I { width:10em; height: 19em; font-size:10px}
#O { white-space:pre; font-family: monospace; font-size:10px; vertical-align: top; padding: 4px}
<table><tr><td>
<textarea id=I>### #####
##  #####
## ######
##      #
####### #
#   ### #
# # #   #
# #   ###
# #######
#    ####
#### ####
####  ###
##### ###
##### ###
##### ###
</textarea><button onclick='go()'>go</button></td><td id=O></td></tr></table>


আহ, নির্বোধ আমাকে, ধন্যবাদ @
ইথ

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