Le défi consiste simplement à basculer une chaîne dans une autre chaîne.
Explication
Si la chaîne à bascule est une sous-chaîne de la chaîne principale , supprimez toutes les instances de la chaîne à bascule de la chaîne principale ; sinon, ajoutez la chaîne de bascule à la fin de la chaîne principale .
Règles
- Toutes les chaînes sont composées de caractères ASCII imprimables
- La fonction doit prendre deux paramètres: la chaîne principale et la chaîne à bascule .
- La chaîne principale peut être vide.
- La chaîne de bascule ne peut pas être vide.
- Le résultat doit être une chaîne, qui peut être vide.
- La réponse la plus courte l'emporte.
Exemples
function toggle(main_string, toggle_string){ ... }
toggle('this string has 6 words ', 'now')
=> 'this string has 6 words now'
toggle('this string has 5 words now', ' now')
=> 'this string has 5 words'
Cas de tests
'','a' => 'a'
'a','a' => ''
'b','a' => 'ba'
'ab','a' => 'b'
'aba','a' => 'b'
'ababa', 'aba' => 'ba'
Réponses:
Gelée , 7 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Java 8,
80706534 octetsProbablement mon plus court 'codegolf' Java jusqu'à présent .. xD
avec l'aide des commentaires ..;)
Explication:
Essayez-le en ligne.
la source
if
en ternaire. Si rien d'autre, il se débarrassera du "supplément"return
.return m=m.replace(t,"")?m+t:m;
m==(m=m.replace...
MATL, 11 octets
Essayez-le en ligne!
Tous les cas de test
Explication
la source
Python 3, 38 octets
la source
JavaScript (ES6),
3937 octetsla source
Pyke, 14 octets
Essayez-le ici!
Étant donné que Pyke n'a pas de
else
structure, je pense que c'est un score assez raisonnableExplication:
la source
CJam, 9
Essayez-le en ligne. Merci jimmy23013 pour avoir coupé 1 octet :)
Explication:
la source
q~:B/2Be]
.Javascript (ECMAScript 6): 47 octets
la source
("a", ".")
renvoie""
au lieu de"a."
.Rétine ,
3831 octetsLe nombre d'octets suppose un codage ISO 8859-1.
Le saut de ligne arrière est important. Le format d'entrée est les deux chaînes séparées par un saut de ligne.
Essayez-le en ligne!La première ligne permet d'exécuter plusieurs cas de test à la fois (pour la suite de tests, utilisez
;
pour séparer les chaînes et les sauts de ligne pour séparer les cas de test; la première ligne s'occupe de la conversion).Explication
Dans cette première étape, nous remplaçons toutes les occurrences de la chaîne à bascule dans la chaîne principale par
·
. Nous devons insérer ces marqueurs afin de pouvoir déterminer ultérieurement si une substitution s'est produite.Il s'agit d'une autre substitution qui supprime un
·
marqueur ou la deuxième ligne (y compris le saut de ligne de séparation). Cependant, le1>
est une limite, ce qui signifie que seules les correspondances après la première sont prises en compte. Par conséquent, si la chaîne de bascule ne s'est pas produite dans la chaîne principale, nous n'en aurons pas inséré·
, donc la deuxième ligne sera la première correspondance et ne sera pas supprimée. Sinon, nous supprimons la deuxième ligne avec tout sauf le premier marqueur.Bien que cela utilise une étape de translittération, il est également utilisé simplement pour supprimer des caractères. En particulier, nous déplaçons les deux
·
et les sauts de ligne. Nous avons besoin du premier, au cas où il y aurait un match (car alors le premier·
aura été laissé par l'étape précédente) et nous avons besoin du second au cas où il n'y aurait pas de match (pour joindre les deux lignes ensemble et ainsi ajoutez la chaîne de bascule à la chaîne principale).la source
Python (3.4):
55544744 octetsEssai:
La sortie de test
L'utilisation d'un def serait plus longue car vous devez utiliser une instruction return, si elle était possible sans return, cela économiserait 2 octets,car la déclaration explicite de la fonction n'est pas nécessaire (désolé, je ne le savais pas) 7 octets ont été enregistrés.la source
toggle=
.toggle=
travail des teststoggle
est nécessaire pour le tester. Mais il suffit de compter à partir de maintenantlambda m,t:
.m+''+t
pourm+t
enregistrer 3 octets, si je ne me trompe pas.m+' '+t
entrer un espace entre eux, mais après avoir relu la description, j'ai supprimé le blanc mais pas le '' et le +C #, 63
Mieux que Java :)
Code de test:
Production:
la source
Pyth,
131110 octetsSuite de tests.
Format d'entrée: première chaîne entre guillemets, deuxième chaîne sans guillemets.
C'est aussi 10 octets:
Suite de tests.
C'est 11 octets:
Suite de tests.
Solution précédente de 13 octets:
Suite de tests.
la source
?}zQ:Qzk+Qz
Jolf, 12 octets
Ou, si nous devons inclure des caractères sensibles aux regex:
Essayez-le ici!
Explication
la source
JavaScript (ES6), 37 octets
Légèrement plus courte que la réponse de @ nobe4 en profitant du split and join
la source
Raquette, 70 octets
Assez simple.
la source
Scala,
7270 octetsInterprète en ligne: www.tryscala.com
la source
if(r==m)
.Oracle SQL 11.2, 66 octets
la source
Perl,
3730 octetsLes expressions régulières à l'intérieur de la chaîne de bascule ne sont pas évaluées en raison de la citation avec
\Q
...\E
.sub F
et\E
sont supprimés selon le commentaire de msh210.Il n'est pas entièrement exempt d'effets secondaires en raison du réglage
$_
. L'utilisation d'une variable locale coûtera six octets supplémentaires:En revanche, avec des paramètres d'entrée commutés, deux octets peuvent être enregistrés en utilisant
pop
au lieu deshift
(28 octets):Fichier de test:
Résultat du test:
la source
sub F
de votre nombre d'octets. De plus, vous devriez pouvoir utiliserpop
au lieu deshift
(en inversant l'ordre des entrées, natch), en économisant deux octets. (Non testé.) Enfin, vous devriez pouvoir omettre le\E
, économisant deux octets supplémentaires. (Également non testé.)pop
au lieu deshift
peut aider, car$_
devrait être le premier argument à éviter$_[1]=~s/.../
. L'ordre des arguments d'entrée est fixé par la question AFAIK.C # (58 octets)
string F(string s,string t)=>s==(s=s.Replace(t,""))?s+t:s;
Il utilise une affectation en ligne pour raser quelques octets
la source
var s,t
ou à lavar s,var t
place destring
?var
il ne peut être utilisé que dans des endroits où le type est connu au moment de la compilation, il ne peut donc pas être utilisé dans les signatures de méthode. Vous pouvez utiliserdynamic
, mais c'est 1 caractère de plus questring
var F(string s, string t
? Cela peut être déduit ...bash + sed, 28 octets
Le script réside dans un fichier toggle-string.bash, que nous appelons avec
bash toggle-string.bash mainstring togglestring
.s/$2//g
supprime la chaîne de bascule de la chaîne principalet
saute à la fin si la substitution précédente a réussi (c'est-à-dire que la chaîne principale contenait la chaîne à bascule)/$/$2/
ajoute la chaîne de bascule à la fin ($
), si nous ne sautons pas à la finbash est requis pour l'héritage
la source
Julia,
3331 octetsEssayez-le en ligne!
la source
PowerShell v2 +, 47 octets
Prend des données
$a,$b
puis utilise une(... , ...)[...]
instruction pseudo-ternaire pour effectuer un if / else. Les parties internes sont évaluées en premier pour former un tableau de deux éléments. Le 0 est$a
avec toutes les occurrences de$b
-replace
d avec rien, qui est stocké dans$c
. Le 1er est juste une concaténation de chaînes de$a
et$b
.Si
$c
est-eq
ual$a
, c'est- à -dire qui$b
n'a pas été trouvé, c'est booléen$true
ou1
, et donc le 1er élément du tableau (la concaténation) est choisi. Sinon, c'est booléen$false
, donc nous$c
sortons le 0ème élément.Notez que
-replace
c'est gourmand, il remplacera donc d'abord par la gauche, ce qui signifie que leababa / aba
cas de test reviendra correctementba
.la source
Java 8, 65 octets
La même logique que la solution Java 7, écrite avec un lambda.
Essayez-le ici
la source
Ruby,
33 octets27 octets (28 si vous utilisez la sous-substitution globale)certainement 28 octetsla source
Mathematica, 45 octets
Fonction anonyme qui prend la chaîne principale et la chaîne à bascule (dans cet ordre) et renvoie le résultat. Explication:
la source
TSQL,
143129121 octetsLisible:
Live Demo
114 octets avec strictement 1 caractère d'entrée
la source
TSQL (Sqlserver 2012), 49 octets
Essayez-le en ligne!
la source
Rubis,
353728 octetsHourra pour l'interpolation de chaînes! Cela fonctionne même dans les expressions régulières. Le reste est simple: si la chaîne dans
t
correspond àm
, remplacezt
par''
, sinon retournezm+t
.Éditer: correction d'un bug.
Edit: J'ai appliqué la suggestion de Kevin Lau, mais il semble que j'aie atteint le même algorithme que celui utilisé dans la réponse de Luis Masuelli .
la source
("a", ".")
renvoie"a"
au lieu de"a."
.m[t]
est beaucoup plus court quem.include?(t)
et vérifie toujours l'inclusion dans les chaînes.k (23 octets)
Exemples:
la source
Kotlin, 61 octets
Ce serait plus court si l'affectation était une expression dans Kotlin, et les paramètres étaient mutables, et il y avait un opérateur conditionnel ternaire, malheureusement ce n'est pas le cas :(
Essayez-le en ligne!
UnGolfed
la source