Tor
Das Ziel dieser Herausforderung ist: Geben Sie eine Zeichenfolge als Eingabe ein und entfernen Sie doppelte Buchstabenpaare, wenn das zweite Element des Paares die entgegengesetzte Groß- und Kleinschreibung aufweist. (dh Großbuchstaben werden zu Kleinbuchstaben und umgekehrt).
Paare sollten von links nach rechts ausgetauscht werden. Zum Beispiel aAa
sollte werden aa
und nicht aA
.
Eingänge Ausgänge:
Input: Output:
bBaAdD bad
NniIcCeE Nice
Tt eE Ss tT T e S t
sS Ee tT s E t
1!1!1sStT! 1!1!1st!
nN00bB n00b
(eE.gG.) (e.g.)
Hh3lL|@! H3l|@!
Aaa Aa
aaaaa aaaaa
aaAaa aaaa
Die Eingabe besteht aus druckbaren ASCII-Symbolen.
Sie sollten keine doppelten Ziffern oder andere Nichtbuchstaben entfernen.
Wissen
Diese Herausforderung ist das Gegenteil von @nicaels "Duplicate & Switch" -Fall . Kannst du es umkehren?
Vielen Dank für alle Mitwirkenden aus der Sandbox!
Katalog
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
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 Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## 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 = 85509; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 36670; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//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 "//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(42), 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>
abB
?abB
oderab
?abB
sollte ausgebenab
aa
:;aA
;AA
, nur das mittlere Paar stimmt mit dem Muster überein und wirda
soaa
;a
;AA
Antworten:
Gelee , 8 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Retina , 18 Bytes
Probieren Sie es online!
Erläuterung
Dies ist eine einfache Ersetzung, die den relevanten Paaren entspricht und sie nur durch das erste Zeichen ersetzt. Die Paare werden abgeglichen, indem die Groß- / Kleinschreibung in der Mitte des Musters aktiviert wird:
Die Ersetzung schreibt einfach das Zeichen zurück, das wir bereits in der Gruppe erfasst
1
haben.quelle
Brachylog , 44 Bytes
Brachylog hat keine regulären Ausdrücke.
Erläuterung
quelle
C #
8775 BytesMit dem mächtigen Regex von Martin Ender. C # Lambda, wo die Eingabe und die Ausgabe sind
string
.12 Bytes von Martin Ender und TùxCräftîñg gespeichert.
C #,
141134 BytesC # Lambda, wo die Eingabe und die Ausgabe sind
string
. Der Algorithmus ist naiv. Dies ist die, die ich als Referenz verwende.Code:
7 Bytes dank Martin Ender!
Probiere sie online aus!
quelle
Perl,
4024 + 1 = 25 BytesVerwenden Sie den gleichen regulären Ausdruck wie Martin.
Benutze die
-p
FlaggeTeste es auf ideone
quelle
Python 3,
645958 BytesTeste es auf Ideone .
quelle
C 66 Bytes
quelle
Pyth,
2420 Bytes4 Bytes dank @Jakube.
Dies verwendet immer noch Regex, aber nur zum Tokenisieren.
Testsuite.
quelle
JavaScript (ES6),
71-68ByteErläuterung:
In Anbetracht
c>'@'
, für die einzige Möglichkeit ,parseInt(c+l,36)
ein Vielfaches von 37 zu sein , ist sowohl fürc
undl
den gleichen Wert haben (sie können nicht Null - Wert haben , weil wir Raum ausgeschlossen und Null, und wenn sie keinen Wert haben , dann wird der Ausdruck auswerten zuNaN<1
denen false) ist, dass sie den gleichen Buchstaben haben. Wir wissen jedoch, dass bei Groß- und Kleinschreibung nicht die gleiche Groß- und Kleinschreibung beachtet werden muss.Beachten Sie, dass dieser Algorithmus nur funktioniert, wenn ich jedes Zeichen überprüfe. Wenn ich versuche, es durch Übereinstimmungen mit Buchstaben zu vereinfachen, scheitert es an Dingen wie
"a+A"
.Bearbeiten: 3 Bytes dank @ edc65 gespeichert.
quelle
`
s wenn ich benutzereplace
. (Ich hatte sie nur vorher, um zu versuchen, konsistent zu sein, aber dann habe ich meine Antwort beim Bearbeiten zur Einreichung abgelegt und wurde wieder inkonsistent. Seufz ...)C,
129127125107106105939290888578 BytesAC Port meiner C # Antwort . Mein C kann ein bisschen schlecht sein. Ich benutze die Sprache nicht mehr oft. Jede Hilfe ist willkommen!
a!=b
=a^b
a&&b
=a*b
(c|32)==(d|32)
bitweises Problem behoben wurdeCode:
Probieren Sie es online!
quelle
f(char*s){while(*s) {char c=*s,d=s+1;putchar(c);s+=isalpha(c)&&d&&((c|32)==(d|32)&&c!=d);}}
s+++1
zu++s
.c
undd
wird immer druckbar sein ASCII,95
sollte also anstelle von arbeiten~32
. Auch ich denkec;d;f(char*s){for(;*s;){putchar(c=*s);s+=isalpha(c)*(d=*(++s))&&(!((c^d)&95)&&c^d);}}
würde funktionieren (aber ungetestet).MATL , 21 Bytes
Probieren Sie es online! . Oder überprüfen Sie alle Testfälle .
Erläuterung
Dies verarbeitet jedes Zeichen in einer Schleife. Bei jeder Iteration wird das aktuelle Zeichen mit dem vorherigen Zeichen verglichen. Letzteres ist in der Zwischenablage K gespeichert, die
4
standardmäßig aktiviert ist.Das aktuelle Zeichen wird zweimal mit dem vorherigen verglichen: zuerst ohne Berücksichtigung der Groß- und Kleinschreibung und dann mit Berücksichtigung der Groß- und Kleinschreibung. Das aktuelle Zeichen sollte nur dann gelöscht werden, wenn der erste Vergleich wahr und der zweite falsch war. Beachten Sie, dass das erste Zeichen immer beibehalten wird, da die Zwischenablage K anfänglich 4 enthält.
Wenn das aktuelle Zeichen gelöscht wird, sollte die Zwischenablage K zurückgesetzt werden (damit das nächste Zeichen erhalten bleibt). Andernfalls sollte es mit dem aktuellen Zeichen aktualisiert werden.
quelle
Java 7, 66 Bytes
Benutzt Martin Enders Regex aus seiner Retina-Antwort .
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
JavaScript (ES6),
61 Byte, 57Bytes=>s.replace(/./g,c=>l=c!=l&/(.)\1/i.test(l+c)?'':c,l='')
Vielen Dank an Neil für das Speichern von 5 Bytes.
quelle
s=>s.replace(/./g,c=>l=c!=l&/(.)\1/i.test(l+c)?'':c,l='')
"code".length
, habe nicht bemerkt, dass es eine Fluchtsequenz gibt. Danke(code).toString().length
.(code+"").length
JavaScript (ES6) 70
quelle
===
?0==""
aber nicht0===""
@NeilKonvex, 18 Bytes
Probieren Sie es online!
Ähnliches Vorgehen wie bei der Antwort von @Leaky Nun's Pyth . Es erstellt das Array
["aA" "bB" ... "zZ" "Aa" "Bb" ... "Zz" '.]
, verbindet sich mit dem'|
Zeichen und testet die Eingabe basierend auf diesem regulären Ausdruck. Dann wird das erste Zeichen jedes Matches genommen.quelle