La tâche
Ecrivez un programme ou une fonction qui, à partir de trois chaînes, A, B, C
produit une chaîne de sortie dans laquelle chaque instance de B
in A
a été récursivement remplacée par C
. Substituer récursivement signifie répéter une substitution où à chaque étape toutes les instances non chevauchantes de B
in A
(choisies avec avidité de gauche à droite) sont remplacées par C
jusqu'à ce B
qu'elles ne soient plus contenues dans A
.
Entrée sortie
- Vous pouvez utiliser l' une des méthodes par défaut pour les E / S .
- Les chaînes ne contiendront que des caractères ASCII imprimables (et peuvent contenir n'importe lequel d'entre eux).
B
ne sera jamais une chaîne vide, tandis queA
etC
pourrait l'être.- Les chaînes doivent être considérées comme du texte en clair, vous ne pouvez pas par exemple traiter
B
comme un modèle Regex. - Certaines combinaisons d'entrées ne se termineront jamais. Votre programme peut tout faire dans ces cas.
Cas de test
Ce sont au format: 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}
)
Exemples qui ne se terminent pas:
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
la source
la source
((())())())/()/
downpercase is down
Réponses:
05AB1E , 2 octets
Essayez-le en ligne!
Explication
Cela pourrait être
:
pour 1 octet si nous n'avions pas à gérer des chaînes vides.la source
:
est-ce une solution intégrée qui résout tout le défi? J'aurais dû interdire les buildins;)Python 2 , 43 octets
Essayez-le en ligne!
Évalue une chaîne du formulaire
Pour atteindre un point fixe s'il en existe un, il suffit de faire des remplacements égaux à la longueur de la chaîne d'origine.
la source
ES6 (Javascript),
47, 43 octetsGolfé
Essayez-le
la source
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.
Rétine , 27 octets
Le nombre d'octets suppose un codage ISO 8859-1.
L'entrée doit être séparée par un saut de ligne.
Essayez-le en ligne! (Pour plus de commodité, utilise un format d'entrée de suite de tests où chaque ligne est un cas de test séparé par une barre oblique.)
la source
C #, 44 octets
Version courte:
Exemple de programme:
Explication: La fonction est écrite comme une expression récursive de queue, en évitant le mot-clé return et les accolades en exploitant ce qui suit:
Cela nous permet de le garder à une seule déclaration.
EDIT: Nous sommes revenus à l'omission du type de fonction r, car cela semble acceptable. Avec une déclaration de type utilisant des tableaux, elle est de 68 caractères. Sans, c'est 44 caractères.
la source
r=
ou beaucoup plus pour une déclaration (en partie parce que je ne connais pas complètement les règles, en partie parce que je ne connais pas assez bien C # pour les appliquer).Japt , 15 octets
Testez-le en ligne!
Comment ça marche
Japt a un remplacement récursif intégré, mais il voit la première entrée comme une expression régulière. Si les entrées étaient garanties de ne contenir que des caractères alphanumériques, cette solution à trois octets fonctionnerait:
Si l'entrée ont été autorisés à contenir tout sauf omble chevalier
^
,\
ou]
, cette solution de 12 octets serait valable à la place:la source
C #,
3349 octetsProbablement, l'un des plus petits extraits écrits en C # ... Et comme il
Replace
est natif de lastring
structure, il n'y a pas besoin deusing
s (du moins pas sur la fonction intégrée VS, C # Interactive ... )De plus, comme
B
il a toujours une valeur, le code n'a besoin d'aucune validation.Golfé
Non golfé
Code complet
Communiqués
+19 bytes
- Solution fixe non récursive.33 bytes
- Solution initiale.la source
Replace
N'effectuer le remplacement récursif?"((())())())".Replace("()", "")
renvoie(()))
.Traitement,
7572 octetsImprime les résultats. Appelez ça comme
g("llllrrrr", new String[]{"lr","rl"});
la source
Mathematica,
3532 octetsArguments donnés sous forme de séquence. Ne se termine jamais par
grow
exemple, retourneloop
parloop
exemple. Trois octets de moins grâce à la suggestion de Martin.la source
FixedPoint
a tendance à être trop long et peut être émulé avec//.
:#//.x_:>StringReplace[x,#2->#3]&
ReplaceRepeated
au travail pour les cordes!$RecursionLimit
temps, ce qui est2^16
par défaut, pas que cela affecte votre réponseReplaceRepeated
soit contrôlé par$RecursionLimit
- je viens de le tester en fixant la limite à 20 et le programme continue de faire le tour avec plaisir pour une entrée sans fin.ReplaceRepeated
il y a une option distincte (qui ne peut pas être utilisée avec la//.
syntaxe), appeléeMaxIterations
. Celui- ci par défaut est 2 ^ 16. (cc @ngenisis)Rubis, 29 octets
Étant donné 3 arguments, appliquez la substitution au premier jusqu'à ce qu'il n'y ait plus rien à substituer.
Explication
1
avantwhile
est tout simplement un nopgsub!
renvoie la chaîne ounil
si aucune substitution ne s'est produitela source
Pyke, 6 octets
Essayez-le ici!
la source
/// , 3 octets
Mettez la chaîne B après la première barre oblique, C après la seconde et A à la fin, c'est-à-dire:
Essayez-le en ligne!
la source
///
n'accepte aucune entrée d'une autre manière./
est présent dans l'une des chaînes d'entréeJavaScript (Firefox 48 ou version antérieure), 43 octets
Prend les arguments au curry dans l'ordre inverse. Firefox avait auparavant un troisième paramètre non standard
replace
auquel spécifiaient les drapeaux d'expression régulière. Ce paramètre a été supprimé dans Firefox 49.la source
SmileBASIC,
7268 octetsL'un des rares cas où la création d'une fonction est en fait PLUS COURT dans SmileBASIC.
la source
Javascript 130 octets
Javascript ne remplacera tous simultanément que si vous lui donnez une expression régulière. Pour que cette expression régulière fonctionne pour toutes les valeurs, tous les caractères utilisés pour l'expression régulière doivent être remplacés par la version d'échappement. Enfin, le remplacement est évalué pour remplacer toutes les instances de B dans A par C et les renvoyer à la fonction.
la source
q, 15 octets
Exemple:
lien vers le téléchargement de l'interpréteur
Explication: ssr , / (convergent)
la source
Cheddar, 37 octets
Au téléphone, le lien TIO est donc un peu difficile à ajouter. Utilise essentiellement la récursivité tout en vérifiant que b est dans a. La solution pourrait avoir été,
(a,b,c)->a.sub(Regex{b,"cr"},c)
mais ne fonctionne pas pour une raison quelconque.la source
Perl 6 , 40 octets
Essayez-le (si tio.run est mis à jour)
Essayez une version modifiée
Étendu:
la source
PHP, 46 octets
la source
PHP, 102 octets
Cas de test (fonctionnels)
Cas de test avec erreur de boucle
la source
function replace(...){...}
, sinon votre soumission n'est qu'un extrait de code, ce qui est interdit par défaut;)
Java - 157 octets
Pour une entrée vide, elle renvoie une chaîne vide.
Se bloque avec une
StackOverflowException
erreur lorsqu'ilB
est vide ou qu'il est alimenté avec des données comme celle-ciA/A/A
.Comment ça marche:
Code de code non golfé avec commentaires:
la source
AutoHotkey, 87 octets
%1%
,,%2%
et%3%
sont les 3 premiers arguments passés à une fonctionSi une fonction attend un argument variable, les
%
s sont supprimés Lamodification du paramètre de sensibilité à la casse coûte 19 octets mais, sans lui, vous obtenez des choses comme
downpercase is down
.la source