খাড়া বংশ বর্জন করুন!


19

পটভূমি

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

যাইহোক, জিনিসগুলি আপনার পছন্দ মতো চলছে না। একটি ঘন কুয়াশা আপনাকে ঘিরে রেখেছে এবং অবিশ্বাস্যরূপে খারাপ-চেহারার ঝড় যতটা দ্রুত আসতে পারে। আপনি যাওয়ার পথে কোনও দড়ি ঠিক করেন নি এবং আপনার পদচিহ্নগুলি বরফে haveেকে দেওয়া হয়েছে। আপনি যদি বাঁচতে চান (অন্তত আজকের জন্য), আপনাকে যত তাড়াতাড়ি সম্ভব সেখান থেকে বেরিয়ে আসতে হবে, তবে আপনাকে প্রথমে পর্বতের কোন মুখটি অবতরণ করা উচিত তা জানার একটি উপায় খুঁজে পাওয়া উচিত।

ভাগ্যক্রমে, আপনি আপনার সাথে নিয়ে এসেছিলেন আপনার স্যাট ফোনটি যা ভ্রমণের আগে আপনি সংশোধন করেছিলেন যাতে আপনি এতে প্রোগ্রাম প্রোগ্রাম করতে এবং চালাতে সক্ষম হন।

চ্যালেঞ্জ

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

মানচিত্রগুলি কেবলমাত্র অক্ষর /এবং \(প্লাস স্পেস এবং নিউলাইন) দ্বারা তৈরি। যে কোনও মানচিত্রে, পর্বতের শীর্ষগুলি সর্বদা প্রতিনিধিত্ব করে

 /\ 
 \/ 

এবং শিখরের প্রতিটি দিক ( 1,2,3বা 4) থেকে আপনি সর্বদা পর্বতের নীচে একটি "সম্ভাব্য" পথ খুঁজে পাবেন।

1 /\ 2
3 \/ 4

রুটগুলি সর্বদা পরবর্তী উপায়ে উপস্থাপন করা হয়:

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

যেখানে প্রতিটি নতুন অক্ষর হয় তার পূর্বসূরীর বাম / ডানদিকে এক জায়গায়। প্রতিটি চরিত্রের অর্থ:

  • যদি স্ল্যাশ / ব্যাকল্যাশ এর শীর্ষে সমান্তরাল হয় -> 'খাড়া' অংশ হিসাবে গণনা করা হয়।
  • যদি স্ল্যাশ / ব্যাকস্ল্যাশ এর শীর্ষে লম্ব হয় -> 'ফ্ল্যাট' অংশ হিসাবে গণনা করা হয়।

* আরও রেফারেন্সের জন্য উপরের গ্রাফিকটি দেখুন।

দ্রষ্টব্য : উভয় পক্ষের বিভিন্ন দৈর্ঘ্য থাকতে পারে এবং শিখর গঠন করে এমন অক্ষরগুলিও তাদের পাশের অংশ হিসাবে গণনা করতে পারে। ড্রয়ের ক্ষেত্রে, আপনি যে কোনও একটি চয়ন করতে পারেন।

স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

ইনপুট

পর্বতের মানচিত্রের প্রতিনিধিত্বকারী একটি স্ট্রিং বা একই তথ্য সমেত একটি সমতল পাঠ্য ফাইল।

উভয় ক্ষেত্রেই

C:\....\file.txt

অথবা

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

স্ট্রিং হিসাবে বৈধ ইনপুট হয়।

আউটপুট

আউটপুট, হয় আপনি একটি stdout- এ প্লেইন টেক্সট অথবা দ্বারা একটি ফাইল উত্পাদন করা উচিত ক্ষুদ্রতম গড় steepness সঙ্গে দিকে হওয়া ASCII প্রফাইল উপস্থাপনা ব্যবহার _ফ্ল্যাট অংশের জন্য এবং /খাড়া অংশের জন্য গড় steepness সহ দিকে (number of "/")/(total chars)

উপরের মানচিত্রের জন্য আউটপুট উদাহরণ:

       /
   ___/
  /
  AS:0.5

আপনার প্রোফাইল এবং গড় খাড়া হওয়া ততক্ষণ বিন্যাসটি গুরুত্বপূর্ণ নয়।

স্কোরিং

কি? আপনি কি নিজের এবং আপনার বন্ধুর জীবন বাঁচানোর এবং প্রথম প্রোগ্রামার যিনি বিশ্বের শীর্ষে প্রোগ্রামিং করেছেন তার চেয়ে আরও ভাল পুরষ্কার চান? ঠিক আছে ... এটি কোড গল্ফ, তাই বাইট জেতে সংক্ষিপ্ততম প্রোগ্রাম।

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

ইনপুট:

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

আউটপুট:

       /
   ___/
  /
  AS=0.5

ইনপুট:

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

আউটপুট:

______/
AS=0.143 (1/7)

ইনপুট:

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

আউটপুট:

        /        
       /
      /       
    _/
    AS=0.8

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

6
পুনঃটুইট করুন আমি জানি না কেন আমি কেন এটি করেছি ... আপনি জানেন যে, আপনার চিন্তাগুলি যথাযথভাবে চালিয়ে নেওয়া তার পক্ষে কঠিন ...
Ioannes

আউটপুটে অন্তত খাড়া (1,2,3 বা 4) theালের সংখ্যাও কি অন্তর্ভুক্ত করা উচিত? যেমনটি দাঁড়িয়েছে, আপনি জানেন যে তাদের মধ্যে একটি অবশ্যই বিজয়ী তবে কোনটি নয়।
ভিক

1
* এই বর্ণনার সময় কোনও প্রোগ্রামার আহত হয়নি। * আমি যত্নশীল। +1
edc65

3
আপনি পছন্দ করেছেন যে আপনি সাগরমঠ :) :)
বেটা ডেসে

উত্তর:


4

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

ইকামাস্ক্রিপ্ট অনুবর্তী ব্রাউজারে স্নিপেট ঘা চালানোর পরীক্ষা করুন - অবশ্যই ফায়ারফক্স, সম্ভবত ক্রোম। টেম্পলেট স্ট্রিং, তীর ফাংশন ব্যবহার করে।

// 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>

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