La tarea
Escribir un programa o función que con tres cadenas A, B, C
produce una cadena de salida donde cada instancia de B
in A
ha sido sustituida recursivamente con C
. Sustituir recursivamente significa repetir una sustitución en la que en cada paso todas las instancias no superpuestas de B
in A
(elegidas con avidez de izquierda a derecha) se reemplazan por C
hasta que B
ya 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).
B
Nunca será una cadena vacía, mientras queA
yC
que podría ser.- Las cadenas deben considerarse texto plano, por ejemplo, no puede tratarse
B
como 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 down
Respuestas:
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
Replace
es nativo de lastring
estructura, no hay necesidad deusing
s ( al menos no en la función incorporada VS, C # Interactive ... )Además, como
B
siempre 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
Replace
Realiza 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
grow
ejemplo, vuelveloop
porloop
ejemplo. Tres bytes de descuento gracias a la sugerencia de Martin.fuente
FixedPoint
tiende a ser demasiado largo y se puede emular con//.
:#//.x_:>StringReplace[x,#2->#3]&
ReplaceRepeated
a trabajar por cuerdas!$RecursionLimit
tiempos, que es2^16
por defecto, no que afecta a su respuestaReplaceRepeated
esté 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 ...ReplaceRepeated
hay 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
1
antes de quewhile
sea simplemente un nopgsub!
devuelve la cadena onil
si 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
replace
que 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
StackOverflowException
error cuandoB
está 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