介绍
事实证明,外星人像我们一样爱模因。到目前为止,我们遇到的每一个外星人种族都有自己的版本2spooky4me
(请参见以下问题)和等效版本,但有所不同。CUTE1f星球上的居民无法承受很多鬼怪,因此他们更喜欢1spooky2me
鬼怪,而skeletor7的迷们喜欢它们一些鬼怪,因此他们倾向于使用9spooky11me
。
挑战
翻译模因是一项艰苦的工作,因此您要编写一个通用的模因翻译器,以帮助这些人正确访问模因网。您的程序将接受一个模因和一个变换,以应用于该模因中的数字序列,以使其适合其他星球的居民。
输入项
您的程序将收到两个字符串输入:
- 输入模因(例如
2spooky4me
)。火柴[a-zA-Z0-9]+
。
- 要应用的转换(例如
+1
,从2spooky4me
到3spooky5me
)。匹配[+\-*/^]\d+
(你必须接受+
,-
,*
,/
,并^
为运营商,无论在你的语言本地表示的)。
输出量
您的程序必须返回字符串输出(打印到标准输出或等效输出),并将给定的转换应用于输入模因中的数字序列。在一系列怪异的事件中,结果还表明,到目前为止遇到的所有种族都喜欢积分模因而不是分数模因,因此这些转换应执行整数算术(例如1spooky1me /2
应该产生0spooky0me
)。
例子
标准算术运算适用:
Input: 2spooky4me +1
Output: 3spooky5me
Input: 2spooky4me -1
Output: 1spooky3me
Input: 2spooky4me *15
Output: 30spooky60me
Input: 10spooky900me /5
Output: 2spooky180me
数字序列是不可或缺的;整数截断应在以下情况下发生:
Input: idontunderstandmemes3 /2
Output: idontunderstandmemes1
您的输入内容可能没有任何数字序列:
Input: notreallyafunnymeme *100
Output: notreallyafunnymeme
即使您选择的语言不是本机运算,您也必须支持幂运算:
Input: 2spooky4me ^3
Output: 8spooky64me
字符串中数字序列的数量对字符串的长度没有限制:
Input: some1meme2sequences3can4be5really6long7 /2
Output: some0meme1sequences1can2be2really3long3
附录
如果您的语言支持任意精度整数作为语言功能,则必须使用这些整数。如果不是,则不需要支持任意精度的整数。例如,您必须Integer
在Haskell中使用,而不是Int
因为它可以作为语言的一部分使用;在中Java
,您不需要使用,BigInteger
因为它是库功能,而不是语言功能。
Input: 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky4me /2
Output: 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky2me
这是代码高尔夫,因此禁止标准漏洞,以字节为单位的最短答案为胜!
排行榜
这篇文章底部的堆栈摘录从答案a)生成排行榜,答案是每种语言的最短解决方案列表,b)则是总体排行榜。
为确保您的答案显示出来,请使用以下Markdown模板以标题开头。
## Language Name, N bytes
N
您提交的文件大小在哪里。如果您提高了分数,则可以将旧分数保留在标题中,方法是将它们打掉。例如:
## Ruby, <s>104</s> <s>101</s> 96 bytes
如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:
## Perl, 43 + 2 (-p flag) = 45 bytes
您还可以将语言名称设置为链接,然后该链接将显示在代码段中:
## [><>](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>