La tarea
Escribir un programa o función que con tres cadenas A, B, Cproduce una cadena de salida donde cada instancia de Bin Aha sido sustituida recursivamente con C. Sustituir recursivamente significa repetir una sustitución en la que en cada paso todas las instancias no superpuestas de Bin A(elegidas con avidez de izquierda a derecha) se reemplazan por Chasta que Bya no estén contenidas A.
De entrada y salida
- Puede utilizar cualquiera de los métodos predeterminados de E / S .
- Las cadenas contendrán solo caracteres ASCII imprimibles (y pueden contener cualquiera de ellos).
- BNunca será una cadena vacía, mientras que- Ay- Cque podría ser.
- Las cadenas deben considerarse texto plano, por ejemplo, no puede tratarse Bcomo un patrón Regex.
- Algunas combinaciones de entradas nunca terminarán. Su programa puede hacer cualquier cosa en esos casos.
Casos de prueba
Estos están en el formato: 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}
)
Ejemplos que no terminan:
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
                                
                    
                    
                        León
fuente
                
                fuente

((())())())/()/downpercase is downRespuestas:
05AB1E , 2 bytes
Pruébalo en línea!
Explicación
Esto podría ser
:por 1 byte si no tuviéramos que lidiar con cadenas vacías.fuente
:es básicamente una construcción que resuelve todo el desafío? Debería haber prohibido los builtins;)Python 2 , 43 bytes
Pruébalo en línea!
Evalúa una cadena de la forma
Para alcanzar un punto fijo si existe, es suficiente hacer reemplazos iguales a la longitud de la cadena original.
fuente
ES6 (Javascript),
47, 43 bytesGolfed
Intentalo
fuente
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
El recuento de bytes asume la codificación ISO 8859-1.
La entrada debe estar separada por salto de línea.
Pruébalo en línea! (Para mayor comodidad, utiliza un formato de entrada de conjunto de pruebas donde cada línea es un caso de prueba separado por barras).
fuente
C #, 44 bytes
Version corta:
Programa de ejemplo:
Explicación: La función se escribe como una expresión recursiva de cola, evitando la palabra clave return y los corchetes explotando lo siguiente:
Esto nos permite mantenerlo en una sola declaración.
EDITAR: Volvió a omitir el tipo de función r, ya que parece ser aceptable. Con la declaración de tipo utilizando matrices, tiene 68 caracteres. Sin, son 44 caracteres.
fuente
r=o más para una declaración (en parte porque no conozco completamente las reglas, en parte porque no conozco C # lo suficiente como para aplicarlas).Japt , 15 bytes
¡Pruébelo en línea!
Cómo funciona
Japt tiene un reemplazo recursivo incorporado, pero ve la primera entrada como una expresión regular. Si se garantizara que las entradas solo contienen caracteres alfanuméricos, esta solución de tres bytes funcionaría:
Si la entrada se les permitió contener cualquier carbón, excepto
^,\o], esta solución de 12 bytes sería válido en su lugar:fuente
C #,
3349 bytesProbablemente, uno de los fragmentos más pequeños escritos en C # ... Y dado que
Replacees nativo de lastringestructura, no hay necesidad deusings ( al menos no en la función incorporada VS, C # Interactive ... )Además, como
Bsiempre tiene un valor, el código no necesita ninguna validación.Golfed
Sin golf
Código completo
Lanzamientos
+19 bytes- La solución fija no es recursiva.33 bytes- Solución inicial.fuente
ReplaceRealiza reemplazo recursivo?"((())())())".Replace("()", "")vuelve(())).Procesamiento,
7572 bytesImprime los resultados. Llámalo como
g("llllrrrr", new String[]{"lr","rl"});fuente
Mathematica,
3532 BytesArgumentos dados como una secuencia. Nunca termina por
growejemplo, vuelveloopporloopejemplo. Tres bytes de descuento gracias a la sugerencia de Martin.fuente
FixedPointtiende a ser demasiado largo y se puede emular con//.:#//.x_:>StringReplace[x,#2->#3]&ReplaceRepeateda trabajar por cuerdas!$RecursionLimittiempos, que es2^16por defecto, no que afecta a su respuestaReplaceRepeatedesté controlado por$RecursionLimit: solo lo probé estableciendo el límite en 20 y el programa sigue felizmente en bucle para la entrada sin terminación ...ReplaceRepeatedhay una opción separada (que no se puede usar con la//.sintaxis), llamadaMaxIterations. Ese predeterminado es 2 ^ 16. (cc @ngenisis)Ruby, 29 bytes
Dados 3 argumentos, aplique la sustitución al primero hasta que ya no haya nada que sustituir.
Explicación
1antes de quewhilesea simplemente un nopgsub!devuelve la cadena onilsi no se produjo ninguna sustituciónfuente
Pyke, 6 bytes
Pruébalo aquí!
fuente
/// , 3 bytes
Coloque la cadena B después de la primera barra inclinada, C después de la segunda y A al final, es decir:
Pruébalo en línea!
fuente
///no acepta aportes de ninguna otra manera./presente en cualquiera de las cadenas de entradaJavaScript (Firefox 48 o anterior), 43 bytes
Toma argumentos curry en orden inverso. Firefox solía tener un tercer parámetro no estándar en el
replaceque se especificaban las marcas de expresión regular. Este parámetro fue eliminado en Firefox 49.fuente
SmileBASIC,
7268 bytesUno de los casos raros en los que hacer una función es en realidad MÁS CORTO en SmileBASIC.
fuente
Javascript 130 bytes
Javascript solo reemplazará a todos simultáneamente si le da una expresión regular. Para hacer que esta expresión regular funcione para todos los valores, todos los caracteres que se utilizan para la expresión regular deben reemplazarse con la versión escapada. Finalmente, el reemplazo se evalúa para reemplazar todas las instancias de B en A con C y pasarlo nuevamente a la función nuevamente.
fuente
q, 15 bytes
Ejemplo:
enlace a la descarga del intérprete
Explicación: ssr , / (converge)
fuente
Cheddar, 37 bytes
En el teléfono, el enlace TIO es un poco difícil de agregar. Básicamente usa la recursión mientras que la comprobación es b está en a. La solución podría haber sido
(a,b,c)->a.sub(Regex{b,"cr"},c)pero no funciona por alguna razón.fuente
Perl 6 , 40 bytes
Pruébelo (si tio.run se actualiza)
Pruebe una versión alterada
Expandido:
fuente
PHP, 46 bytes
fuente
PHP, 102 bytes
Casos de prueba (funcional)
Caso de prueba con error de bucle
fuente
function replace(...){...}, de lo contrario, su envío es solo un fragmento, que no;)Java - 157 bytes
Para una entrada vacía, devuelve una cadena vacía.
Se bloquea con un
StackOverflowExceptionerror cuandoBestá vacío o se alimenta con datos como esteA/A/A.Cómo funciona:
Código de código sin golf con comentarios:
fuente
AutoHotkey, 87 bytes
%1%,,%2%y%3%son los primeros 3 argumentos pasados a una funciónSi una función espera un argumento variable, los
%s se descartanCambiar la configuración de mayúsculas y minúsculas cuesta 19 bytes pero, sin ella, obtienes cosas como
downpercase is down.fuente