স্যান্ডপাইল পূর্ণসংখ্যা


18

চ্যালেঞ্জ

nইনপুট হিসাবে আপনাকে ইতিবাচক পূর্ণসংখ্যা দেওয়া হবে । আউটপুটটি নীচে নির্দিষ্ট বিধিগুলিতে নির্মিত পিরামিডের মতো স্যান্ডপাইল হওয়া উচিত:

  • প্রতিটি পূর্ণসংখ্যার একই প্রারম্ভিক বিন্দু থেকে নীচের দিকে "জলপ্রপাত" হয়, যেমন বালির মতো কোনাল-আকারে পড়ে।
  • স্যান্ডপাইলটি আঘাত করলে সরাসরি নীচের সংখ্যার চেয়ে বেশি নম্বরগুলি যদি সক্ষম হয় তবে ডানদিকে পড়বে।
  • স্যান্ডপাইলটি আঘাত করলে সরাসরি তার নীচের সংখ্যার চেয়ে কম সংখ্যা বাম দিকে পড়বে, যদি সক্ষম হয়।
  • স্যান্ডপাইলটি আঘাত করলে সরাসরি নীচের সংখ্যার সমান নম্বরগুলি স্থানে থাকবে।
  • নম্বরগুলি যথাক্রমে নীচে এবং বাম / ডানে যেতে পারলে বাম / ডানে পড়তে সক্ষম হয়। অর্থাত, দিকের উপর নির্ভর করে যদি ইতিমধ্যে নীচে এবং বাম / ডানদিকে একটি নম্বর থাকে তবে বর্তমানে পতিত সংখ্যাটি সরবে না।
  • একটি নম্বর স্যান্ডপাইলটি তার পরবর্তী অবস্থানে সরিয়ে না দেওয়া বা মেঝেতে আঘাত না করা অবধি গড়িয়ে যেতে থাকবে।

মন্তব্য

প্রাথমিক তুলনা পরীক্ষাটি কেবল প্রথম সম্মুখীন পূর্ণসংখ্যার জন্য প্রযোজ্য, প্রতিটি ক্রমাগত মুখোমুখি হওয়ার জন্য নয়, কারণ এটি স্যান্ডপাইলটি ভেঙ্গে যায়।

ট্রেলিং স্পেসগুলি ঠিক আছে তবে নতুন লাইনগুলি অনুসরণ করছে না।

স্যান্ডপাইলের কাঠামো সংরক্ষণের প্রয়োজন ছাড়া আর কোনও নেতৃস্থানীয় স্পেস বা নতুন লাইন নেই।

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

আপনি ধরে নিতে পারেন ইনপুটটিতে কেবল কিছু সংমিশ্রণ থাকবে [0-9]

এটি , বাইটের মধ্যে সংক্ষিপ্ততম কোডটি মার্চের আইডিস দ্বারা বিজয়ী হিসাবে চিহ্নিত হবে

উদাহরণ

1

1


12345

35
124


54321

 13
245


555444333222111

    2
    2
    2
  135
 1345
13445


111222333444555

4
4
4
135
1235
12235


7313623030872935273465247457435345345350

    3
    3
    3
    3
    34
    355
    3644
   239475
  201277445
020373685575

555444333222111এটি কি ভুল যে তৃতীয়টি 4প্রথমটিতে পড়ে যাবে 4?
andlrc

@ দেব-নাল সংখ্যাগুলি 'গণ্ডগোল' চালিয়ে যাবে, আপনি যদি করেন, যতক্ষণ তারা সক্ষম হন - মনে রাখবেন, বৃহত্তর / কম / সমান চেক কেবল প্রথম মুখোমুখি হবে app
জারম্যাট

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6), 260 208 বাইট

s=>[...s].map(c=>a[g(n,(c>(l=a[n].slice(-1)))-(c<l))]+=c,n=s.length,a=Array(n+n).fill(''),g=(i,d)=>a[i].length>a[i+d].length?g(i+d,d):n)&&[...a[n]].map((_,i)=>a.map(c=>c?c[i]||' ':c).join``).reverse().join`\n`

সম্পাদনা: প্রথম অক্ষরটি বিশেষ কোনও ক্ষেত্রে নয় তা বুঝতে পেরে 25 বাইট সংরক্ষণ করা হয়েছে। অক্ষরের অ্যারের পরিবর্তে স্ট্রিংগুলির একটি অ্যারে ব্যবহার করে 15 বাইট সংরক্ষণ করা হয়েছে। আক্ষরিক \n(দেখানো হয়নি) ব্যবহার সহ বিবিধ ফিক্সগুলিতে 12 বাইট সংরক্ষণ করা হয়েছে । এটি পুরো 20% খাটো করে তোলে! আমি পরিত্রাণ পেতে চেয়েছিলাম reverseকিন্তু এর পরে প্রতিস্থাপন করে সঞ্চয় করতে পারার চেয়ে বেশি খরচ mapহয় replace

Ungolfed:

function sandpile(str) {
    var arr = new Array(str.length * 2); // max width of sandpile is approx. 2√n but this is close enough
    for (i = 0; i < arr.length; i++) arr[i] = '';
    for (i = 0; i < str.length; i++) {
        var digit = str[i];
        var pos = str.length; // start dropping here
        if (digit < str[pos][str[pos].length - 1]) {
            while (str[pos - 1].length < str[pos].length) pos--;
        } else if (digit > str[pos][str[pos].length - 1]) {
            while (str[pos + 1].length < str[pos].length) pos++;
        }
        str[pos] += digit; // drop the digit
    }
    var len = arr[str.length].length; // final height
    // remove the unused columns, and then pad the columns with spaces for the transpose
    for (i = 0; i < arr.length; ) {
        if (!arr[i]) arr.splice(i, 1);
        else arr[i++] += ' '.repeat(len);
    }
    ans = '';
    for (i = len; i-- > 0; ) {
        for (j = 0; j < arr.length; j++) ans += arr[j][i];
        ans += '\n';
    }
    return ans;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.