Einführung
Hilfe! Ich habe versehentlich meinen TI-84-Taschenrechner aus dem Fenster geworfen (frag nicht wie) und er ist kaputt gegangen. Ich habe morgen einen Mathe-Test und der einzige Taschenrechner, den ich finden kann, ist einer mit diesen Knöpfen:
7 8 9 +
4 5 6 -
1 2 3 *
0 = /
Mein Mathe-Test ist ein Überprüfungstest zur Bewertung von Ausdrücken. Ich benötige ein Programm, um einen Ausdruck wie zum Beispiel 1+(5*4)/7
in die Tastenanschläge umzuwandeln, die zum Lösen auf meinem Ersatzrechner erforderlich sind. (Und falls Sie sich fragen, ist mir das tatsächlich passiert).
Herausforderung
Bei einer nicht-leere Eingabezeichenfolge enthält , nur die Zeichen 0-9
, (
, )
, +
, -
, *
, und /
, gibt die Tastenanschläge in einem Raum getrennten Zeichenfolge (z. 1 + 3 / 3 =
). Am Ende der Ausgabe muss immer ein Gleichheitszeichen stehen. Standardlücken sind nicht erlaubt.
Beispiele:
- Eingabe:,
1+(5*4)/7
Ausgabe:5 * 4 / 7 + 1 =
- Eingabe:,
6*(2/3)
Ausgabe:2 / 3 * 6 =
- Eingabe:,
(7-3)/2
Ausgabe:7 - 3 / 2 =
Um diese Herausforderung zu vereinfachen:
- Sie können davon ausgehen, dass mit der Eingabe eine Reihe von Tastenanschlägen verknüpft sind, für die kein Löschen des Rechners erforderlich
1-(7*3)
ist ( ist nicht gültig, da Sie erst suchen7 * 3
und dann den Rechner löschen müssen)1 - 21
. Alle obigen Beispiele sind gültig, da es einen gibt , kontinuierliche Ausgabe, bei der der Benutzer den Taschenrechner nicht löschen und sich eine Zahl merken muss). - Sie können davon ausgehen, dass es nach a nur eine einzelne Ganzzahl gibt
/
, da diese eine Eingabe hat,21/(7*3)
die auch die erste Annahme nicht erfüllt. - Sie können davon ausgehen, dass
*
zwischen einer Ganzzahl und einer linken Klammer immer ein (Valid6*(7)
:, Invalid:) steht6(7)
. - Sie können davon ausgehen, dass die Eingabe immer eine Ganzzahlausgabe erzeugt.
- Sie können davon ausgehen, dass die Eingabe nur drei Klammerstufen enthält.
Nichtbeispiele
2-(14/2)
wie du tun müsstest14 / 2
, dann klar , dann2 - 7
.36/(2*3)
wie du tun müsstest2 * 3
, dann klar , dann36 / 6
.1024*4/(1*2+2)
wie du tun müsstest1*2+2
, dann klar , dann1024 * 4 / 4
.
Boni
- -5%, wenn Ihr Programm die Multiplikation in Klammern erkennt (das weiß es
6(7)=6*(7)
). - -5% , wenn Sie die Programmeingabe mit Dezimalzahlen verarbeiten kann (
3.4
,2.75
,7.8
) und die Ausgabe enthält.
(wie es sein , muss.
in diesem Fall Schlüssel auf meinem Ersatzrechner). - -5%, wenn Ihr Programm eine unbegrenzte Anzahl von Klammern verarbeiten kann.
Dies ist Code-Golf , der kürzeste Code in Bytes (einschließlich der Boni) gewinnt!
Bestenlisten
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
## [><>](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)
wird nicht passieren, es sagt auch , dass das Zeichen ?
in 6?(7)
immer sein wird *
.