5
You're playing TF2, and you want to make a bot that will just put voice commands into the chat box. Typically, to "call" a voice command, one would press a key (Z
, X
, or C
) and a number (1-8
) to create an audio dialogue. Here are the text equivalents of the audios displayed when pressing these keys:
Voice Menu 1
Default key: Z
==============
1. MEDIC!
2. Thanks!
3. Go Go Go!
4. Move Up!
5. Go Left
6. Go Right
7. Yes
8. No
Voice Menu 2
Default key: X
==============
1. Incoming
2. Spy!
3. Sentry Ahead!
4. Teleporter Here
5. Dispenser Here
6. Sentry Here
7. Activate ÜberCharge!
8. MEDIC: ÜberCharge Ready ; ignore the MEDIC: bit
Voice Menu 3
Default key: C
==============
1. Help!
2. Battle Cry ; see bonus
3. Cheers
4. Jeers
5. Positive
6. Negative
7. Nice Shot
8. Good Job
Objective Given an input string (or input character + character, character + number, etc.; whatever is most relevant/convenient to your language), take the respective message from the chart above and output it. If the input is invalid, do not output anything. This is a code-golf, so the shortest program in bytes wins.
Example IOs
> Z3
Go Go Go!
> Z1
MEDIC!
> Z5
Go Left
> X8
ÜberCharge Ready
> X7
Activate ÜberCharge!
> C1
Help!
> C8
Good Job
Bonuses/penalties
These bonuses are applied in the order of appearance in this list.
- -1 byte for every byte used in the physical text of
C2
(i.e.,Battle Cry
); I will not add points for errors onC2
, so be creative if you wish! (By physical text, I mean every byte used for constructing (not outputting) the string. For example, forSTDOUT "AHHHHHHHH!"
,"AHHHHHHHH!"
is free, but nothing else is. Inconsole.log(`${v="Tha"}t's too you, you idiot!`)
, the free characters are`"Tha" t's too you, you idiot!`
. These characters are the only ones that make up part of the string and their respective quotes.) - -15% if your program takes input and outputs the respective entry until an invalid input is given, at which point your program should terminate.
- +5 bytes for every capitalization, punctuation, or spacing error
- +10 bytes for every wrong/missing letter
- -20 bytes if you can take a string like "X5C3Z6..." and output each respective message, separated by newlines.
- -30 bytes if you take a class input (either
Scout
,Soldier
,Pyro
,Demoman
,Heavy
,Engineer
,Sniper
,Medic
, orSpy
) and verify if the class can say the given expression. The only expression that applies isX8
, i.e.,MEDIC: ÜberCharge Ready
; only the Medic can say this. If any other class besides the medic attempts to say this, do not output anything. (The names are case insensitive.)
Leaderboard
var QUESTION_ID=63370,OVERRIDE_USER=8478;function answersUrl(e){return"http://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"http://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>
I'm guessing the
Ü
is mandatory? – phase – 2015-11-09T03:22:16.533Are we allowed to exit with an error when we're done taking input (i.e. if it's invalid or there is none left)? – cole – 2015-11-09T04:08:35.267
9If I choose
MEDIC!Thanks!Go Go Go!Move Up!...
as battle cry, I should be able to get a fairly low score... – Dennis – 2015-11-09T04:26:54.357In the examples, shouldn't there be a
!
afterActivate ÜberCharge
? – LegionMammal978 – 2015-11-09T11:52:41.567@LegionMammal978 Indeed. – Conor O'Brien – 2015-11-09T12:02:52.790
@Dennis If you were to do this challenge, you'd outgolf everybody anyhow. :P – Conor O'Brien – 2015-11-09T12:08:08.113
You should change the code snippet... now a 320.45 byte answer lists as 45 bytes. – ev3commander – 2015-11-09T19:21:10.710
@ev3commander Fixed. – Conor O'Brien – 2015-11-09T19:22:25.790
Please consider changing the accepted answer. – primo – 2015-11-20T03:19:43.050
Sorry @primo; I forgot – Conor O'Brien – 2015-11-20T04:59:43.467