चेतन एडवेंचरर का काम करता है


12

चुनौती

आपका काम एक खौफनाक (यानी हैलोवीन) भूलभुलैया के माध्यम से एडवेंचरर एडवेचर को चेतन करना है। Adve एक है ; हालांकि, वह चरित्र तरल पदार्थ है, इसलिए वह एक अलग चरित्र द्वारा प्रतिनिधित्व किए जाने का बुरा नहीं मानता।

Adve को चेतन करने के लिए, आप प्रत्येक फ़्रेम को प्रिंट करते हैं; एक फ्रेम उसका वर्तमान स्थान के साथ नक्शा है। Adve हर मोड़ पर एक स्थान को आगे बढ़ाता है और कभी पीछे नहीं हटता है। वह पहली पंक्ति में शुरू होता है और आखिरी में समाप्त होता है।

इनपुट

किसी भी उचित प्रारूप को स्ट्रिंग की तरह एक सीमांकक या स्ट्रिंग सरणी के साथ। आप मान सकते हैं कि इनपुट 3 * 3 से अधिक का मानचित्र होगा, जिसमें केवल एक ही संभव पथ होगा। केवल मौजूद चरित्र होंगे #और

उत्पादन

तख्ते।

उदाहरण भूलभुलैया ( ठीक है ... भूलभुलैया )

इसमें Adve के बिना एक नक्शा दिया गया है; पहला और अंतिम फ्रेम यह खाली नक्शा है (यह नक्शा 9x15 है):

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

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है!

इसके लिए सटीक आउटपुट यहां (37 फ्रेम) मिल सकते हैं ।

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है!


क्या पहली और आखिरी पंक्तियों में हमेशा एक ही खाली कोशिका होगी? क्या हमेशा एक ही संभव रास्ता होगा (कोई द्विभाजन नहीं)?
लुइस मेंडो

@LuisMendo, हाँ, और वहाँ "केवल एक ही संभव रास्ता है"
डैनियल

1
क्या प्रवेश हमेशा शीर्ष पर होगा?
विनाशकारी नींबू 3

@DestructibleWatermelon, हाँ, और निकास नीचे होगा।
डैनियल

4
उसका असली नाम डेव है, लेकिन वह सब मिला हुआ है।
mbomb007

जवाबों:


4

पर्ल, 84 बाइट्स

धन्यवाद @ मुझे 30 बाइट्स से बाहर गोल्फ के लिए सही दिशा के लिए मार्गदर्शन करने के लिए सुसमाचार !

Bytecount में कोड और -0pझंडे के 82 बाइट्स शामिल हैं ।

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

ध्यान दें कि दो अंतिम स्थान हैं, और कोई अंतिम नई पंक्ति नहीं है (यह अन्यथा काम नहीं करेगा)।

इनपुट के रूप में भूलभुलैया को इससे बाहर निकलने के लिए Adve के सभी आवश्यक फ़्रेमों का आउटपुट देता है। ध्यान दें कि Adve एक के &बजाय है , क्योंकि बाद वाला utf8 नहीं है (और perl डिफ़ॉल्ट रूप से utf8 का उपयोग नहीं करता है)। इसे -0pEझंडे के साथ चलाएं :

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

बस आंखों के लिए , मैंने भी इस एनिमेटेड संस्करण को बनाया, जो थोड़ा लंबा है, लेकिन प्रत्येक प्रिंट और नींद 0.15 सेकंड के बीच टर्मिनल को साफ कर देगा, इसलिए ऐसा लगेगा कि Adve वास्तव में आगे बढ़ रहा है:

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 से अधिक बाइट्स द्वारा नीचे गिराया जा सकता है ...
टन हास्पेल

@ टॉन्होस्पेल -9 बाइट्स अब तक (मैंने हटा दिया $s="@+", मुझे पहले महसूस नहीं हुआ था कि @+केवल तभी परिवर्तित होता है जब एक सफल बीजगणित होता है। और redoइसके बजाय whileएक या दो बाइट्स बचाए जाते हैं)। कैसे इसे और अधिक गोल्फ के बारे में कोई संकेत? मुझे लग रहा है कि मुझे y///किसी तरह उन लोगों से छुटकारा पाना है , या s///कम करना है ... लेकिन किसी भी तरह से मुझे नहीं पता कि कैसे।
दादा

@ टॉन्होस्पेल्ट (लेकिन अगर आपने किसी समाधान पर काम किया है और इसे पोस्ट करना चाहते हैं, तो इसे होल्ड न करें क्योंकि यह एक ही एल्गोरिथ्म है या कुछ और, मुझे बिल्कुल भी बुरा नहीं लगेगा;))
दादा

रेगेक्स चर कैसे होते हैं या लूप में नहीं रखे जाते हैं यह बहुत सूक्ष्म है। y///जब से तुम दिशा का संकेत करने के लिए कुछ की जरूरत है ठीक है लेकिन मुख्य सुधार के संयोजन प्रतिस्थापन से आएगा (लेकिन आप चुन सकते हैं नोटिस जो तरफ)
टन Hospel

@TonHospel दरअसल, मैं इसे देखा है चाहिए, लेकिन मैं भी गठबंधन करने के लिए कोशिश कर रहा था s/ &/&A/और s/& /A&/यह देखने के लिए कि उन regex मैं गठबंधन करने की जरूरत नहीं थे एक साथ (और एक साथ के बगल में)! आपका बहुत बहुत धन्यवाद! (और मुझे यह पता लगाने के लिए धन्यवाद कि यह कैसे गोल्फ है!)
दादा

3

जावास्क्रिप्ट (ईएस 6), 137

(1 बाइट बचाया thx @ETHproductions)

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>


उह, मूर्खतापूर्ण मुझे, धन्यवाद @ETHproductions
edc65

अच्छा कार्य। मैं शायद लगभग 160 बाइट्स समाप्त कर चुका
हूं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.