सबसे कम वंश से बचें!


19

पृष्ठभूमि

कुछ महीने पहले, आपके जीवन का रोमांच बस शुरू होने वाला था। अब, इस सटीक क्षण में (हाँ, अब), महीनों की पीड़ा और कड़ी मेहनत के बाद, आप और दोस्तों का एक समूह दुनिया के शीर्ष पर खड़ा है। हां, आप सही हैं, आप सागरमठ के शिखर पर हैं ।

हालाँकि, चीज़ें वैसी नहीं हो रही हैं जैसी आप चाहते हैं। एक घने कोहरे ने आपको घेर लिया है और एक अविश्वसनीय रूप से बुरा दिखने वाला तूफान जितनी तेजी से आ रहा है। आपने रास्ते में किसी भी रस्सी को ठीक नहीं किया, और आपके पैरों के निशान बर्फ में ढँक गए हैं। यदि आप जीवित रहना चाहते हैं (कम से कम आज के लिए), तो आपको जितनी जल्दी हो सके वहाँ से बाहर निकलने की आवश्यकता है, लेकिन आपको सबसे पहले यह जानने का एक तरीका खोजना चाहिए कि पहाड़ का कौन सा चेहरा है जिसे आपको उतरना चाहिए।

सौभाग्य से, आप अपने साथ अपना सत फोन लेकर आए थे जिसे आपने यात्रा से पहले संशोधित किया था ताकि आप इसमें प्रोग्राम कर सकें और उसे निष्पादित कर सकें।

चुनौती

आप अपने फोन को ASCII- पुराने जमाने के अपठनीय-ऑन-द-टॉप-ऑफ-द-वर्ल्ड तरीके से पहाड़ का नक्शा डाउनलोड करने में सक्षम हैं। आपका काम यह तय करना है कि पहाड़ का कौन सा चेहरा सबसे आसान वंश प्रस्तुत करता है ताकि आप जीवित रहने की संभावना बढ़ा सकें। ऐसा करने के लिए, आपके पास अपने फोन पर एक प्रोग्राम कोड करने का शानदार विचार है जो बताएगा कि सबसे आसान तरीका कौन सा है। (अस्वीकरण: ये गतिविधियाँ पेशेवरों द्वारा की गई हैं। इस कथन के दौरान कोई भी प्रोग्रामर आहत नहीं हुआ था। कृपया, इसे घर पर आज़माएँ नहीं।)

नक्शे केवल पात्रों /और \(प्लस रिक्त स्थान और नए अंक) से बने होते हैं। किसी भी मानचित्र में, पहाड़ के शिखर को हमेशा से दर्शाया जाता है

 /\ 
 \/ 

और शिखर के प्रत्येक पक्ष ( 1,2,3या 4) से आपको हमेशा पहाड़ के नीचे एक "संभव" रास्ता मिलेगा।

1 /\ 2
3 \/ 4

मार्गों को हमेशा अगले तरीके से प्रस्तुत किया जाता है:

                      \
  Steep-> /          /
           /        / <-Flat
            /      \
      Flat-> \    \
              /  \ <-Steep
               /\
               \/

जहाँ प्रत्येक नया वर्ण अपने पूर्ववर्ती के बाएँ / दाएँ का एक स्थान होता है। प्रत्येक वर्ण का अर्थ है:

  • यदि स्लैश / बैकलैश इसके शिखर पक्ष के समानांतर है -> एक 'खड़ी' भाग के रूप में गिना जाता है।
  • यदि स्लैश / बैकस्लैश इसके शिखर की ओर लंबवत है -> 'फ्लैट' भाग के रूप में गिना जाता है।

* आगे के संदर्भ के लिए ऊपर ग्राफिक देखें।

नोट : पक्षों की अलग-अलग लंबाई हो सकती है और शिखर का गठन करने वाले वर्ण भी उनके पक्ष के हिस्से के रूप में गिने जाते हैं। ड्रॉ के मामले में, आप उनमें से कोई भी चुन सकते हैं।

मानक खामियों को अस्वीकार कर दिया जाता है।

इनपुट

पहाड़ या एक सादे पाठ फ़ाइल के नक्शे का प्रतिनिधित्व करने वाली एक स्ट्रिंग जिसमें एक ही जानकारी होती है।

भी

C:\....\file.txt

या

                  \
      /          /
       /        /
        /      \
         \    \
          /  \
           /\
           \/
          \  /
         \    \
        \      \
       \        \
      /          /

एक स्ट्रिंग के रूप में मान्य इनपुट हैं।

उत्पादन

उत्पादन के रूप में, आप या तो एक stdout सादे पाठ में या द्वारा एक फ़ाइल प्रस्तुत करना चाहिए छोटी से छोटी औसत ढलवाँपन के साथ कंधे से ASCII प्रोफ़ाइल प्रतिनिधित्व का उपयोग कर _फ्लैट भागों के लिए और /खड़ी भागों के लिए औसत ढलवाँपन के साथ पक्ष की (number of "/")/(total chars)

ऊपर दिए गए नक्शे का आउटपुट उदाहरण:

       /
   ___/
  /
  AS:0.5

जब तक आपके पास प्रोफ़ाइल और औसत स्थिरता नहीं है, तब तक प्रारूप महत्वपूर्ण नहीं है।

स्कोरिंग

क्या? क्या आप अपने और अपने दोस्त के जीवन को बचाने और दुनिया के शीर्ष पर प्रोग्राम करने वाले पहले प्रोग्रामर होने से बेहतर इनाम चाहते हैं? ठीक है ... यह कोड गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा कार्यक्रम है।

परीक्षण के मामलों

इनपुट:

                  \
      /          /
       /        /
        /      \
         \    \
          /  \
           /\
           \/
          \  /
         \    \
        \      \
       \        \
      /          /

आउटपुट:

       /
   ___/
  /
  AS=0.5

इनपुट:

                  /
      \          /
       /        /
        \      /
         \    /
          /  /
           /\
           \/
          \  /
         \    \
        \      \
       \        \
      /          /
     / 
    / 

आउटपुट:

______/
AS=0.143 (1/7)

इनपुट:

           /        \
            \      \
             /    /
              /  \
               /\
               \/
              \  /
             \    /
            \      /
           /        \

आउटपुट:

        /        
       /
      /       
    _/
    AS=0.8

उदाहरणों के आधार पर, ऐसा लगता है कि यदि आप इसे बाएं से दाएं पढ़ते हैं, तो प्रोफ़ाइल नीचे से ऊपर की दिशा में रास्ता दिखाता है? कुछ हद तक असामान्य लगता है, क्योंकि हम ऊपर से नीचे जा रहे हैं, लेकिन कोई समस्या नहीं है अगर यह स्पष्ट रूप से इस तरह से परिभाषित किया गया है।
रेटो कोराडी

6
@RetoKoradi आप सही हैं। मुझे नहीं पता कि मैंने इसे इस तरह क्यों किया ... आप जानते हैं, उस क्रम में अपने विचारों को रखने के लिए अपनी मेहनत ...
Ioannes

क्या आउटपुट में ढलान की संख्या भी शामिल है जो सबसे कम खड़ी है (1,2,3 या 4)? जैसा कि यह खड़ा है, आप जानते हैं कि उनमें से एक निश्चित रूप से विजेता है लेकिन कौन सा नहीं।
विक

1
* इस कथन के दौरान किसी भी प्रोग्रामर को चोट नहीं पहुंची। * मुझे परवाह है। +1
edc65

3
मुझे यह पसंद है कि आपने सागरमाथा का उपयोग किया :)
बीटा

जवाबों:


4

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

EcmaScript कंप्लेंट ब्राउज़र में स्निपेट ब्लो चलाने वाला टेस्ट - निश्चित रूप से फ़ायरफ़ॉक्स, शायद क्रोम। टेम्पलेट स्ट्रिंग्स का उपयोग करना, तीर फ़ंक्शन।

// Golfed, no indentenation, all newlines are significant

f=s=>(s=`
${s}
`.split`
`,s.map((r,i)=>~(q=r.search(/\/\\/))&&(y=i,x=q),x=y=0),z=[],[0,2,0,2].map((d,i)=>{t=x+i%2,u=y+i/2|0,b=s[u][t];for(p=[''],n=l=0;(c=s[u][t])>' ';++l,t+=d-1,u+=(i&2)-1)c==b?p.push(p[n++].replace(/./g,' ',w='/')):w='_',p=p.map((r,i)=>(i<n?' ':w)+r);z=z[0]<(p[0]=n/l)?z:p}),z.join`
`)

// Less golfed

U=s=>(
  s=(`\n${s}\n`).split`\n`,
  x = y = 0,
  s.map((r,i)=>~(q=r.search(/\/\\/))&&(y=i,x=q)),
  z=[],
  [0,2,0,2].map((d,i) => {
    t = x+i%2,
    u = y+i/2|0,
    b = s[u][t];
    for(p=[''], n=l=0; (c=s[u][t])>' '; ++l, t += d-1, u +=(i&2)-1)
      c == b
        ? p.push(p[n++].replace(/./g,' ',w='/'))
        : w='_',
      p = p.map((r,i) => (i<n?' ':w)+r);
    z = z[0]<(p[0]=n/l)?z:p
  }),
  z.join`\n`
)

// TEST
// redirect console into the snippet body
console.log=x=>O.innerHTML+=x+'\n'

maps=[ // as javascript string literals, each baskslasch has to be repeated
`                  \\
      /          /
       /        /
        /      \\
         \\    \\
          /  \\
           /\\
           \\/
          \\  /
         \\    \\
        \\      \\
       \\        \\
      /          /`,
`                  /
      \\          /
       /        /
        \\      /
         \\    /
          /  /
           /\\
           \\/
          \\  /
         \\    \\
        \\      \\
       \\        \\
      /          /
     / 
    / `,
`           /        \\
            \\      \\
             /    /
              /  \\
               /\\
               \\/
              \\  /
             \\    /
            \\      /
           /        \\`]

maps.forEach(m=>console.log(m + '\n'+ f(m) +'\n'))
<pre id=O></pre>

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