Giriş
Strateji oyununda Starcraft 2, aralarından seçim yapabileceğiniz üç "ırk" var: Terran, Zerg ve Protoss. Bu mücadelede, Protos'lara ve "Ek dikmeler inşa etmelisiniz!" İkonuna değineceğiz. Bu mesaj, ordunuzu kurmak için tedarikiniz bittiğinde belirtilir. Bu yüzden, Starcraft topluluğuna yardımcı olmak için, oyunculara tam olarak kaç tane direk istediklerini söyleyen bir program veya işlev yazmalısınız.
Meydan okuma
Tek bir tamsayı N
ve boşlukla ayrılmış birimler listesinden oluşan bir dize girişi verilecektir . N
her zaman sıfır veya pozitif olur ve birimler listesinde her zaman bir veya daha fazla geçerli birim bulunur. N
Oyuncunun o anda sahip olduğu direkleri temsil eder. İşiniz, oyuncunun sahip olduğu pilon miktarının birimleri oluşturmak için yeterli olup olmadığını hesaplamaktır. Orada yeterli kaynağı ise veya Programınız veya işlev zorunluluk çıkışı / a truthy değeri döndürmek çıkış gerekir yeterince arz yoksa birimleri oluşturmak için gerekli direkler miktarıdır. Not gerekli ve unplural değilken (zaman çoğul olmalıdır , ).You must construct ZZZ additional pylons
ZZZ
pylon(s)
...1 additional pylon!
...2 additional pylons!
Protoss Birimleri ve Arz Maliyeti
İşte tüm birimlerin bir listesi ve bunlara karşılık gelen tedarik maliyetleri. Direkler ek bir 8 tedarik sağlar.
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
Bonus OLMADAN Örnekler
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.
Bonuslar
- Tecrübeli herhangi bir Starcraft 2 oyuncusu, onu bir ana gemiye dönüştürmeden önce bir ana gemiye ihtiyacınız olduğunu bilir. Ayrıca, bir seferde yalnızca bir ana anneliğe sahip olabilirsiniz (gerçek bir ana ya da ana bir çekirdek olup olmadığı). Bu koşullardan hiçbiri doğru değilse, herhangi bir sahte değeri verin. Programınız bir seferde yalnızca bir anneliğin aktif olduğunu ve gerçek annelikten önce bir annelik çekirdeğinin kurulduğunu kontrol edebilirse , % 20 edebilirse, bayt indirim alın.
- Çok az şey biliyor olabilirsiniz, ancak nexuses (protoss komut merkezleri) aslında tedarik de veriyor! Programınız, ünite listesindeki bir bağlantı noktasıyla her karşılaştığında maksimum arza 11 ekleyebilirse , bayt sayınızdan % 10 indirim alın. Nexus'un yapım sırasının neresinde olduğu önemli değil,
0 Probe Nexus
yine de geri döneceğini unutmayıntrue
.
Bonus İle Örnekler
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.
TL; DR
Bir tamsayı ve boşlukla ayrılmış birim adlarından oluşan bir dize girin (yukarıdaki tablodan). Tüm birimleri N
dikmeler tarafından sağlanan beslemeyle (girilen tam sayı) oluşturabiliyorsanız bir gerçek değer verin. Çıktı You must construct ZZZ additional pylon(s)
daha dikmesi gerektiği takdirde, nerede ZZZ
ihtiyaç direklere miktarıdır. Gerekirse direkleri çoğalttığınızdan emin olun.
Bu kod golfü , yani bayt cinsinden en kısa kod (veya dilinizin sayma yöntemi) kazanır!
Liderler Sıralaması
Burada hem düzenli bir lider tablosu hem de kazananların dile göre genel bir bakışı oluşturmak için bir Stack Snippet'i var.
Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:
# Language Name, N bytes
Gönderinizin N
büyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :
# Perl, 43 + 2 (-p flag) = 45 bytes
Dil adını, daha sonra büyük afiş snippet'inde görünecek bir bağlantı da yapabilirsiniz:
# [><>](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>
N unit1 unit2 unit3...
.
true
mıyım yoksa bir gerçek değeri kabul edilebilir mi?