introduzione
Aiuto! Ho accidentalmente lasciato cadere la calcolatrice TI-84 fuori dalla finestra (non chiedere come) e si è rotto. Domani ho un test di matematica e l'unica calcolatrice che posso trovare è una con questi pulsanti:
7 8 9 +
4 5 6 -
1 2 3 *
0 = /
Il mio test di matematica è un test di revisione sulla valutazione delle espressioni. Ho bisogno di un programma per prendere un'espressione come 1+(5*4)/7
e convertirla nei tasti necessari per risolverlo sul mio calcolatore di riserva. (E nel caso te lo stessi chiedendo, questo è successo a me).
Sfida
Data una stringa di input non vuota contenente solo il caratteri 0-9
, (
, )
, +
, -
, *
, e /
, in uscita i tasti di una stringa separata da spazi (es. 1 + 3 / 3 =
). Ci deve sempre essere un segno di uguale alla fine dell'output. Non sono ammesse scappatoie standard.
Esempi:
- Ingresso:,
1+(5*4)/7
Uscita:5 * 4 / 7 + 1 =
- Ingresso:,
6*(2/3)
Uscita:2 / 3 * 6 =
- Ingresso:,
(7-3)/2
Uscita:7 - 3 / 2 =
Per semplificare questa sfida:
- Si può presumere che l'input abbia una serie di sequenze di tasti collegate ad esso che non richiedono la cancellazione della calcolatrice (
1-(7*3)
non è valido poiché richiederebbe di trovare7 * 3
, quindi cancellare la calcolatrice da fare1 - 21
. Tutti gli esempi sopra sono validi poiché ce n'è uno , output continuo che non richiede all'utente di cancellare la calcolatrice e ricordare un numero). - Si può presumere che ci sarà un solo numero intero dopo a
/
, in quanto avere un input tale da21/(7*3)
non superare neanche la prima ipotesi. - Si può presumere che ci sarà sempre
*
una parentesi tra un numero intero e una sinistra (valido:,6*(7)
non valido:)6(7)
. - Si può presumere che l'input produca sempre output intero.
- Si può presumere che l'input abbia solo tre livelli di parentesi.
Non esempi
2-(14/2)
come avresti dovuto fare14 / 2
, quindi cancellare , quindi2 - 7
.36/(2*3)
come avresti dovuto fare2 * 3
, quindi cancellare , quindi36 / 6
.1024*4/(1*2+2)
come avresti dovuto fare1*2+2
, quindi cancellare , quindi1024 * 4 / 4
.
bonus
- -5% se il tuo programma è in grado di riconoscere la moltiplicazione tra parentesi (lo sa
6(7)=6*(7)
). - -5% se il programma è in grado di gestire in ingresso con i numeri decimali (
3.4
,2.75
,7.8
) e l'uscita include.
(come ci deve essere un.
tasto sulla mia calcolatrice di riserva in questo caso). - -5% se il tuo programma è in grado di gestire un numero illimitato di parentesi.
Questo è il code-golf , il codice più breve in byte (inclusi i bonus) vince!
Classifiche
Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.
Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, utilizzando il seguente modello Markdown:
## Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:
## Perl, 43 + 2 (-p flag) = 45 bytes
Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=61751,OVERRIDE_USER=141697;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>
6(7)
non accadrà, si dice anche che il segno ?
in 6?(7)
sarà sempre una *
.