Die Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die mit drei Zeichenfolgen A, B, C
eine Ausgabezeichenfolge erzeugt, durch die jede Instanz von B
in A
rekursiv ersetzt wurde C
. Rekursives Ersetzen bedeutet das Wiederholen eines Ersetzens, wobei bei jedem Schritt alle nicht überlappenden Instanzen von B
in A
(gierig von links nach rechts gewählt) durch ersetzt werden, C
bis B
nicht mehr in enthalten ist A
.
Input-Output
- Sie können eine der Standardmethoden für E / A verwenden .
- Zeichenfolgen enthalten nur druckbare ASCII-Zeichen (und können beliebige davon enthalten).
B
wird niemals eine leere Zeichenfolge sein, währendA
undC
möglicherweise.- Zeichenfolgen sind als Klartext zu betrachten, Sie können sie beispielsweise nicht
B
als Regex-Muster behandeln. - Einige Kombinationen von Eingaben werden niemals beendet. Ihr Programm kann in diesen Fällen alles tun.
Testfälle
Diese sind im Format: A/B/C\nOutput
Hello, world!/world!/PPCG
Hello, PPCG
Uppercase is up/up/down
Uppercase is down
ababababa/aba/ccc
cccbcccba
delete/e/{empty string}
dlt
{empty string}/no/effect
{empty string}
llllrrrr/lr/rl
rrrrllll
+-+-+-+/+-+/+
+
ababababa/aba/bada
badabbadbada
abaaba/aba/ab
abb
((())())())/()/{empty string}
)
Beispiele, die nicht enden:
grow/ow/oow
loop/lo/lo
code-golf
string
substitution
code-golf
math
code-golf
string
set-theory
code-golf
code-golf
compile-time
code-golf
kolmogorov-complexity
binary
code-golf
sequence
cops-and-robbers
code-golf
subsequence
card-games
code-golf
sequence
primes
code-golf
code-golf
number
graphical-output
music
code-golf
ascii-art
code-golf
string
lambda-calculus
code-golf
string
code-generation
code-golf
unicode
code-golf
math
combinatorics
code-golf
balanced-string
code-golf
sequence
cops-and-robbers
code-golf
sequence
cops-and-robbers
code-challenge
fastest-code
chess
code-golf
math
graphical-output
code-golf
string
hello-world
animation
code-golf
number
arithmetic
code-golf
integer
code-golf
code-golf
combinatorics
code-golf
kolmogorov-complexity
graphical-output
code-golf
string
code-golf
code-golf
game
code-golf
math
combinatorics
code-golf
ascii-art
popularity-contest
random
code-golf
arithmetic
number-theory
integer
code-golf
tips
underload
code-golf
math
sequence
primes
code-golf
math
path-finding
code-golf
ascii-art
primes
code-golf
kolmogorov-complexity
alphabet
Löwe
quelle
quelle
((())())())/()/
downpercase is down
Antworten:
05AB1E , 2 Bytes
Probieren Sie es online!
Erläuterung
Dies könnte
:
für 1 Byte sein, wenn wir uns nicht mit leeren Zeichenfolgen befassen müssten .quelle
:
Ist also im Grunde eine integrierte Lösung, die die gesamte Herausforderung löst? Ich hätte builtins verbieten sollen;)Python 2 , 43 Bytes
Probieren Sie es online!
Wertet eine Zeichenfolge des Formulars aus
Um einen festen Punkt zu erreichen, genügt es, Ersetzungen vorzunehmen, die der Länge der ursprünglichen Zeichenfolge entsprechen.
quelle
ES6 (Javascript),
4743 BytesGolf gespielt
Versuch es
quelle
c=>b=>g=a=>a==(a=a.split(b).join(c))?a:g(a)
Some combinations of inputs will never terminate. Your program can do anything in those cases.
Retina , 27 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Der Eingang sollte durch Zeilenvorschub getrennt sein.
Probieren Sie es online! (Verwendet der Einfachheit halber ein Testsuite-Eingabeformat, bei dem jede Zeile durch Schrägstriche getrennte Testfälle darstellt.)
quelle
C #, 44 Bytes
Kurzfassung:
Beispielprogramm:
Erläuterung: Die Funktion ist als rekursiver Ausdruck mit Endung geschrieben, wobei das Schlüsselwort return und geschweifte Klammern vermieden werden, indem Folgendes ausgenutzt wird:
So können wir es auf eine einzige Aussage beschränken.
BEARBEITEN: Ging zurück, um die Art der Funktion r wegzulassen, da dies akzeptabel erscheint. Bei der Typdeklaration mit Arrays sind es 68 Zeichen. Ohne ist es 44 Zeichen.
quelle
r=
oder mehr für eine Deklaration sind (teils, weil ich die Regeln nicht genau kenne, teils, weil ich C # nicht gut genug kenne, um sie anzuwenden).Japt , 15 Bytes
Online testen!
Wie es funktioniert
Japt verfügt über eine integrierte Funktion zum rekursiven Ersetzen, sieht die erste Eingabe jedoch als regulären Ausdruck. Wenn die Eingaben garantiert nur alphanumerische Zeichen enthalten würden, würde diese Drei-Byte-Lösung funktionieren:
Wenn die Eingabe Zeichen außer
^
,\
oder enthalten darf, ist]
stattdessen diese 12-Byte-Lösung gültig:quelle
C #,
3349 BytesWahrscheinlich eines der kleinsten in C # geschriebenen Snippets ... Und da
Replace
es in derstring
Struktur enthalten ist, ist keinusing
s erforderlich ( Zumindest nicht in der integrierten VS-Funktion C # Interactive ... )Da
B
der Code immer einen Wert hat, muss er auch nicht validiert werden.Golf gespielt
Ungolfed
Vollständiger Code
Releases
+19 bytes
- Problem, bei dem die Lösung nicht rekursiv war - gefixt33 bytes
- Anfangslösung.quelle
Replace
eine rekursive Ersetzung durch?"((())())())".Replace("()", "")
kehrt zurück(()))
.Verarbeitung,
75 bis72 BytesDruckt die Ergebnisse. Nenne es so
g("llllrrrr", new String[]{"lr","rl"});
quelle
Mathematica,
3532 BytesArgumente als Folge angegeben. Kündigt zum
grow
Beispiel nie ab , kehrtloop
zumloop
Beispiel zurück. Drei Bytes weniger dank Martins Vorschlag.quelle
FixedPoint
neigt dazu, zu lang zu sein und kann emuliert werden mit//.
:#//.x_:>StringReplace[x,#2->#3]&
ReplaceRepeated
um für Streicher zu arbeiten!$RecursionLimit
sein, was2^16
standardmäßig nicht Ihre Antwort beeinflusstReplaceRepeated
gesteuert wird$RecursionLimit
- ich habe es gerade getestet, indem ich das Limit auf 20 gesetzt habe, und das Programm schleift immer noch gerne für nicht abschließende Eingaben mit.ReplaceRepeated
gibt es eine separate Option (die nicht mit der//.
Syntax verwendet werden kann), genanntMaxIterations
. Der Standardwert ist 2 ^ 16. (cc @ngenisis)Ruby, 29 Bytes
Wenden Sie bei 3 Argumenten die Substitution auf die erste an, bis nichts mehr zu ersetzen ist.
Erläuterung
1
Vor demwhile
ist einfach ein noppegsub!
Gibt den String zurück odernil
wenn keine Ersetzung stattgefunden hatquelle
Pyke, 6 Bytes
Probieren Sie es hier aus!
quelle
/// , 3 Bytes
Setzen Sie den String B nach dem ersten Schrägstrich, C nach dem zweiten und A am Ende, dh:
Probieren Sie es online!
quelle
///
Akzeptiert meines Wissens keine anderen Eingaben./
in einer der Eingabezeichenfolgen ein vorhanden istJavaScript (Firefox 48 oder früher), 43 Byte
Nimmt Argumente in umgekehrter Reihenfolge auf. Firefox hatte früher einen nicht standardmäßigen dritten Parameter, für
replace
den reguläre Ausdrücke festgelegt wurden. Dieser Parameter wurde in Firefox 49 entfernt.quelle
SmileBASIC,
7268 BytesEiner der seltenen Fälle, in denen eine Funktion erstellt wird, ist SHORTER in SmileBASIC.
quelle
Javascript 130 Bytes
Javascript wird nur dann alle gleichzeitig ersetzen, wenn Sie ihm einen regulären Ausdruck geben. Damit dieser reguläre Ausdruck für alle Werte funktioniert, müssen alle Zeichen, die für den regulären Ausdruck verwendet werden, durch die maskierte Version ersetzt werden. Schließlich wird das Ersetzen ausgewertet, um alle Instanzen von B in A durch C zu ersetzen und das wieder an die Funktion zurückzugeben.
quelle
q, 15 Bytes
Beispiel:
Verknüpfung zum Dolmetscher-Download
Erklärung: ssr , / (konvergieren)
quelle
Cheddar, 37 Bytes
Am Telefon ist also TIO-Link etwas schwer hinzuzufügen. Verwendet im Allgemeinen die Rekursion, während das Überprüfen von b in a erfolgt. Die Lösung könnte gewesen sein
(a,b,c)->a.sub(Regex{b,"cr"},c)
, funktioniert aber aus irgendeinem Grund nicht.quelle
Perl 6 , 40 Bytes
Probieren Sie es aus (wenn tio.run aktualisiert wird)
Probieren Sie eine geänderte Version aus
Erweitert:
quelle
PHP, 46 Bytes
quelle
PHP, 102 Bytes
Testfälle (funktional)
Testfall mit Schleifenfehler
quelle
function replace(...){...}
ist Ihre Einreichung sonst nur ein Ausschnitt, der standardmäßig nicht zulässig ist;)
Java - 157 Bytes
Bei leerer Eingabe wird eine leere Zeichenfolge zurückgegeben.
Abstürze mit
StackOverflowException
Fehler, wennB
leer ist oder Daten wie diese eingespeist werdenA/A/A
.Wie es funktioniert:
Ungolfed Code Code mit Kommentaren:
quelle
AutoHotkey, 87 Bytes
%1%
,,%2%
und%3%
sind die ersten 3 Argumente, die an eine Funktion übergeben werden.Wenn eine Funktion ein variables Argument erwartet, werden die
%
s gelöscht. DasÄndern der Einstellung für die Groß- und Kleinschreibung kostet 19 Byte, aber ohne diese Angabe erhalten Sie Dinge wie
downpercase is down
.quelle