Die Idee ist einfach. Sie müssen einen "visualisierten" Buchstabenersatz erstellen, indem Sie 3 Zeichenfolgen bereitstellen (Eingabe kann durch Kommas getrennt, separate Eingaben oder als Array erfolgen). Das erste Segment ist das Wort, das Sie korrigieren möchten, und das zweite Segment sind die Buchstaben, die Sie ersetzen möchten, und das dritte Segment ist der Ersatz für die Buchstaben in Segment 2.
Beispielsweise:
| | Input | Starting Word | Output |
|----|-----------------------------|---------------|-------------|
| #1 | Hello world -wo -ld +Ea +th | Hello world | Hello Earth |
| #2 | Hello World -wo -ld +Ea +th | Hello World | Hello Worth |
| #3 | Hello -llo +y | Hello | Hey |
| #4 | Red -R -d +Gr +en | Red | Green |
| #5 | mississippi -is -i +lz +p | mississippi | mlzslzspppp |
| #6 | Football -o -a +a +i | Football | Fiitbill |
| #7 | mississippi -is -i +iz +p | mississippi | mpzspzspppp |
Erläuterung
Der Austausch erfolgt schrittweise mit dem jeweiligen Paar. Hier ist eine Abbildung mit einer Eingabe von mississippi -is -i +iz +p
, um die Ausgabe zu geben mpzspzsppp
(siehe Beispiel #7
oben)
| Step | Input | Output |
|------ |--------------------------- |------------- |
| #1 | mississippi -is -i +iz +p | |
| #2 | mississippi -is +iz | mizsizsippi |
| #3 | mizsizsippi -i +p | mpzspzspppp |
Regeln
- Die Eingaben erfolgen immer in dieser Reihenfolge
<starting_string> <list_of_letters_to_replace> <replacement_letters>
. - Zu ersetzende Buchstaben und Ersatzgruppen werden niemals gemischt (dh: es wird niemals Buchstaben geben
-a +i -e +o
). - Buchstaben, die ersetzt werden sollen, werden immer vorangestellt
-
und Ersatzbuchstaben immer vorangestellt+
. (Das Präfix ist obligatorisch) - Möglicherweise müssen mehrere Buchstaben ersetzt werden. Sie müssen sich also das Präfix ansehen.
- Angenommen, die Anzahl der zu ersetzenden Buchstabengruppen und die Anzahl der zu ersetzenden Buchstabengruppen sind immer gleich (dh, es wird niemals eine geben
-a -e +i
). - Bei Ersetzungen wird zwischen Groß- und Kleinschreibung unterschieden (siehe Beispiel
#1
und#2
). - Ersetzungen erfolgen in der Reihenfolge, in der sie in der Eingabe angegeben wurden.
- Briefersetzungen können durch andere Ersetzungen ersetzt werden. Siehe Beispiel
#6
. - Das erste Segment (Ausgangswort) wird nie enthalten
-
oder+
Zeichen. - Das ist Code-Golf, also gewinnen die kürzesten Bytes.
Bestenlisten
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
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 Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=96473,OVERRIDE_USER=38505;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>
letter to replace
(mit Vorzeichen-
) und Eingabe int (n / 2) +1 bis n-1 sindreplacement
(mit Vorzeichen+
)gello
) und mir dann den Briefersatz geschickt (-g +h
), weil er nerven wollte, anstatt ihn zu sendenhello*
.Antworten:
05AB1E ,
15 -17 BytesProbieren Sie es online!
Erläuterung
Oder mit einem weniger strengen Eingabeformat
Probieren Sie es online aus
quelle
JavaScript (ES6),
8583 BytesTestfälle
Code-Snippet anzeigen
quelle
Pyke,
1311 BytesProbieren Sie es hier aus!
Oder 2 Bytes, wenn in einem anderen Eingabeformat:
Probieren Sie es hier aus!
quelle
Perl, 58 Bytes
57 Byte Code + 1 für
-p
.Erfordert das erste Element in einer Zeile, dann das Ersetzen in der nächsten. Ein großes Dankeschön an @Dada, der sich einen anderen Ansatz ausgedacht hat , um die Anzahl der Bytes um 4 zu reduzieren!
Verwendung
quelle
perl -pE 's/(.*?) -(\S*)(.*?)\+(\S*)/"(\$1=~s%$2%$4%gr).\"$3\""/ee&&redo'
. Ich schaffe es nicht, es kürzer zu machen, aber vielleicht kannst du das :)perl -pE '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee'
. (Nimmt die Zeichenfolge in einer Zeile und die "Flags" in der nächsten Zeile)GNU sed 86 Bytes
Beinhaltet +1 für -r
Probieren Sie es online!
Beispiel:
quelle
PHP,
98 bis97 BytesDiese Herausforderung beschreibt das genaue Verhalten von str_replace. Für PHP dreht sich alles darum, die Arrays von Ersetzungen zu erstellen. Ich habe versucht, es mit nur einer "Teilzeichenfolge" zu tun, aber das ist möglicherweise nicht die beste Lösung. Verwenden Sie wie:
edit: 1 Byte gespeichert dank Titus
quelle
$v[0]>'+'
speichert ein Byte über$v[0]=='-'
. Sie könntenord($v)&4
stattdessen auch verwenden .Java 7,
153133 BytesUngolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
new String[]{'Rom Ro. Rom", "-Ro." , "+No."}
? Schreiben Sie einfach etwas, das (hoffentlich) zu einer falschen Regex passt.Rom No. Rom
. Übrigens, Sie können es selbst versuchen, indem Sie auf denTry it here.
Link im Beitrag klicken und ihn dann teilen. :)PHP, 164 Bytes
quelle
Vim, 25 Bytes
qq+dE+r-PdiW:1s<C-R>"-g<CR>@qq@q
Setzt die Eingabe in folgendem Format voraus:
+dE+r-PdiW
: Kombiniert-
und+
in ein einzelnes Register, mit dem+
in ein-
.:1s<C-R>"-g
: Verwendet das Register als Code-Snippet, das direkt in den:s
Befehl eingefügt wird , und-
als Trennzeichen.quelle
Konvex , 19 Bytes
Probieren Sie es online!
quelle
R
9894 BytesBearbeiten: 4 Bytes dank @rturnbull gespeichert
Ungolfed und Testfälle
Da
scan
(liest die Eingabe von stdin) in R-Fiddle nicht richtig funktioniert, zeige ich das Programm, indem ich es stattdessen in eine Funktion einpacke. Beachten Sie, dass die Funktion einen Vektor als eine Eingabe nimmt und kann durch beispielsweise ausgeführt werden:f(c("Hello world", "-wo", "-ld", "+Ea", "+th"))
. Das obige überarbeitete Programm würde den Benutzer zur Eingabe mit stdin auffordern, wobei das Eingeben"Hello world" -wo -ld -Ea +th
in die Konsole dasselbe Ergebnis liefern würde.Führe den Code auf R-fiddle aus
quelle
"
die Eingabezeichenfolge verwenden müssen?"Hello world" => enter => "-wo" => enter => "-ld" => enter => "+Ea" => enter =>"+th"
:).l=length(i)
zul=length(i)/2
und die spätere Verweise auf die Aktualisierungl
.Haskell,
8578 BytesAnwendungsbeispiel:
("mississippi" # "-is -i") "+lz +p"
->"mlzslzspppp"
.Wie es funktioniert:
Edit: @BlackCap hat 6 Bytes zum Speichern gefunden und ich selbst noch eins.
quelle
import Data.Lists;a#b=foldl(uncurry replace
Flip)a.zip(g b).g;g=map tail.words
flip
Infix zu machen . Das Standardpräfix ist ein Byte kürzer.Python 3, 93 Byte
Probieren Sie es online!
Die Eingabe ist eine Liste mit Zeichenfolgen, Ersetzungszeichenfolgen sind durch Leerzeichen getrennt.
Beispiel Eingabe:
['mississippi','-is -i','+iz +p']
quelle
PowerShell v2 +, 90 Byte
Nimmt Eingaben als drei Argumente an, wobei die Zeichenfolge
-
und durch+
Leerzeichen getrennt sind. Führt ein-split
On aus$b
(-split
wenn Sie auf unäre Weise agieren, wird das Whitespace aufgespalten) und|%{...}
durchläuft dann jedes von diesen. Bei jeder Iteration entfernen wir die Zeichenfolge-
, suchen die nächste[$i++]
Ersatzzeichenfolge und entfernen die Zeichenfolge+
, und verwenden die Zeichenfolge-creplace
(Ersetzen unter Berücksichtigung der Groß- und Kleinschreibung),$a
um sie in Scheiben zu schneiden und zu speichern$a
. Wird$a
dann in der Pipeline belassen und die Ausgabe ist implizit.quelle
PHP, 106 Bytes
geradliniger Ansatz. Laufen Sie mit
php -r '<code> <arguments>
.quelle