Einführung
Es stellt sich heraus, dass Aliens Meme genauso lieben wie wir. Jede fremde Rasse, der wir bisher begegnet sind, hat eine eigene Version von 2spooky4me
(siehe folgende Frage ) und eine entsprechende Version , allerdings mit einigen Abweichungen. Die Bewohner des Planeten CUTE1f können nicht viel mit Spuk umgehen, so dass ihr bevorzugter Spuk ist 1spooky2me
, während skeletor7 Mitglieder sie als Spuk lieben, so dass sie dazu neigen, Spuk zu benutzen 9spooky11me
.
Herausforderung
Das Übersetzen von Memes ist harte Arbeit. Sie haben also die Aufgabe, einen universellen Meme-Übersetzer zu schreiben, der diesen Leuten hilft, richtig auf das Memenet zuzugreifen. Ihr Programm akzeptiert ein Mem und eine Transformation, die auf die Ziffernfolgen in diesem Mem angewendet werden, damit es für die Bewohner eines anderen Planeten geeignet ist.
Eingang
Ihr Programm erhält zwei Texteingaben:
- Das Eingabe-Meme (zB
2spooky4me
). Streichhölzer [a-zA-Z0-9]+
.
- Die Transformation, die darauf angewendet werden soll (z. B.
+1
von 2spooky4me
nach 3spooky5me
). Spiele [+\-*/^]\d+
(Sie müssen akzeptieren +
, -
, *
, /
, und ^
als Betreiber, unabhängig von der nativen Darstellung in Ihrer Sprache).
Ausgabe
Ihr Programm muss eine Zeichenfolgenausgabe (gedruckt als Standardausgabe oder gleichwertig) mit der angegebenen Transformation zurückgeben, die auf die Ziffernfolgen im Eingabemem angewendet wird. In einer seltsamen Wendung der Ereignisse stellt sich auch heraus, dass alle bisher angetroffenen Rassen ganzzahlige Meme gegenüber fraktionierten vorziehen, sodass diese Transformationen eine Ganzzahlarithmetik durchführen sollten (z. B. ergeben 1spooky1me /2
sollten 0spooky0me
).
Beispiele
Es gelten die üblichen Rechenoperationen:
Input: 2spooky4me +1
Output: 3spooky5me
Input: 2spooky4me -1
Output: 1spooky3me
Input: 2spooky4me *15
Output: 30spooky60me
Input: 10spooky900me /5
Output: 2spooky180me
Ziffernfolgen sind ganzzahlig; Integer-Trunkierung sollte in folgenden Fällen auftreten:
Input: idontunderstandmemes3 /2
Output: idontunderstandmemes1
Ihre Eingabe darf keine Ziffernfolgen enthalten:
Input: notreallyafunnymeme *100
Output: notreallyafunnymeme
Sie müssen die Potenzierung unterstützen, auch wenn es sich nicht um eine native Operation in der Sprache Ihrer Wahl handelt:
Input: 2spooky4me ^3
Output: 8spooky64me
Es gibt keine Begrenzung für die Länge der Zeichenfolge für die Anzahl der Ziffernfolgen in der Zeichenfolge:
Input: some1meme2sequences3can4be5really6long7 /2
Output: some0meme1sequences1can2be2really3long3
Nachtrag
Wenn Ihre Sprache Ganzzahlen mit beliebiger Genauigkeit als Sprachfunktion unterstützt, müssen Sie diese verwenden. Wenn dies nicht der Fall ist, müssen Sie keine Ganzzahlen mit beliebiger Genauigkeit unterstützen. Beispielsweise müssen Sie Integer
in Haskell verwenden, anstatt, Int
weil es als Teil der Sprache verfügbar ist. In Java
müssen Sie nicht verwenden, BigInteger
da es sich um eine Bibliotheksfunktion und nicht um eine Sprachfunktion handelt.
Input: 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky4me /2
Output: 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky2me
Das ist Code-Golf , also sind Standard-Schlupflöcher verboten und die kürzeste Antwort in Bytes gewinnt!
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert die Rangliste aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamtrangliste.
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 Nummern in Ihrem Header enthalten sein sollen (zB weil Ihre Punktzahl ist die Summe von zwei Dateien oder Sie wollen Liste Dolmetscher Flagge Strafen separat), stellen Sie sicher , dass die tatsächliche Punktzahl der ist letzte Nummer in der Kopfzeile:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](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>