"आपको अतिरिक्त तोरणों का निर्माण करना चाहिए!"


28

परिचय

रणनीति गेम स्टारक्राफ्ट 2 में, चुनने के लिए तीन "दौड़" हैं: टेरान, ज़र्ग, और प्रोटॉस। इस चुनौती में हम Protoss और प्रतिष्ठित वाक्यांश पर ध्यान केंद्रित करेंगे "आपको अतिरिक्त तोरण का निर्माण करना होगा!" यह संदेश तब कहा जाता है जब आप अपनी सेना बनाने के लिए आपूर्ति से बाहर भागते हैं। इसलिए, Starcraft समुदाय की मदद करने के लिए, आपको एक प्रोग्राम या फ़ंक्शन लिखना होगा जो खिलाड़ियों को बताता है कि उन्हें कितने पाइलों की आवश्यकता है।

चुनौती

आपको एक पूर्णांक Nऔर इकाइयों की अंतरिक्ष से अलग सूची वाली स्ट्रिंग का इनपुट दिया जाएगा । Nहमेशा शून्य या सकारात्मक होगा, और इकाइयों की सूची में हमेशा एक या अधिक मान्य इकाइयाँ होंगी। Nवर्तमान में खिलाड़ी के पास तोरण की मात्रा का प्रतिनिधित्व करता है। आपका काम यह गणना करना है कि खिलाड़ी के पास कितनी मात्रा में तोले हैं जो इकाइयों को बनाने के लिए पर्याप्त हैं। आपका कार्यक्रम या समारोह होगा उत्पादन / एक truthy मूल्य वापस अगर वहाँ पर्याप्त आपूर्ति है, या अगर वहाँ पर्याप्त आपूर्ति आप उत्पादन करना चाहिए नहीं है You must construct ZZZ additional pylonsजहां ZZZइकाइयों का निर्माण करने के लिए आवश्यक तोरणों की राशि है। ध्यान दें कि pylon(s)आवश्यक होने पर बहुवचन होना चाहिए और जब नहीं ( ...1 additional pylon!तो ...2 additional pylons!)।

प्रोटॉस यूनिट और आपूर्ति लागत

यहां सभी इकाइयों की सूची और उनकी आपूर्ति की लागत है। तोरण एक अतिरिक्त 8 आपूर्ति प्रदान करते हैं।

Unit            Supply Cost

Probe           1
Zealot          2
Sentry          2
Stalker         2
HighTemplar     2
DarkTemplar     2
Immortal        4
Colossus        6
Archon          4
Observer        1
WarpPrism       2
Phoenix         2
MothershipCore  2
VoidRay         4
Oracle          3
Tempest         4
Carrier         6
Mothership      8

बोनस के बिना उदाहरण

Input:
   2 Probe Probe Probe Probe Stalker Zealot Carrier Probe Zealot
Output:
   You must construct 1 additional pylon!
Why?
   Adding up the supply costs for all of the units gives 17. The current 2 pylons provide 16 supply, so one more is needed to provide enough for 17.

Input:
   5 Mothership Carrier Probe Tempest HighTemplar
Output:
   true
Why?
   Adding up the units gets 21. The current 5 pylons provide 40 supply, which is plenty enough.

Input:
  0 Mothership Colossus Zealot
Output:
  You must construct 2 additional pylons!
Why?
  Adding the units gets 16. There is no pylons so 2 need to be built to provide enough supply. 

बोनस

  1. किसी भी अनुभवी स्टारक्राफ्ट 2 खिलाड़ी को पता होगा कि आपको इसे एक मदरशिप में बदलने से पहले एक मदरशिप कोर की आवश्यकता है। इसके अलावा, आपके पास एक समय में केवल एक ही माहवारी हो सकती है (चाहे वह वास्तविक मातृत्व हो या मातृशक्ति कोर)। यदि इनमें से कोई भी स्थिति सत्य नहीं है, तो किसी भी गलत मूल्य का उत्पादन करें। यदि आपका प्रोग्राम यह देखने के लिए जाँच कर सकता है कि एक समय में केवल एक ही mothership सक्रिय है, और यह कि एक mothership कोर वास्तविक mothership से पहले बनाया गया है , तो अपनी बाइट की गिनती से 20% दूर लें।
  2. आप शायद ही जानते हों, लेकिन नेक्सस (प्रोटॉस कमांड सेंटर) वास्तव में आपूर्ति प्रदान करते हैं! यदि आपका कार्यक्रम इकाई की सूची में एक सांठगांठ का सामना करने पर हर बार अधिकतम आपूर्ति में 11 जोड़ सकता है, तो अपनी निर्धारित संख्या से 10% दूर ले जाएं । ध्यान दें कि यह कोई फर्क नहीं पड़ता कि नेक्सस बिल्ड ऑर्डर में कहां है, इसलिए 0 Probe Nexusअभी भी वापस आ जाएगा true

बोनस के साथ उदाहरण

Input (Bonus 1):
  3 Mothership Zealot
Output:
  false
Why?
  According to the first bonus, a mothership core has to be built before a mothership.

Input (Bonus 1):
  3 MothershipCore Mothership MothershipCore
Output:
  false
Why?
  According to the first bonus, only one mothership can be built and here there is two (MothershipCore -> Mothership and a second MothershipCore).

Input (Bonus 2):
  0 Probe Nexus Probe
Output:
  true
Why?
  According to the second bonus, nexuses add 11 to the maximum supply, allowing both probes to be built.

Input (Both Bonuses):
  0 Nexus MothershipCore Mothership Carrier
Output:
  You must construct 1 additional pylon.
Why?
  There are no pylons, but the nexus provides 11 supply. The motherships take up 2 and 8, respectively and the carrier takes up 6. You need one more pylon to have enough to provide for all 16 supply.

टी एल; डॉ

इनपुट एक स्ट्रिंग जिसमें एक पूर्णांक और अंतरिक्ष से अलग इकाई नाम शामिल हैं (ऊपर तालिका से)। एक सत्य मूल्य का उत्पादन करें यदि आप सभी इकाइयों को Nपाइलों द्वारा प्रदान की गई आपूर्ति (इनपुट में पूर्णांक) के साथ बना सकते हैं। You must construct ZZZ additional pylon(s)यदि अधिक तोरण की आवश्यकता हो तो आउटपुट की ZZZआवश्यकता होती है। यदि आवश्यक हो तो तोरण बहुवचन बनाने के लिए सुनिश्चित करें।

यह , इसलिए बाइट्स (या आपकी भाषा की गणना पद्धति) में सबसे कम कोड जीतता है!

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिखाई देता है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

# Language Name, N bytes

Nआपके प्रस्तुत करने का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

# Ruby, <s>104</s> <s>101</s> 96 bytes

यदि आप अपने हेडर में कई संख्याओं को शामिल करना चाहते हैं (जैसे कि आपका स्कोर दो फ़ाइलों का योग है या आप दुभाषिया ध्वज दंड को अलग से सूचीबद्ध करना चाहते हैं), तो सुनिश्चित करें कि हेडर में वास्तविक अंक अंतिम संख्या है:

# Perl, 43 + 2 (-p flag) = 45 bytes

आप भाषा के नाम को एक लिंक भी बना सकते हैं जो लीडरबोर्ड स्निपेट में दिखाई देगा:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

var QUESTION_ID=69011,OVERRIDE_USER=36670;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?([\d\.]+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


1
क्या इसके लिए जगह-अलग होना जरूरी है या क्या यह 'सुविधाजनक' हो सकता है?
ब्लू

@ मुडफिश अगर मैं आपको सही तरीके से समझती हूं, तो हां इनपुट को फॉर्म में अलग करना होगा N unit1 unit2 unit3...
GamrCorps

क्या कभी 9 से अधिक तोरण होंगे? क्या मुझे वास्तव में आउटपुट करना है trueया एक सत्य मूल्य स्वीकार्य है?
डोम हेस्टिंग्स

@DomHastings में 9 से अधिक हो सकते हैं। कोई भी सत्य मान स्वीकार्य है।
GamrCorps

2
ओह अब छोड़िए भी! क्या किसी को Starcraft याद है: Broodwar या मूल Starcraft? उनके पास वह वाक्यांश भी है!

जवाबों:


4

रूबी, 263 - 30% = 184 बाइट्स

v=c=k=0
l,a={PeOr:1,ZtSySrHrDrWmPxMe:2,Oe:3,VyIlAnTt:4,CsCr:6,Mp:8,Ns:-11},ARGV.shift
ARGV.map{|u|k+=l[l.keys.grep(/#{q=u[0]+u[-1]}/)[0]];c+=1if q=="Me";v=!0if c!=1&&q=~/M/}
n=k/8.0-a.to_i
p v ?n<0||"You must construct #{n.ceil} additional pylon#{'s'if n>1}!":nil

प्रयोग

ruby sc.rb 0 Probe Nexus


7

पायथन 3, 207 * .9 == 186.3 बाइट्स।

नेक्सस बोनस लागू करता है।
26 बाइट डीएसएम के लिए धन्यवाद बचा लिया।
टिम पेडरिक की बदौलत 2 बाइट्स बचाए

x,*l=input().split()
d=-((int(x)*8-sum((('vexuobcl'+2*'clsuie'+4*'Ratahoiesuhihi').count(q[-3:-1])*(1-12*(q[0]>'w'))or 2)for q in l))//8)
print((1,"You must construct %s additional pylon"%d+'s!'[d<2:])[d>0])

अच्छा काम! चूंकि आपको केवल एक सत्य मूल्य का उत्पादन करने की आवश्यकता है, जरूरी नहीं कि Trueआप 1>0बस के साथ बदलकर दो बाइट्स बचा सकते हैं 1
टिम पैडरिक

@TimPederick मुझे यकीन नहीं था कि अगर इसे सच के रूप में गिना जाए।
मॉर्गन थ्रैप


3
आपको अतिरिक्त अजगर का निर्माण करना होगा ...
ब्रायन

4

जावास्क्रिप्ट, 274 265 बाइट्स (कोई बोनस नहीं) 281 - 10% = 252.9 बाइट्स

s=>(c=eval(s[a="replace"](" ","-(")[a](/ /g,"+")[a](/\w+/g,m=>m[b="match"](/^(Pr|Ob)/g)?1:m[b](/^([ZSHDWP]|M\w+C)/g)?2:m[b](/^O/g)?3:m[b](/^[IAVT]/g)?4:m[b](/^N/g)?-11:m[b](/^C/g)?6:+m!=m?8:m*8)+")"))>0?true:`You must construct ${Math.ceil(-c/8)} additional pylon${c/8<-1?"s":""}!`

यह बहुत लंबा प्रतीत होता है ...

डेमो + स्पष्टीकरण:

p = s => (c = eval(
  s[a = "replace"](" ", "-(")         //replace the first space (after the number of pylons) with "-" and open the bracket
   [a](/ /g, "+")                       //replace all the remaining spaces with "+"
   [a](/\w+/g, m =>                     //replace any sequence of characters with...
    m[b = "match"](/^(Pr|Ob)/g) ? 1 :   //with 1, if matches "Probe" or "Observer"
    m[b](/^([ZSHDWP]|M\w+C)/g) ? 2 :    //with 2, if it matches bunch of the units with cost 2. "Probe" didn't match already, so it's safe to catch "Phoenix" by only the first letter.
    m[b](/^O/g) ? 3 :                   //with 3, if match is "Oracle"
    m[b](/^[IAVT]/g) ? 4 :              //with 4, if matches "Immortal", "Archon", "VoidRay" or "Tempest"
    m[b](/^C/g) ? 6 :                   //with 6, if it's "Carrier" or "Colossus"
    m[b](/^N/g) ? -11 :                 //don't forget nexuses!
    +m != m ? 8 : m * 8                 //and if's not a number, then it's "Mothership", so with 8. If it's number, it can only be the number of pylons, replace it with itself multiplied by 8.
  ) + ")"                             //close the opened bracket
)) > 0 ? true : `You must construct ${Math.ceil(-c/8)} additional pylon${c/8<-1?"s":""}!`

document.write(
  p("2 Probe Probe Probe Probe Stalker Zealot Carrier Probe Zealot") + "<br>" +
  p("5 Mothership Carrier Probe Tempest HighTemplar") + "<br>" +
  p("0 Mothership Colossus Zealot") + "<br>" +
  p("0 Probe Nexus Probe")
)


मुझे नहीं पता कि मैंने बोनस क्यों नहीं देखा, इसे करना चाहिए।
निकेल

के -(c>>3)बजाय का उपयोग करके 8 बाइट सहेजें Math.ceil(-c/8)। के c<-8बजाय का उपयोग करके एक और 2 बाइट्स सहेजें c/8<-1
नील

आपके आंतरिक मैचों /gको उनकी आवश्यकता नहीं है ? यह एक और 6 बाइट्स को बचाएगा। यह भी /ob/iलगता है कि यह एक और 5 बाइट की बचत के लिए काम करेगा।
नील

आपका परीक्षण गलत प्रतीत होता है - आप उपयोग कर रहे हैं, >0लेकिन यदि आपके पास एक सटीक मिलान है तो यह अभी भी सही है। जाहिर है कि गोल्फ के लिए आप इसे <0बदलकर ?:हथियारों को उलट देंगे ।
नील

1
मुझे लगता है कि आप पूरे घटाव का उपयोग करके एक और 17 बाइट्स बचा सकते हैं। मेरे पास अब तक यह है:s=>(c=eval(s.replace(/ /g,"-").replace(/\w+/g,m=>m[b="match"](/ob/i)?1:m[b](/^([ZSHDWP]|M\w+C)/)?2:m[b](/^O/)?3:m[b](/^[IAVT]/)?4:m[b](/^N/)?-11:m[b](/^C/)?6:+m!=m?8:m*8)))<0?`You must construct ${-(c>>3)} additional pylon${c<-8?"s":""}!`:true
नील

4

पायथन 3, 293 - 30% = 205.1 बाइट्स

दोनों बोनस लागू । 1 अपने सत्य मूल्य के रूप में प्रिंट करता है, और या तो 0 या एक खाली स्ट्रिंग इसके गलत मूल्य के रूप में।

s='5N 8O5P bDbHeM7P6S7S9W6Z 6O 6A8I7T7V . 7C8C . aM'.split()
m=M=n=o=0
p,*u=input().split()
for v in u:
 S=0
 while'%x'%len(v)+v[0]not in s[S]:S+=1
 n+=S or-11;M+=S>7;m+='pC'in v;o+=m>1or M>1or m<1<=M
q=int(p)+n//-8
print([1,'You must construct %d additional pylon'%-q+'s!'[q>-2:]][q<0]*(o<1))

डोम हेस्टिंग्स के समाधान का श्रेय मुझे ceilअपने स्वयं के एक "गरीब आदमी" के साथ एक अच्छी कुछ बाइट्स से दूर करने में मदद करने के लिए , और मॉर्गन थ्राप्प के विचार के लिए अंतर्निहित है 's!'[q>-2:], जिसने मुझे छह बाइट्स से बचाया - इंगित करने के लिए नहीं टिप्पणी में, कैसे उस बिट पर एक और बाइट बचाने के लिए।


स्पष्टीकरण

पंक्ति 1 में स्ट्रिंग सभी इकाइयों और उनकी आपूर्ति आवश्यकताओं को एन्कोड करती है। प्रत्येक इकाई को दो वर्णों के रूप में दर्शाया जाता है: इकाई के नाम की लंबाई देने वाला एक हेक्साडेसिमल अंक, और नाम का पहला चरित्र (जैसे 8Oकि ऑब्जर्वर है; aMमदरशिप है)। आपूर्ति की आवश्यकता अनुक्रम के भीतर एन्कोडेड यूनिट का सूचकांक है, जो sरिक्त स्थान पर स्ट्रिंग को विभाजित करके बनाई गई है। पूर्ण स्टॉप मार्क अप्रयुक्त मात्रा में आपूर्ति (किसी इकाई को 5 या 7 आपूर्ति की आवश्यकता नहीं है), और एक विशेष मामले के रूप में, नेक्सस ( 5N) इंडेक्स 0 पर है।

पंक्ति 2 मानों को प्रारंभिक करता है: mमदरशिप कोर Mकी संख्या है, मदरशिप की संख्या nहै, कुल आपूर्ति लागत है, और oयह इंगित करता है कि क्या मदरशिप बिल्ड की शर्तों का उल्लंघन किया गया है या नहीं। लाइन 3 इनपुट लेता है, तोरणों की संख्या pऔर इकाइयों की सूची में डालता है u

लूप के भीतर जो लाइन 4 पर शुरू होता है, Sएक सूचकांक है sऔर, इस प्रकार, वर्तमान इकाई के लिए आवश्यक आपूर्ति की मात्रा भी है v। लाइन 6 में, whileस्टेटमेंट sतब तक चलता है जब तक यूनिट नहीं मिलती है। ( '%x'%len(v)इकाई के नाम की लंबाई को हेक्स अंक में बदल देता है।)

लाइन 7 कुल आपूर्ति लागत को अपडेट करती है n( -11यदि Sशून्य है तो विशेष मामले पर ध्यान दें )। इसके बाद मदर्सशिप M(7 से अधिक की आपूर्ति की लागत से पहचानी जाने वाली) और मदरशिप कोर m( pCयूनिट के नाम में प्रतिस्थापन द्वारा पहचानी गई ) की गणना में वृद्धि होती है । फिर, यदि इनमें से कोई भी 1 से अधिक है, या यदि शून्य है, तो Mकम से कम एक mहै, ध्वज oसेट है। (वास्तव में, यह बढ़ा हुआ है, लेकिन बाद में हम केवल देखभाल करते हैं यदि यह शून्य या गैर-शून्य है।)

तोरण qकी गणना की जाती है, थोड़ा अजीब तरीके से, पंक्ति 8 में। Naively, यह होना चाहिए n // 8 - int(p)(यानी आपूर्ति लागत का आठवां हिस्सा, हमारे पास पहले से मौजूद किसी भी तोहफे का शून्य से)। लेकिन जब हम गोल करने की आवश्यकता होती है, तो वह नीचे आ जाएगी। //हालांकि, आंतरिक विभाजन ( ) नकारात्मक अनंत की ओर गोल है, इसलिए हम सिर्फ नकारात्मक चीजों में सब कुछ काम करते हैं: int(p) - -(n // -8)जो वास्तव में उपयोग किए जाने वाले फॉर्म को सरल करता है।

अंत में, आउटपुट। अगर हम सिर्फ एक तोरण छोटा कर रहे हैं, q-1 होगा, इसलिए परीक्षण q>-2(जो सच sहोने पर स्ट्रिंग से बाहर निकल जाता s!है, और अन्यथा इसे रखता है)। यदि कोई नायलॉन की कमी नहीं है, qतो शून्य या सकारात्मक होगा, इसलिए q<0सत्य मान 1 या आउटपुट स्ट्रिंग के बीच चयन करना होगा। अंत में, यदि ध्वज oशून्य नहीं है, तो बूलियन द्वारा किसी भी परिणाम (1 या एक स्ट्रिंग) को गुणा करना False(संख्यात्मक 0 के रूप में संभाला) एक गलत मूल्य (0 या खाली स्ट्रिंग) देगा।


3

सी ++ 11, 732-30% = 512.4 बाइट्स

डोम हेस्टिंग्स के गरीब आदमी ceilऔर मार्टिन ब्यूटनर के शब्दकोश को छोटा करने के सुझावों का उपयोग करता है ।

#include <iostream>
#include <map>
#include <string>
#include <cctype>
using namespace std;
map<int,int>a ={{536,1},{655,2},{677,2},{758,2},{1173,2},{1175,2},{869,4},{891,6},{635,4},{872,1},{997,2},{763,2},{1516,2},{766,4},{630,3},{770,4},{744,6},{1091,8},{563,-11}};
int main(){string b,c;int d,e,l,j,k=0,m=0,n=0,v=0;cin>>d;getline(cin,b);
while(b.size()){e=0;auto z=b.find(" ");c=b.substr(0,z);b.erase(0,((z==string::npos)?z:z+1));
for(int i=0;i<c.size();i++){e+=tolower(c[i]);}
if(e==1516){m++;}else if(e==1091){((m>1)?v=1:v=0);}
if((l=k-(d*8)>0)&&(m==n==1)){j=(int)(((float)l/8)+0.99);cout<<"You must construct "<<j<<" additional pylon"<<((j==1)?"!":"s!")<<endl;}
else{cout<<((m==n==1&&!v)?"True":"False")<<endl;}}

+1 प्रोग्रामिंग पजल और कोड गोल्फ में और स्टैक एक्सचेंज के सभी में आपका स्वागत है। यह बहुत अच्छा पहला उत्तर है। यदि आप कोई मदद चाहते हैं, तो बस @usernameएक टिप्पणी की शुरुआत में टाइप करके पूछें , जैसे @wizzwizz4
wizzwizz4

2

पायथन 2, 442 359 464 332 314 306 - 10% = 275.4

a,*l=input().split(' ');p=int(a)*8;for i in l:p-={"Ne":-11,"Pr":1,"Ze":2,"Se":2,"St":2,"Hi":2,"Da":2,"Im":4,"Co":6,"Ar":4,"Ob":1,"Wa":2,"Ph":2,"MoC":2,"Vo":4,"Or":3,"Te":4,"Ca":6,"Mo":8}[i[:2]+("C"if i[-4:]=="Core")]
e=int(.9+p/8)+1;print[1,"You must construct "+`e`+" additional pylon"+"s!"[e>1:]][p>=0]

मैं अपना शब्दकोश कैसे छोटा कर सकता हूं?
NoOneIsHere

2
ऐसा करने के कई तरीके हैं। उदाहरण के लिए जावास्क्रिप्ट उत्तर व्यक्तिगत स्ट्रिंग के खिलाफ जाँच करने के बजाय नियमित अभिव्यक्ति का उपयोग करता है। हो सकता है कि आप एक हैश का पता लगाने की कोशिश कर सकते हैं जो प्रत्येक स्ट्रिंग को एक अद्वितीय संख्या (शायद वर्ण कोड का योग) में मैप करता है। वे संख्याएँ तार से छोटी हो सकती हैं।
मार्टिन एंडर

मुझे यकीन नहीं है, लेकिन शायद यह काफी समय से कुछ के साथ बचत है जैसेdict(x[:2],int(x[2:]) for x in "Ne-11 Pr1 Ze2".split())

1

लुआ, 418 - 10% = 376,2 बाइट्स

function p(i)i=i:gsub("(%w+)",function(w)q=tonumber(w)*8;return""end,1);n=0;i:gsub("(%w+)",function(w)m=w.match;n=n+(m(w,"^Pr.*")and 1 or m(w,"^Ob.*")and 1 or m(w,"^[ZSHDWP]")and 2 or m(w,"^M.*C")and 2 or m(w,"^O")and 3 or m(w,"^[IAVT]")and 4 or m(w,"^C")and 6 or m(w,"^N")and -11 or 8)end)if n>q then a=math.ceil((n-q)/8);print("You must construct "..a.." additional pylon"..(a>1 and"s"or"")..".")else print(1)end end

नेक्सस बोनस लागू करता है।

पहली बार मैंने यहां कुछ पोस्ट किया है। एक खेल के लिए लुआ स्क्रिप्ट लिख रहा था, इस पार ठोकर खाई और योगदान की तरह महसूस किया, हा।

नोट: यह लुआ फ़ंक्शन मानता है कि बेस लाइब्रेरी भरी हुई है, और यह कि होस्ट एप्लिकेशन एक उपयुक्त printफ़ंक्शन को परिभाषित करता है जो किसी भी गैर-शून्य मान को स्वीकार करता है। मैं लुआ का शोषण कर रहा हूँ string.gsubमेरी क्षमता के अनुसार, साथ ही इसकी andऔर orऑपरेटरों।

यहाँ सुंदर संस्करण है:

function pylons(i)
    -- Replace the first word, the number, with a space, while also storing it as a number * 8
    i = i:gsub("(%w+)", function(w)
        q = tonumber(w) * 8
        return ""
    end, 1)
    n = 0
    -- the function passed to gsub gets every word in the string,  and then I misuse Lua's and/or
    -- operator order to assign supply values to string.match calls that do not return nil
    i:gsub("(%w+)", function(w)
        m = w.match
        n = n + (m(w,"^Pr.*") and 1 or
        m(w,"^Ob.*") and 1 or
        m(w,"^[ZSHDWP]") and 2 or
        m(w,"^M.*C") and 2 or
        m(w,"^O") and 3 or
        m(w,"^[IAVT]") and 4 or
        m(w,"^C") and 6 or
        m(w,"^N") and -11 or 8)
    end)
    if n>q then
        a = math.ceil((n-q)/8)
        print("You must construct "..a.." additional pylon"..(a>1 and"s"or"")..".")
    else
        print(1)
    end
end

pylons("5 Nexus Probe Observer Zealot Sentry Stalker HighTemplar DarkTemplar WarpPrism Phoenix MothershipCore Oracle Immortal Archon VoidRay Tempest Colossus Carrier Mothership")
pylons("2 Probe Probe Probe Probe Stalker Zealot Carrier Probe Zealot")
pylons("5 Mothership Carrier Probe Tempest HighTemplar")
pylons("0 Mothership Colossus Zealot")

0

जावास्क्रिप्ट (ईएस 6), 228-10% = 206

s=>(s.replace(/\w+/g,x=>t+=~~{Ns:-11,Pe:1,Zt:2,Sy:2,Sr:2,Hr:2,Dr:2,Il:4,Cs:6,An:4,Or:1,Wm:2,Px:2,Me:2,Vy:4,Oe:3,Tt:4,Cr:6,Mp:8}[x[0]+x.slice(-1)]-8*~~x,t=7),t=t/8|0,t<=0||`You must construct ${t} additional pylon${t>1?'s':''}!`)

परीक्षा

F=s=>(
  t=7,
  s.replace(/\w+/g,
   x=>t+=~~{Ns:-11,Pe:1,Zt:2,Sy:2,Sr:2,Hr:2,Dr:2,Il:4,Cs:6,An:4,Or:1,Wm:2,Px:2,Me:2,Vy:4,Oe:3,Tt:4,Cr:6,Mp:8}[x[0]+x.slice(-1)]-8*~~x),
  t=t/8|0,
  t<=0||`You must construct ${t} additional pylon${t>1?'s':''}!`
)

console.log=x=>O.textContent+=x+'\n';

;['2 Probe Probe Probe Probe Stalker Zealot Carrier Probe Zealot',
'5 Mothership Carrier Probe Tempest HighTemplar',
'0 Mothership Colossus Zealot','0 Probe Nexus Probe'
].forEach(t=>console.log(t+'\n'+F(t)))
<pre id=O></pre>


0

पर्ल, 212 बाइट्स कोड + 3 के लिए -p- 10% = 193.5 बाइट्स

मुझे यकीन है कि मैं इसे कुछ और कम कर सकता हूं, पूर्ण for$s(...){...}ब्लॉक के बारे में खुश नहीं हूं लेकिन अभी के लिए कर रहा हूं!

$x=$_*8;s/^\d+ //;map{for$s(Pr,Ob,Or,C,V,I,A,T,Z,S,H,D,W,Ph,'.+C',N,'.+p$'){$x-=(1,1,3,6,(4)x4,(2)x7,-11,8)[$i++%17]*/^$s/}}/\w+/g;$x=int$x/-8+.9;$s=1<$x&&'s';$_=$x>0?"You must construct $x additional pylon$s!":1

दिलचस्प स्निपेट

  • गरीब आदमी ceil: int$n+.9- मैं का उपयोग करने की कोशिश की, 0|लेकिन मिला क्या अतिप्रवाह की तरह लग रहा है!
  • सूची दोहराव: (9)x9पैदावार(9,9,9,9,9,9,9,9,9,9)

उपयोग:

perl -p pylons.pl <<< '3 Mothership Zealot'
1

एक अतिरिक्त बाइट को बचाने में मदद करने के लिए टिम पेडरिक का धन्यवाद !


मेरा मानना ​​है कि आपके "गरीब आदमी ceil" को केवल जोड़ने की ज़रूरत है .9, क्योंकि आपको जो सबसे कम दशमलव मिलेगा वह 0.125 (1/8) है।
टिम पैडरिक

@TimPederick एक अच्छा बिंदु, मुझे प्रतिस्पर्धी होने के लिए बहुत कुछ बचाने की आवश्यकता है! मेरे लिए अन्य बोनस देखने लायक हो सकता है ...
डोम हेस्टिंग्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.