Wprowadzenie
W grze strategicznej Starcraft 2 do wyboru są trzy „rasy”: Terran, Zerg i Protossi. W tym wyzwaniu skupimy się na protosach i kultowym zdaniu „Musisz zbudować dodatkowe pylony!” Ten komunikat pojawia się, gdy zabraknie Ci zapasów na budowę armii. Aby więc pomóc społeczności Starcraft, musisz napisać program lub funkcję, która mówi graczom dokładnie, ile pylonów potrzebują.
Wyzwanie
Otrzymasz wejście ciągu składającego się z jednej liczby całkowitej N
i oddzielonej spacjami listy jednostek. N
zawsze będzie zerowy lub dodatni, a lista jednostek będzie zawsze zawierać jedną lub więcej prawidłowych jednostek. N
reprezentuje ilość pylonów, którą aktualnie ma gracz. Twoim zadaniem jest obliczyć, czy ilość pylonów, które gracz ma, wystarcza do zbudowania jednostek. Twój program lub funkcja musi generować / zwracać prawdziwą wartość, jeśli jest wystarczająca podaż lub jeśli nie ma wystarczającej podaży, musisz wypisać, You must construct ZZZ additional pylons
gdzie ZZZ
jest ilość pylonów potrzebnych do zbudowania jednostek. Zauważ, że pylon(s)
liczba mnoga musi być w razie potrzeby, a liczba mnoga, gdy nie jest ( ...1 additional pylon!
, ...2 additional pylons!
).
Jednostki Protossów i koszt zaopatrzenia
Oto lista wszystkich jednostek i odpowiadających im kosztów zaopatrzenia. Pylony zapewniają dodatkowe 8 zapasów.
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
Przykłady BEZ bonusów
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.
Bonusy
- Każdy doświadczony gracz Starcraft 2 wiedziałby, że potrzebujesz rdzenia statku-matki, aby przekształcić go w statek-matki. Ponadto możesz mieć tylko jeden statek macierzysty na raz (niezależnie od tego, czy jest to faktyczny statek macierzysty, czy jego rdzeń). Jeśli żaden z tych warunków nie jest spełniony, wypisz dowolną wartość fałszowania. Jeśli twój program może sprawdzić, czy tylko jeden statek-matka jest aktywny na raz i że rdzeń statku-matki jest zbudowany przed faktycznym statkiem-matka, odejmij 20% swojej liczby bajtów.
- Mało może wiesz, ale nexusy (centra dowodzenia Protossów) faktycznie też zapewniają zapasy! Jeśli twój program może dodać 11 do maksymalnej podaży za każdym razem, gdy napotka nexus na liście jednostek, zabierz 10% zniżki na liczbę bajtów. Pamiętaj, że nie ma znaczenia, gdzie Nexus znajduje się w kolejności kompilacji, więc
0 Probe Nexus
nadal by powróciłtrue
.
Przykłady z bonusami
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
Wprowadź ciąg składający się z liczb całkowitych i nazw jednostek oddzielonych spacjami (z powyższej tabeli). Podaj prawdziwą wartość, jeśli możesz zbudować wszystkie jednostki z zasilaniem zapewnianym przez N
pylony (liczba całkowita na wejściu). Wyjście, You must construct ZZZ additional pylon(s)
jeśli potrzeba więcej pylonów, gdzie ZZZ
jest potrzebna ilość pylonów. W razie potrzeby upewnij się, że pylony są w liczbie mnogiej.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach (lub metoda liczenia w Twoim języku)!
Tabela liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](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
czy też dopuszczalna jest prawdziwa wartość?