Sandpile पूर्णांक


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

@ dev-null नंबर 'टंबल' के लिए जारी रहेंगे, यदि आप करेंगे, तो जब तक वे सक्षम हैं - याद रखें, अधिक / कम / बराबर चेक केवल पहली मुठभेड़ पर लागू होता है।
CzarMatt

जवाबों:


4

जावास्क्रिप्ट (ईएस 6), 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 बाइट्स सहेजे गए। शाब्दिक फिक्स में 12 बाइट्स सहेजे गए हैं, जिसमें शाब्दिक \n(दिखाया नहीं गया) का उपयोग करना शामिल है । यह इस पूरे 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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.