Giới thiệu
Cứu giúp! Tôi vô tình làm rơi máy tính TI-84 ra khỏi cửa sổ (không hỏi làm thế nào) và nó bị hỏng. Tôi có một bài kiểm tra toán vào ngày mai và máy tính duy nhất tôi có thể tìm thấy là một máy có các nút này:
7 8 9 +
4 5 6 -
1 2 3 *
0 = /
Bài kiểm tra toán của tôi là một bài kiểm tra đánh giá về đánh giá biểu thức. Tôi cần một chương trình để thực hiện một biểu thức như 1+(5*4)/7
và chuyển đổi nó thành tổ hợp phím cần thiết để giải quyết nó trên máy tính dự phòng của tôi. (Và trong trường hợp bạn đang tự hỏi, điều này thực sự đã xảy ra với tôi).
Thử thách
Cho một chuỗi đầu vào không có sản phẩm nào có chứa chỉ các nhân vật 0-9
, (
, )
, +
, -
, *
, và /
, sản lượng các tổ hợp phím trong một chuỗi không gian tách ra (ví dụ. 1 + 3 / 3 =
). Luôn phải có một dấu bằng ở cuối đầu ra. Sơ hở tiêu chuẩn không được phép.
Ví dụ:
- Đầu vào :
1+(5*4)/7
, Đầu ra:5 * 4 / 7 + 1 =
- Đầu vào :
6*(2/3)
, Đầu ra:2 / 3 * 6 =
- Đầu vào :
(7-3)/2
, Đầu ra:7 - 3 / 2 =
Để làm cho thử thách này dễ dàng hơn:
- Bạn có thể giả sử rằng đầu vào có một loạt các tổ hợp phím được liên kết với nó mà không yêu cầu xóa máy tính (
1-(7*3)
không hợp lệ vì nó sẽ yêu cầu bạn tìm7 * 3
, sau đó xóa máy tính để làm1 - 21
. Tất cả các ví dụ trên đều hợp lệ vì có một , đầu ra liên tục không yêu cầu người dùng xóa máy tính và ghi nhớ một số). - Bạn có thể giả định rằng sẽ chỉ có một số nguyên duy nhất sau một
/
, vì có một đầu vào như21/(7*3)
sẽ không vượt qua giả định đầu tiên. - Bạn có thể giả sử rằng sẽ luôn có một
*
số nguyên và dấu ngoặc trái (Hợp lệ :6*(7)
, Không hợp lệ6(7)
:). - Bạn có thể giả sử đầu vào luôn tạo ra đầu ra số nguyên.
- Bạn có thể giả sử đầu vào chỉ có ba cấp độ dấu ngoặc đơn.
Không ví dụ
2-(14/2)
như bạn sẽ phải làm14 / 2
, sau đó rõ ràng , sau đó2 - 7
.36/(2*3)
như bạn sẽ phải làm2 * 3
, sau đó rõ ràng , sau đó36 / 6
.1024*4/(1*2+2)
như bạn sẽ phải làm1*2+2
, sau đó rõ ràng , sau đó1024 * 4 / 4
.
Tiền thưởng
- -5% nếu chương trình của bạn có thể nhận ra dấu ngoặc đơn (nó biết điều đó
6(7)=6*(7)
). - -5% nếu chương trình của bạn có thể xử lý đầu vào với số thập phân (
3.4
,2.75
,7.8
) và đầu ra bao gồm.
(như phải có một.
phím trên máy tính rảnh rỗi của tôi trong trường hợp này). - -5% nếu chương trình của bạn có thể xử lý các mức ngoặc đơn không giới hạn.
Đây là mã golf , mã ngắn nhất tính bằng byte (bao gồm cả tiền thưởng) 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ờ phiên dịch), 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 liên kết 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=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)
sẽ không xảy ra, nó cũng nói rằng các dấu hiệu ?
trong 6?(7)
sẽ luôn luôn là một *
.