let S
, a
e b
cada um representa uma string
Objetivo: Escreve uma string padrão de função de substituir onde o que você substituir todas as ocorrências a
em uma string S
com b
contanto que a
já não faz parte de uma instância deb
por exemplo, se tivermos a string S
=My oh my that there is a big ol' that
e queríamos fazer uma substituição sofisticada por a = that
e b = that there
que iria substituir cada instância de that
com that there
o tempo que a instância do that
não é já um exemplo dethat there
Portanto, nesse caso, a saída seria: My oh my that there is a big ol' that there
O primeiro that
não é substituído porque já faz parte de uma instância dethat there
Notas
Todas as 3 entradas devem ser cadeias contendo apenas caracteres ascii imprimíveis
A entrada pode ser fornecida como três cadeias de caracteres separadas ou uma lista de três cadeias de caracteres
Entrada será na ordem
S
,a
,b
salvo disposição em contrário, a respostaPara
a
ser considerada parte deb
, toda a instância dea
deve fazer parte de uma instânciab
Alguns casos de canto explicados
Input: ["1222", "22", "122"]
Output: "12122"
No exemplo acima, o último 22
é substituído. Mesmo que parte dela faça parte de uma instância de b
, a totalidade NÃO é parte da instância de b
. Como a instância inteira de a
não faz parte de uma instância, b
ela é substituída.
Input: ["123 ", "23", "12"]
Output: "112 "
Este caso de teste ilustra o mesmo caso acima, mas talvez de uma maneira um pouco mais clara. Novamente 2
, o meio é parte de uma instância de a
, bem como parte de uma instância de b
, no entanto, como a
nem tudo é parte da instância, b
ele ainda é substituído.
Input: ["Empty", "", "p"]
Output: "pEpmptpyp"
No caso de teste acima, a cadeia vazia antes e depois da p
não é substituída, pois pode ser totalmente considerada parte da instância de p
.
Outros casos de teste
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 é uma pergunta para o código-golfe, de modo que a resposta mais curta em bytes vence.
Respostas:
Perl 6 , 76 bytes
Experimente online!
Bloco de código anônimo que recebe entrada com curry, como
f(a,b)(s)
.Tenho certeza de que isso corresponde à intenção da pergunta. Basicamente, ele faz a substituição apenas se a posição de
a
não estiver em nenhuma das correspondências sobrepostas deb
.fonte
pEpmpptpyp
vez depEpmptpyp
1222
,22
,122
] ->12122
. Atualizei a pergunta para esclarecer e pedir desculpas por não ter esclarecido esse caso de canto anteriormente.s/(?!$b)$a/$b/g
, quando $ a é vazio porque string vazia depoisp
estava combinando(?!p)
eu precisava(?<!p)(?!p)
Carvão , 55 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Inicialize uma variável para mostrar onde a última correspondência substituída terminou.
Encontre todas as correspondências sobrepostas de
a
inS
.Se a próxima partida não se sobrepuser à última substituição bem-sucedida ...
... e também se sobrepõe nenhuma cópia
b
emS
...... concatenar a substring intermediária entre a última correspondência e essa correspondência com
b
a cadeia de saída ...... e atualize a última variável de final de correspondência para o final desta nova correspondência.
No final, adicione qualquer restante
S
e produza o resultado.fonte
Wolfram Language (Mathematica) ,
431229688 bytesExperimente online!
+79: deve ser corrigido.
Ligar como
f[a,S,b]
.fonte
Perl 5 (
-lpF/;/
), 41 bytesTIO
fonte
1222
,22
,122
] Deve saída12122
, mas o seu saídas11222
12
s, acontece que a pergunta que fiz foi muito mais difícil do que eu pensava originalmente!123
,23
,12
->112
mas1212
,1
,121
->1212
(? Por que não deveria ser121212
)S
não deve combinar comb
, ou que parte para pular antes de olhar para o próximo jogo