Einführung
Im Strategiespiel Starcraft 2 stehen drei "Rassen" zur Auswahl: Terraner, Zerg und Protoss. Bei dieser Herausforderung konzentrieren wir uns auf die Protoss und die Ikone "Sie müssen zusätzliche Pylone bauen!" Diese Meldung wird angezeigt, wenn Sie nicht mehr genügend Vorräte haben, um Ihre Armee aufzubauen. Um der Starcraft-Community zu helfen, müssen Sie ein Programm oder eine Funktion schreiben, die den Spielern genau sagt, wie viele Pylone sie benötigen.
Die Herausforderung
Sie erhalten eine Eingabe einer Zeichenfolge, die aus einer einzelnen Ganzzahl N
und einer durch Leerzeichen getrennten Liste von Einheiten besteht. N
ist immer null oder positiv, und die Liste der Einheiten enthält immer eine oder mehrere gültige Einheiten. N
Stellt die Anzahl der Pylone dar, über die der Spieler derzeit verfügt. Ihre Aufgabe ist es zu berechnen, ob die Anzahl der Pylone, über die der Spieler verfügt, ausreicht, um die Einheiten zu bauen. Ihr Programm oder Ihre Funktion muss einen Wahrheitswert ausgeben / zurückgeben, wenn es genügend Versorgung gibt, oder wenn es nicht genug Versorgung gibt, müssen Sie ausgeben, You must construct ZZZ additional pylons
wo ZZZ
die Anzahl der Pylone ist, die zum Aufbau der Einheiten erforderlich sind. Beachten Sie, dass pylon(s)
bei Bedarf ein Plural und bei Nichtbeachtung ein Plural sein muss ( ...1 additional pylon!
, ...2 additional pylons!
).
Protoss-Einheiten und Lieferkosten
Hier finden Sie eine Liste aller Einheiten und der zugehörigen Lieferkosten. Pylone bieten zusätzlich 8 Versorgung.
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
Beispiele OHNE Boni
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.
Boni
- Jeder erfahrene Starcraft 2-Spieler würde wissen, dass Sie einen Mutterschiffkern benötigen, um ihn in ein Mutterschiff zu verwandeln. Außerdem können Sie immer nur ein Mutterschiff gleichzeitig haben (unabhängig davon, ob es sich um ein tatsächliches Mutterschiff oder einen Mutterschiffkern handelt). Wenn keine dieser Bedingungen zutrifft, geben Sie einen falschen Wert aus. Wenn Ihr Programm überprüfen kann, ob jeweils nur ein Mutterschiff aktiv ist und ein Mutterschiffkern vor dem eigentlichen Mutterschiff erstellt wurde, reduzieren Sie Ihre Bytezahl um 20% .
- Sie wissen vielleicht nicht viel, aber Nexuses (Protoss-Kommandozentralen) stellen tatsächlich auch die Versorgung sicher! Wenn Ihr Programm jedes Mal, wenn es auf einen Nexus in der Einheitenliste stößt, die maximale Anzahl um 11 erhöhen kann, reduzieren Sie Ihre Byteanzahl um 10% . Beachten Sie, dass es keine Rolle spielt, wo sich der Nexus in der Erstellungsreihenfolge befindet, und dass er
0 Probe Nexus
trotzdem zurückkehren würdetrue
.
Beispiele mit Boni
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
Geben Sie eine Zeichenfolge ein, die aus einer Ganzzahl und durch Leerzeichen getrennten Einheitennamen besteht (aus der obigen Tabelle). Geben Sie einen Wahrheitswert aus, wenn Sie alle Einheiten mit der von den N
Pylonen bereitgestellten Versorgung (der Ganzzahl in der Eingabe) erstellen können . Ausgabe, You must construct ZZZ additional pylon(s)
wenn mehr Pylone benötigt werden, wo ZZZ
ist die Anzahl der benötigten Pylone. Stellen Sie sicher, dass Sie bei Bedarf mehrere Pylone verwenden.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes (oder die Zählmethode Ihrer Sprache)!
Bestenliste
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](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
oder ist ein wahrer Wert akzeptabel?