"আপনাকে অবশ্যই অতিরিক্ত পাইলন তৈরি করতে হবে!"


28

ভূমিকা

স্টারক্রাফ্ট 2 স্ট্র্যাটেজিক গেমটিতে তিনটি "রেস" বেছে নিতে হবে: টেরান, জের্গ এবং প্রোটোস। এই চ্যালেঞ্জের মধ্যে আমরা প্রোটাস এবং আইকনিক বাক্যাংশের প্রতি মনোনিবেশ করব "আপনাকে অবশ্যই অতিরিক্ত পাইলনগুলি তৈরি করতে হবে!" আপনার সেনাবাহিনী তৈরির জন্য সরবরাহ শেষ হয়ে গেলে এই বার্তাটি বলা হয়েছে। সুতরাং, স্টারক্রাফ্ট সম্প্রদায়টিকে সহায়তা করার জন্য, আপনাকে অবশ্যই একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা খেলোয়াড়দের ঠিক কত পাইলনের প্রয়োজন তা বলে দেয়।

চ্যালেঞ্জ

আপনাকে একক পূর্ণসংখ্যা Nএবং একক স্থানের দ্বারা পৃথক করা তালিকা সমন্বিত একটি স্ট্রিংয়ের ইনপুট দেওয়া হবে । Nসর্বদা শূন্য বা ধনাত্মক হবে এবং ইউনিটের তালিকায় সর্বদা এক বা একাধিক বৈধ ইউনিট থাকবে। Nখেলোয়াড়ের বর্তমানে কতগুলি পাইলন রয়েছে তা উপস্থাপন করে। আপনার কাজটি গণনা করা হয় যে খেলোয়াড়ের যে পরিমাণ পাইলন রয়েছে সেগুলি ইউনিটগুলি তৈরি করতে যথেষ্ট কিনা। আপনার প্রোগ্রাম বা ফাংশনটি অবশ্যই পর্যাপ্ত সরবরাহের প্রয়োজন হলে আউটপুট / সত্যবাদী মান ফেরত দিতে পারে, বা পর্যাপ্ত সরবরাহ না থাকলে আপনাকে অবশ্যই আউটপুট দিতে হবে 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 প্লেয়ার জানতে পারে যে এটি মাদারশিপে রূপান্তরিত করার আগে আপনার একটি মাদারশিপ কোর প্রয়োজন। এছাড়াও, আপনার একসাথে কেবলমাত্র একটি মাদারশিপ থাকতে পারে (এটি আসল মাদারশিপ হোক বা মাদারশিপ কোর)। যদি এই শর্তগুলির মধ্যে দুটিও সত্য না হয় তবে কোনও মিথ্যা মান আউটপুট করুন। যদি আপনার প্রোগ্রামটি একবারে কেবলমাত্র একটি মাদারশিপ সক্রিয় রয়েছে এবং প্রকৃত মাদারশিপের আগে একটি মাদারশিপ কোর তৈরি হয়েছে তা পরীক্ষা করে দেখতে পারেন , আপনার বাইট গণনা থেকে 20% ছাড়ুন ।
  2. আপনি খুব কমই জানেন, তবে নেক্সাসগুলি (প্রোটাস কমান্ড কেন্দ্রগুলি) আসলে সরবরাহও সরবরাহ করে! যদি আপনার প্রোগ্রামটি প্রতিবার ইউনিট তালিকার কোনও নেক্সাসের মুখোমুখি হয় তখন সর্বোচ্চ সরবরাহে 11 যোগ করতে পারে, আপনার বাইট গণনা থেকে 10% ছাড়ুন take দ্রষ্টব্য যে নেক্সাসটি বিল্ড অর্ডারে কোথায় রয়েছে তা বিবেচ্য নয়, 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বা সত্যবাদী মান গ্রহণযোগ্য?
ডম হেস্টিংস

@ ডোমহাস্টিংস এখানে ৯ টিরও বেশি থাকতে পারে যে কোনও সত্যবাদী মান গ্রহণযোগ্য।
গামারকম্পস

2
উহু চলো! স্টারক্রাফ্ট: ব্রুডওয়ার বা মূল স্টারক্রাফ্টের কথা কি কেউ মনে আছে? তাদের সেই বাক্যাংশও আছে!

উত্তর:


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])

চমৎকার কাজ! যেহেতু আপনি শুধুমাত্র আউটপুট একটি truthy মান প্রয়োজন, অগত্যা True, দুই বাইট প্রতিস্থাপন সংরক্ষণ করতে পারবেন 1>0মাত্র সঙ্গে 1
টিম পেডারিক

@ টিমপিডেরিক আমি নিশ্চিত নই যে এটি যথেষ্ট সত্য হিসাবে গণ্য হয়েছে কিনা।
মরগান থ্রাপ


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")
)


আমি কেন বোনাসের দিকে তাকাইনি, তা করা উচিত আমার কোনও ধারণা নেই।
নিকেল 21

-(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 সরবরাহের প্রয়োজন নেই) এবং একটি বিশেষ ক্ষেত্রে হিসাবে, Nexus ( 5N) সূচক 0 এ রয়েছে।

লাইন 2 মানগুলি সূচনা করে: mমাতৃত্বের Mকর সংখ্যা, মাতৃশক্তির সংখ্যা, nমোট সরবরাহ ব্যয় এবং এটি oনির্দেশ করে যে মাদারশিপ তৈরির শর্ত লঙ্ঘন করা হয়েছে কিনা। লাইন 3 ইনপুট নেয়, এতে পাইলনের সংখ্যা pএবং এককের তালিকা যুক্ত করে u

লুপের মধ্যে যা লাইন 4 এ শুরু হয়, Sতার মধ্যে একটি সূচক হয় sএবং এইভাবে, বর্তমান ইউনিটের জন্য প্রয়োজনীয় পরিমাণ সরবরাহ v,। Line নং লাইনে, whileবিবৃতিটি sইউনিটটি পাওয়া না যাওয়া পর্যন্ত পদক্ষেপ নেয় । ( '%x'%len(v)ইউনিটের নামের দৈর্ঘ্যকে হেক্স অঙ্কে রূপান্তরিত করে))

লাইন 7 মোট সরবরাহ ব্যয় আপডেট করে n(বিশেষ ক্ষেত্রে নোট -11, যদি Sশূন্য হয়)। এরপরে এটি মাতৃশূলের সংখ্যা বৃদ্ধি করে M(সরবরাহের ব্যয় 7 এর বেশি হওয়া হিসাবে mচিহ্নিত ) এবং মাদারশিপ কোর ( pCইউনিটের নামে সাবস্ট্রিং দ্বারা চিহ্নিত )। তারপরে, এর যেকোনটি যদি 1 এরও বেশি হয়, বা শূন্যের Mমধ্যে কমপক্ষে একটি mহয় তবে পতাকা oসেট করা আছে। (প্রকৃতপক্ষে, এটি বাড়ানো হয়েছে, তবে পরে যদি আমরা এটি শূন্য বা শূন্য নন তবে কেবল আমাদের যত্ন নেওয়া হয়))

পাইনের ঘাটতি qগণনা করা হয়, কিছুটা অদ্ভুতভাবে, লাইন 8 এ, সাধারণভাবে, এটি হওয়া উচিত n // 8 - int(p)(অর্থাত্ সরবরাহ ব্যয়ের এক অষ্টমী, আমাদের ইতিমধ্যে যে কোনও পাইলনকে বিয়োগ করবে)। কিন্তু এটি গোল হয়ে যাবে, যখন আমাদের চারপাশের দরকার। পূর্ণসংখ্যা বিভাগ ( //) নেতিবাচক অনন্তের দিকে গোলাকার, যদিও, আমরা কেবলমাত্র নেতিবাচক ক্ষেত্রে কাজ করি: int(p) - -(n // -8)যা প্রকৃতপক্ষে ব্যবহৃত ফর্মটিকে সহজতর করে।

শেষ পর্যন্ত, আউটপুট। যদি আমরা কেবল একটি পাইলন সংক্ষিপ্ত করে থাকি, q-1 হবে, সুতরাং পরীক্ষাটি q>-2(যা সত্য হলে sস্ট্রিংয়ের বাইরে টুকরো টুকরো করে ফেলে s!এবং অন্যথায় এটি রাখে)। পাইলনের ঘাটতি qযদি না থাকে তবে শূন্য বা ধনাত্মক হবে, সুতরাং q<0সত্যবাদী মান 1 বা আউটপুট স্ট্রিংয়ের মধ্যে নির্বাচন করতে। শেষ অবধি, পতাকাটি oযদি শূন্য না হয়, তবে বুলিয়ান False(সংখ্যাসূচক 0 হিসাবে পরিচালিত ) দ্বারা ফলাফল (1 বা একটি স্ট্রিং ) গুণ করলে মিথ্যা মান দেওয়া হবে (0 বা খালি স্ট্রিং) give


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

জাভাস্ক্রিপ্ট (ES6), 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)।
টিম পেডারিক

@ টিমপিডেরিক একটি ভাল পয়েন্ট, প্রতিযোগিতামূলক হওয়ার জন্য আমার আরও অনেক কিছু বাঁচাতে হবে! আমার জন্য অন্য বোনাসটি সন্ধান করার মতো হতে পারে ...
ডম হেস্টিংস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.