Giới thiệu
Hóa ra, người ngoài hành tinh yêu memes cũng nhiều như chúng ta. Tuy nhiên, mọi chủng tộc ngoài hành tinh chúng ta gặp phải đều có phiên bản riêng 2spooky4me
(xem câu hỏi sau ) và tương đương, với một số biến thể. Cư dân của hành tinh CUTE1f không thể xử lý nhiều ma quỷ, vì vậy, ma 1spooky2me
quỷ ưa thích của họ là , trong khi những người ghi nhớ skeletor7 yêu thích họ một số ma quỷ, vì vậy họ có xu hướng sử dụng 9spooky11me
.
Thử thách
Dịch meme là một công việc khó khăn, vì vậy bạn đã được giao nhiệm vụ viết một trình dịch meme phổ quát để giúp những người này truy cập vào memenet một cách chính xác. Chương trình của bạn sẽ chấp nhận một meme và một phép biến đổi để áp dụng cho các chuỗi chữ số trong meme đó để làm cho nó phù hợp với cư dân của một hành tinh khác.
Đầu vào
Chương trình của bạn sẽ nhận được hai chuỗi đầu vào:
- Các meme đầu vào (ví dụ
2spooky4me
). Các trận đấu [a-zA-Z0-9]+
.
- Việc chuyển đổi để áp dụng cho nó (ví dụ
+1
, để đi từ 2spooky4me
đến 3spooky5me
). Trận đấu [+\-*/^]\d+
(bạn phải chấp nhận +
, -
, *
, /
, và ^
như các nhà khai thác, không phụ thuộc vào diện tự nhiên trong ngôn ngữ của bạn).
Đầu ra
Chương trình của bạn phải trả về một đầu ra chuỗi (được in thành đầu ra tiêu chuẩn hoặc tương đương) với phép chuyển đổi đã cho được áp dụng cho các chuỗi chữ số trong meme đầu vào. Trong một diễn biến kỳ lạ, nó cũng chỉ ra rằng tất cả các chủng tộc gặp phải cho đến nay đều thích các memes tích phân hơn các phân số, vì vậy các phép biến đổi này sẽ thực hiện số học số nguyên (ví dụ như 1spooky1me /2
sẽ dẫn đến 0spooky0me
).
Ví dụ
Các phép toán số học tiêu chuẩn được áp dụng:
Input: 2spooky4me +1
Output: 3spooky5me
Input: 2spooky4me -1
Output: 1spooky3me
Input: 2spooky4me *15
Output: 30spooky60me
Input: 10spooky900me /5
Output: 2spooky180me
Chuỗi số là không thể thiếu; cắt ngắn số nguyên nên xảy ra trong trường hợp như thế này:
Input: idontunderstandmemes3 /2
Output: idontunderstandmemes1
Đầu vào của bạn có thể không có bất kỳ chuỗi chữ số nào:
Input: notreallyafunnymeme *100
Output: notreallyafunnymeme
Bạn phải hỗ trợ lũy thừa, ngay cả khi đó không phải là thao tác gốc trong ngôn ngữ bạn chọn:
Input: 2spooky4me ^3
Output: 8spooky64me
Không có giới hạn về độ dài chuỗi số lượng chuỗi số trong chuỗi:
Input: some1meme2sequences3can4be5really6long7 /2
Output: some0meme1sequences1can2be2really3long3
Phụ lục
Nếu ngôn ngữ của bạn hỗ trợ các số nguyên chính xác tùy ý như một tính năng ngôn ngữ, bạn phải sử dụng các số nguyên đó. Nếu không, bạn không cần phải hỗ trợ các số nguyên chính xác tùy ý. Ví dụ: bạn phải sử dụng Integer
trong Haskell thay Int
vì vì nó có sẵn như là một phần của ngôn ngữ; trong Java
, bạn không bắt buộc phải sử dụng BigInteger
vì đó là tính năng thư viện, không phải tính năng ngôn ngữ.
Input: 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky4me /2
Output: 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky2me
Đây là môn đánh gôn , vì vậy các lỗ hổng tiêu chuẩn bị cấm và câu trả lời ngắn nhất tính theo byte sẽ thắng!
Bảng xếp hạng
Đoạn trích Stack ở cuối bài này tạo bảng xếp hạng từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.
Để đả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ờ của thông dịch viên), 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:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = 79809; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 45941; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>