Wprowadzenie
Wsparcie! Przypadkowo upuściłem kalkulator TI-84 przez okno (nie pytaj jak) i się zepsuł. Mam jutro test matematyczny, a jedynym kalkulatorem, który mogę znaleźć, jest ten z tymi przyciskami:
7 8 9 +
4 5 6 -
1 2 3 *
0 = /
Mój test matematyczny jest sprawdzianem oceny wyrażeń. Potrzebuję programu do wyrażenia takiego jak 1+(5*4)/7
i przekonwertowania go na naciśnięcia klawiszy potrzebne do rozwiązania go na moim zapasowym kalkulatorze. (A gdybyś się zastanawiał, tak się ze mną stało).
Wyzwanie
Biorąc niepusty ciąg wejściowy zawierający tylko ze znaków 0-9
, (
, )
, +
, -
, *
, a /
wyjście z klawiszy w łańcuchu przestrzeń oddzielona (np. 1 + 3 / 3 =
). Na końcu danych wyjściowych zawsze musi znajdować się znak równości. Standardowe luki są niedozwolone.
Przykłady:
- Wejście:,
1+(5*4)/7
Wyjście:5 * 4 / 7 + 1 =
- Wejście:,
6*(2/3)
Wyjście:2 / 3 * 6 =
- Wejście:,
(7-3)/2
Wyjście:7 - 3 / 2 =
Aby ułatwić to wyzwanie:
- Możesz założyć, że na wejściu jest połączona seria naciśnięć klawiszy, która nie wymaga wyczyszczenia kalkulatora (
1-(7*3)
jest niepoprawna, ponieważ wymagałaby odnalezienia7 * 3
, a następnie wyczyszczenia kalkulatora1 - 21
. Wszystkie powyższe przykłady są prawidłowe, ponieważ istnieje jeden , ciągłe wyjście, które nie wymaga od użytkownika wyczyszczenia kalkulatora i zapamiętania liczby). - Możesz założyć, że po a będzie tylko jedna liczba całkowita
/
, ponieważ posiadanie danych wejściowych,21/(7*3)
które nie przeszłyby również pierwszego założenia. - Możesz założyć, że zawsze będzie
*
nawias całkowity i lewy nawias (ważny:,6*(7)
nieprawidłowy:)6(7)
. - Możesz założyć, że dane wejściowe zawsze generują wartości całkowite.
- Możesz założyć, że dane wejściowe mają tylko trzy poziomy nawiasów.
Nie-przykłady
2-(14/2)
jak trzeba by zrobić14 / 2
, to usunąć , a następnie2 - 7
.36/(2*3)
jak trzeba by zrobić2 * 3
, to usunąć , a następnie36 / 6
.1024*4/(1*2+2)
jak trzeba by zrobić1*2+2
, to usunąć , a następnie1024 * 4 / 4
.
Bonusy
- -5%, jeśli twój program rozpoznaje mnożenie nawiasów (wie o tym
6(7)=6*(7)
). - -5% jeśli program może obsługiwać dane wejściowe z liczb dziesiętnych (
3.4
,2.75
,7.8
) a wyjście obejmuje.
(jak tam musi być.
klucz na wolnym kalkulatorem w tym przypadku). - -5%, jeśli twój program może obsługiwać nieograniczoną liczbę nawiasów.
To jest golf-code , wygrywa najkrótszy kod w bajtach (łącznie z bonusami)!
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
## [><>](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)
nie będzie się działo, to także mówi, że znak ?
na 6?(7)
zawsze będzie *
.