Вступ
У стратегічній грі Starcraft 2 є три "раси" на вибір: Terran, Zerg і Protoss. У цьому виклику ми зупинимося на протосі та знаковій фразі "Ви повинні побудувати додаткові пілони!" Це повідомлення повідомляється, коли у вас закінчується постачання для створення армії. Отже, щоб допомогти спільноті Starcraft, ви повинні написати програму або функцію, яка точно повідомляє гравцям, скільки пілонів їм потрібно.
Змагання
Вам буде надано введення рядка, що складається з одного цілого числа 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.
Бонуси
- Будь-який досвідчений гравець Starcraft 2 знає, що вам потрібно ядро материнської плати, перш ніж перетворити його на материнський. Крім того, ви можете мати лише одне матері за один раз (будь то фактичне материнське материнство або ядро материнства). Якщо жодне з цих умов не відповідає дійсності, виведіть будь-яке хибне значення. Якщо у вашій програмі можна перевірити, чи одночасне активне лише одне материнське материнство, і що ядро материнства побудовано до фактичного материнства, зніміть 20% своєї кількості байтів.
- Мало що ви знаєте, але нексуси (командні центри протосів) насправді також забезпечують постачання! Якщо ваша програма може додати 11 до максимальної кількості кожного разу, коли вона зустрічається зв’язок у списку одиниць, зніміть 10% знижки. Зауважте, що не важливо, де знаходиться Nexus в порядку складання, тому
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.
TL; DR
Введіть рядок, що складається з цілих і розділених пробілами назв одиниць (з таблиці вище). Виведіть правильне значення, якщо ви зможете створити всі одиниці з подачею, що забезпечується N
пілонами (ціле число у введенні). Виведіть, You must construct ZZZ additional pylon(s)
якщо потрібно більше пілонів, де ZZZ
необхідна кількість пілонів. Обов’язково зробіть пілони множиною, якщо це необхідно.
Це код-гольф , тому найкоротший код у байтах (або метод підрахунку вашої мови) виграє!
Таблиця лідерів
Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою.
Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:
# 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>
N unit1 unit2 unit3...
.
true
або прийнятне значення truthy?