लूट के लिए बढ़ रहा है


12

परिचय

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

स्फिंक्स का कहना है, "स्फिंक्स कहते हैं," जैसे कि बक्से ओवरलैप होते हैं, और वे बक्से या तो जोड़ या गुणा के माध्यम से विलय कर देंगे। जब एक बॉक्स रहेगा, तो इसका मूल्य सोने के सिक्कों में आपका इनाम होगा। "

कार्य

आपको एक प्रोग्राम या फ़ंक्शन लिखना चाहिए जो एक सूची / सरणी / जो भी आठ प्राकृतिक संख्याओं के इनपुट के रूप में लेता है, और 'क्रीज' संचालन की एक श्रृंखला के माध्यम से प्राप्त होने वाले अधिकतम संभव इनाम देता है।

यांत्रिकी

'क्रीज' ऑपरेशन कुछ संख्या में कोशिकाओं पर किया जाता है, और +या तो *ऑपरेटर के रूप में। सूची की पहली n कोशिकाओं को संचालक के उपयोग से अपने गंतव्य कोशिकाओं के साथ जोड़ दिया जाता है। मर्ज ऑपरेशन में जिन कोशिकाओं का सेवन नहीं किया जाता है, उन्हें असंशोधित छोड़ दिया जाता है।

यहाँ n = 3 कोशिकाओं का उपयोग करते हुए एक उदाहरण दिया गया है:

यहाँ छवि विवरण दर्ज करें

इसके अलावा का उपयोग करना, जो इस में परिणाम होगा:

यहाँ छवि विवरण दर्ज करें

या गुणन, जिसके परिणामस्वरूप यह होगा:

यहाँ छवि विवरण दर्ज करें

नोट: सादगी के लिए, 1 से कम सेल के साथ घटाना बंद कर दिया जाता है, जैसा कि सूची की लंबाई से अधिक या उसके बराबर कई सेल के साथ घट रहा है। हालाँकि, एक सूची इसके आधे से अधिक सेल काउंट से बढ़ सकती है।

8 कोशिकाओं की एक सूची 5 से बढ़ाई जा सकती है, जिसके परिणामस्वरूप लंबाई 5 की एक नई सूची होगी: ऑपरेटर [0,1,2,3,4,5,6,7]द्वारा उपयोग की जाने वाली 5 कोशिकाओं द्वारा वृद्धि की +जाएगी [9,9,9,1,0]

स्कोरिंग

मानक कोड गोल्फ नियम - वह कोड जो सही आउटपुट उत्पन्न करता है और जिसमें सबसे कम संख्या में बाइट्स होती हैं।

बोनस: यदि आपका कोड भी क्रीज ऑपरेशंस के अनुक्रम / रिटर्न को प्रिंट करता है जो अधिकतम इनाम की ओर जाता है, तो अपने स्कोर को 0.8 से गुणा करें। उदाहरण आउटपुट दिख सकता है:

crease 5 +
crease 2 *
crease 2 +
crease 1 *

उदाहरण

इन इनपुट और परिणामों का उपयोग करके अपने कोड का परीक्षण करें input - maximum reward:

[0, 1, 2, 3, 4, 5, 6, 7] - 7560
[0, 9, 0, 3, 2, 6, 1, 5] - 1944
[0, 1, 0, 3, 0, 2, 0, 4] - 36
[6, 0, 9, 1, 9, 0, 7, 3] - 11907
[0, 5, 2, 0, 1, 3, 8, 8] - 2560

"स्कोरिंग" शीर्षक के अंतर्गत उदाहरण आउटपुट अमान्य है। 5 और 2 के घटने के बाद केवल 3 कोशिकाएँ बची हैं, इसलिए 3 का बढ़ना कोई मतलब नहीं है।
हाथ-ई-फूड

अच्छी बात। मैं इसे बदल दूंगा।
फॉस्जीन

जवाबों:


2

पायथ, 31 बाइट्स

Le+bSyMsm,sMJ.T,_<bd>bdm*FkJtUb

यह एक फ़ंक्शन को परिभाषित करता है y, जो क्रीज मान की गणना करता है।

प्रदर्शन।

यह पुनरावर्ती विधि का उपयोग करता है, हर संभव उत्तराधिकारी के स्कोर का अधिकतम लेता है।

पुनरावृत्ति का आधार मामला संभावित उत्तराधिकारियों के सॉर्ट किए गए मानों के इनपुट को समवर्ती करके और फिर परिणामी सूची के अंत में लागू किया जाता है। यदि इनपुट में केवल 1 तत्व है, तो कोई उत्तराधिकारी नहीं हैं, और इसलिए सूची का अंत इनपुट में एक तत्व है।


यह सोच पाना कठिन है। शायद सीजेएम के पास मौका है?
फॉस्जीन

2

सी #, 275 272 बाइट्स

यह बस एक पुनरावर्ती कार्य है जो प्रत्येक शाखा को पीछे छोड़ता है और सर्वश्रेष्ठ स्कोर देता है।

स्पष्टता के लिए प्रस्तुत:

using M=System.Math;
int F(int[]n){
    int b=0,g,h,i=0,j,k,l=n.Length;
    if(l<2)
        return n[0];
    for(;++i<l;){
        int[]m=new int[k=M.Max(i,l-i)],o=new int[k];
        for(j=0;j<k;j++){
            m[j]=((g=i-j-1)<0?0:n[g])+((h=i+j)<l?n[h]:0);
            o[j]=h<l&g>=0?n[g]*n[h]:m[j];
        }
        b=M.Max(b,M.Max(F(m),F(o)));
    }
    return b;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.