A tarefa
Escreva um programa ou função que, com três seqüências de caracteres, A, B, C
produza uma sequência de saída em que cada instância de B
in A
foi recursivamente substituída por C
. Substituir recursivamente significa repetir uma substituição em que em cada etapa todas as instâncias não sobrepostas de B
in A
(escolhidas avidamente da esquerda para a direita) são substituídas por C
até que B
não esteja mais contida A
.
Entrada / Saída
- Você pode usar qualquer um dos métodos padrão para I / O .
- As seqüências conterão apenas caracteres ASCII imprimíveis (e podem conter qualquer um deles).
B
nunca será uma string vazia, enquantoA
eC
pode ser.- Seqüências de caracteres devem ser consideradas texto sem formatação, você não pode, por exemplo, tratar
B
como um padrão Regex. - Algumas combinações de entradas nunca terminam. Seu programa pode fazer qualquer coisa nesses casos.
Casos de teste
Estes estão no 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}
)
Exemplos que não terminam:
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
Leo
fonte
fonte
((())())())/()/
downpercase is down
Respostas:
05AB1E , 2 bytes
Experimente online!
Explicação
Pode ser
:
de 1 byte se não tivermos que lidar com cadeias vazias.fonte
:
é um builtin que resolve todo o desafio? Eu deveria ter proibido builtins;)Python 2 , 43 bytes
Experimente online!
Avalia uma sequência do formulário
Para atingir um ponto fixo, se houver, basta fazer substituições iguais ao comprimento da string original.
fonte
ES6 (Javascript),
47, 43 bytesGolfe
Tente
fonte
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
A contagem de bytes assume a codificação ISO 8859-1.
A entrada deve ser separada pela alimentação de linha.
Experimente online! (Por conveniência, usa um formato de entrada do conjunto de testes em que cada linha é um caso de teste separado por barra).
fonte
C #, 44 bytes
Versão curta:
Programa de exemplo:
Explicação: A função é escrita como uma expressão recursiva de cauda, evitando a palavra-chave de retorno e os colchetes, explorando o seguinte:
Isso nos permite manter uma única declaração.
EDIT: Voltamos a omitir o tipo de função r, pois isso parece ser aceitável. Na declaração de tipo usando matrizes, são 68 caracteres. Sem, são 44 caracteres.
fonte
r=
ou mais para uma declaração (em parte porque não conheço completamente as regras, em parte porque não conheço C # suficientemente bem para aplicá-las).Japonês , 15 bytes
Teste online!
Como funciona
O Japt possui uma substituição recursiva integrada, mas vê a primeira entrada como um regex. Se fosse garantido que as entradas contivessem apenas caracteres alfanuméricos, esta solução de três bytes funcionaria:
Se a entrada tiver permissão para conter qualquer caractere
^
, exceto,,\
ou]
, essa solução de 12 bytes será válida:fonte
C #,
3349 bytesProvavelmente, um dos menores trechos escritos em C # ... E como
Replace
é nativo dastring
estrutura, não há necessidade deusing
s ( pelo menos não no recurso interno do VS, C # interativo ... )Além disso, como
B
sempre tem um valor, o código não precisa de validações.Golfe
Ungolfed
Código completo
Lançamentos
+19 bytes
- Solução fixa não sendo recursiva.33 bytes
- Solução inicial.fonte
Replace
realizar a substituição recursiva?"((())())())".Replace("()", "")
retorna(()))
.Processando,
7572 bytesImprime os resultados. Chame como
g("llllrrrr", new String[]{"lr","rl"});
fonte
Mathematica,
3532 BytesArgumentos dados como uma sequência. Nunca termina por
grow
exemplo, retornaloop
porloop
exemplo. Três bytes de folga graças à sugestão de Martin.fonte
FixedPoint
tende a ser muito longo e pode ser emulado com//.
:#//.x_:>StringReplace[x,#2->#3]&
ReplaceRepeated
a trabalhar para strings!$RecursionLimit
vezes, o que é2^16
, por padrão, não que isso afeta a sua respostaReplaceRepeated
é controlado por$RecursionLimit
- Eu só testei, definindo o limite para 20 e o programa ainda feliz laços ao longo para a entrada de não-encerramento ..ReplaceRepeated
há uma opção separada (que não pode ser usada com a//.
sintaxe), chamadaMaxIterations
. O padrão é 2 ^ 16. (cc @ngenisis)Ruby, 29 bytes
Dados 3 argumentos, aplique a substituição ao primeiro até que não haja mais nada para substituir.
Explicação
1
antes dowhile
é simplesmente um nopgsub!
retorna a string ounil
se nenhuma substituição ocorreufonte
Pyke, 6 bytes
Experimente aqui!
fonte
/// , 3 bytes
Coloque a corda B após a primeira barra, C após a segunda e A no final, ou seja:
Experimente online!
fonte
///
não aceita entrada de nenhuma outra maneira./
estiver presente em qualquer uma das strings de entradaJavaScript (Firefox 48 ou anterior), 43 bytes
Aceita argumentos em ordem inversa. O Firefox costumava ter um terceiro parâmetro não padrão para o
replace
qual os sinalizadores de regexp especificados. Este parâmetro foi removido no Firefox 49.fonte
SmileBASIC,
7268 bytesUm dos raros casos em que a criação de uma função é realmente MAIS CURTA no SmileBASIC.
fonte
Javascript 130 bytes
O Javascript substituirá tudo simultaneamente se você fornecer um regex. Para fazer esse regex funcionar para todos os valores, todos os caracteres usados para regex precisam ser substituídos pela versão de escape. Finalmente, a substituição é avaliada para substituir todas as instâncias de B em A por C e passando isso de volta para a função novamente.
fonte
q, 15 bytes
Exemplo:
ligação para download do intérprete
Explicação: ssr , / (converge)
fonte
Cheddar, 37 bytes
No telefone, é um pouco difícil adicionar o link TIO. Basicamente, usa recursão enquanto a verificação é b está em a. A solução poderia ter sido,
(a,b,c)->a.sub(Regex{b,"cr"},c)
mas não funciona por algum motivo.fonte
Perl 6 , 40 bytes
Experimente (se tio.run for atualizado)
Experimente uma versão alterada
Expandido:
fonte
PHP, 46 bytes
fonte
PHP, 102 bytes
Casos de teste (funcionais)
Caso de teste com erro de loop
fonte
function replace(...){...}
, caso contrário, seu envio é apenas um trecho, que não;)
Java - 157 bytes
Para entrada vazia, ele retorna uma string vazia.
StackOverflowException
Falha com erro quandoB
está vazio ou é alimentado com dados como esteA/A/A
.Como funciona:
Código de código ungolfed com comentários:
fonte
AutoHotkey, 87 bytes
%1%
,,%2%
e%3%
são os 3 primeiros argumentos passados para uma funçãoSe uma função espera um argumento variável, os
%
s são descartados. Aalteração da configuração de distinção entre maiúsculas e minúsculas custa 19 bytes, mas, sem ela, você obtém coisas como
downpercase is down
.fonte