deje S, ayb cada uno representa una cadena
Objetivo: Escribir una cadena estándar de la función de reemplazar en el que se reemplaza todas las apariciones de auna cadena Scon btanto tiempo comoa no es ya parte de una instancia deb
por ejemplo, si tenemos la cadena S =My oh my that there is a big ol' that
y queríamos hacer un reemplazo elegante con a = thaty b = that therereemplazaríamos cada instancia de thatcon that theretal que la instancia de thatno sea ya una instancia dethat there
Entonces, en este caso, la salida sería: My oh my that there is a big ol' that there
El primero thatno se reemplaza porque ya es parte de una instancia dethat there
Notas
Las 3 entradas deben ser cadenas que contengan solo caracteres ascii imprimibles
La entrada se puede dar como 3 cadenas separadas o una lista de 3 cadenas
De entrada estará en el orden
S,a,bsalvo que se especifique lo contrario en la respuestaPara
aser considerado parte deb, toda la instancia deadebe ser parte de una instanciab
Algunos casos de esquina explicados
Input: ["1222", "22", "122"]
Output: "12122"
En el caso anterior, este último 22se reemplaza. Aunque parte de ella es parte de una instancia de b, la totalidad NO es parte de la instancia de b. Como toda la instancia de ano es parte de una instancia b, se reemplaza.
Input: ["123 ", "23", "12"]
Output: "112 "
Este caso de prueba ilustra el mismo caso anterior pero quizás de una manera un poco más clara. Nuevamente, el 2en el medio es parte de una instancia a, así como parte de una instancia de b, sin embargo, dado que todo ano es parte de la instancia b, todavía se reemplaza.
Input: ["Empty", "", "p"]
Output: "pEpmptpyp"
En el caso de prueba anterior, tanto la cadena vacía antes como después pno se reemplazan, ya que pueden considerarse completamente parte de la instancia de p.
Otros casos de prueba
Input: ["aabbaa", "aa", "aabb"]
Output: "aabbaabb"
Input: ["Hello World!", "o", " no"]
Output: "Hell no W norld!"
Input: ["Wow, oh wow, seriously WOW that's... wow", "wow", "WOW,"]
Output: "Wow, oh WOW,, seriously WOW that's... WOW,"
Input: ["Empty", "", "b"]
Output: "bEbmbpbtbyb"
Input: ["Empty", "b", "br"]
Output: "Empty"
Input: ["Empty", "pty", "Empty"]
Output: "Empty"
Input: ["aabbaaa", "aa", "PP"]
Output: "PPbbPPa"
Input: ["121212","1","121"]
Output: "121212"
Esta es una pregunta para code-golf, por lo que gana la respuesta más corta en bytes.

Respuestas:
Perl 6 , 76 bytes
Pruébalo en línea!
Bloque de código anónimo que toma la entrada curry, como
f(a,b)(s).Estoy bastante seguro de que esto coincide con la intención de la pregunta. Básicamente, solo realiza la sustitución si la posición de
ano está dentro de ninguna de las coincidencias superpuestas deb.fuente
pEpmpptpyplugar depEpmptpyp1222,22,122] ->12122. He actualizado la pregunta para aclarar y disculparme por no haber aclarado antes este caso de esquina.s/(?!$b)$a/$b/g, cuando $ a está vacío porque la cadena vacía después depcoincidir lo(?!p)necesitaba(?<!p)(?!p)Carbón , 55 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Inicialice una variable para mostrar dónde terminó la última coincidencia reemplazada.
Encuentra todas las coincidencias superpuestas de
ainS.Si la próxima coincidencia no se superpone al último reemplazo exitoso ...
... y también se solapa con ninguna copia de
benS...... luego concatena la subcadena intermedia entre la última coincidencia y esta coincidencia con
bla cadena de salida ...... y actualice la variable de finalización de la última coincidencia al final de esta nueva coincidencia.
Al final, agregue el resto
Sy genere el resultado.fuente
Wolfram Language (Mathematica) ,
431229688 bytesPruébalo en línea!
+79: debe repararse.
Llamar como
f[a,S,b].fuente
Perl 5 (
-lpF/;/), 41 bytesTIO
fuente
1222,22,122] Debe ser la salida12122, pero el suyo salidas1122212s, resulta que la pregunta que hice fue mucho más difícil de lo que pensé originalmente!123,23,12->112pero1212,1,121->1212(¿por qué no debería ser121212)Sno deberían coincidir conbo qué parte omitir antes de buscar el próximo partido