Giới thiệu
Trong trò chơi chiến lược Starcraft 2, có ba "chủng tộc" để lựa chọn: Terran, Zerg và Protoss. Trong thử thách này, chúng tôi sẽ tập trung vào Protoss và cụm từ mang tính biểu tượng "Bạn phải xây dựng các trụ bổ sung!" Thông báo này được nêu khi bạn hết nguồn cung cấp để xây dựng quân đội của bạn. Vì vậy, để giúp đỡ cộng đồng Starcraft, bạn phải viết một chương trình hoặc chức năng cho người chơi biết chính xác họ cần bao nhiêu giá treo.
Các thách thức
Bạn sẽ được cung cấp đầu vào của một chuỗi bao gồm một số nguyên đơn N
và danh sách các đơn vị được phân tách bằng dấu cách. N
sẽ luôn bằng 0 hoặc dương và danh sách các đơn vị sẽ luôn có một hoặc nhiều đơn vị hợp lệ. N
đại diện cho số lượng trụ mà người chơi hiện có. Công việc của bạn là tính toán nếu số lượng trụ mà người chơi có đủ để xây dựng các đơn vị. Đầu ra chương trình hoặc chức năng bắt buộc của bạn / trả về một giá trị truthy nếu có đủ nguồn cung cấp, hoặc nếu không có đủ nguồn cung cấp bạn phải ra You must construct ZZZ additional pylons
nơi ZZZ
là số tiền của giá treo cần thiết để xây dựng các đơn vị. Lưu ý rằng pylon(s)
phải là số nhiều khi cần thiết và số nhiều khi không ( ...1 additional pylon!
, ...2 additional pylons!
).
Đơn vị Protoss và chi phí cung cấp
Dưới đây là danh sách tất cả các đơn vị và chi phí cung cấp tương ứng của họ. Giá treo cung cấp thêm 8 nguồn cung cấp.
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
Ví dụ KHÔNG CÓ Tiền thưởng
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.
Tiền thưởng
- Bất kỳ người chơi Starcraft 2 có kinh nghiệm nào cũng sẽ biết rằng bạn cần có một tình mẫu tử trước khi biến nó thành tình mẫu tử. Ngoài ra, bạn chỉ có thể có một lần làm mẹ tại một thời điểm (cho dù đó là việc làm mẹ thực sự hay cốt lõi làm mẹ). Nếu cả hai điều kiện này đều không đúng, hãy xuất bất kỳ giá trị giả nào. Nếu chương trình của bạn có thể kiểm tra để thấy rằng chỉ có một chế độ làm mẹ hoạt động tại một thời điểm và lõi của chế độ làm mẹ được xây dựng trước khi làm mẹ thực tế, hãy giảm 20% số byte của bạn.
- Bạn có thể biết ít, nhưng nexuses (trung tâm chỉ huy protoss) thực sự cũng cung cấp! Nếu chương trình của bạn có thể thêm 11 vào nguồn cung tối đa mỗi lần nó gặp một nexus trong danh sách đơn vị, hãy giảm 10% số byte của bạn. Lưu ý rằng việc Nexus ở đâu trong thứ tự xây dựng không quan trọng, vì vậy
0 Probe Nexus
vẫn sẽ quay lạitrue
.
Ví dụ với tiền thưởng
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
Nhập một chuỗi bao gồm một tên đơn vị số nguyên và phân cách bằng dấu cách (từ bảng trên). Xuất ra một giá trị trung thực nếu bạn có thể xây dựng tất cả các đơn vị với nguồn cung được cung cấp bởi các N
giá treo (số nguyên trong đầu vào). Đầu ra You must construct ZZZ additional pylon(s)
nếu cần nhiều giá treo hơn, ZZZ
thì số lượng trụ cần thiết là bao nhiêu. Hãy chắc chắn để làm giá treo số nhiều nếu cần thiết.
Đây là môn đánh gôn , vì vậy mã ngắn nhất tính bằng byte (hoặc phương pháp đếm ngôn ngữ của bạn) sẽ thắng!
Bảng xếp hạng
Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.
Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:
# Language Name, N bytes
nơi N
là kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:
# Perl, 43 + 2 (-p flag) = 45 bytes
Bạn cũng có thể đặt tên ngôn ngữ thành một liên kết mà sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:
# [><>](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
hay là một giá trị trung thực được chấp nhận?