Objectif
Créer une fonction pour inverser la concaténation de chaînes
Contribution
Deux chaînes (alphanumériques + espaces), où l’une doit être soustraite pour l’autre.
- Vous pouvez supposer que la chaîne à soustraire ne sera jamais plus grande que l'autre.
Sortie
Le résultat de la soustraction
Soustraction
Vous devez supprimer une chaîne du début ou de la fin d'une autre chaîne. Si la chaîne est présente au début et à la fin, vous ne pouvez en supprimer qu'une, celle qui sera supprimée dépend de vous.
Si la chaîne n'est pas au début ou à la fin, ou n'est pas une correspondance exacte, il s'agit d'une soustraction non valide et vous devez générer la chaîne d'origine.
Cas de test
Soustraction valide
'abcde','ab' -> 'cde'
'abcde','cde' -> 'ab'
'abab','ab' -> 'ab'
'abcab','ab' -> 'abc' or 'cab'
'ababcde','ab' -> 'abcde'
'acdbcd','cd' -> 'acdb'
'abcde','abcde' -> ''
'abcde','' -> 'abcde'
'','' -> ''
Soustraction non valide (retourne la chaîne d'origine)
'abcde','ae' -> 'abcde'
'abcde','aa' -> 'abcde'
'abcde','bcd' -> 'abcde'
'abcde','xab' -> 'abcde'
'abcde','yde' -> 'abcde'
Entrée invalide (ne doit pas être traitée)
'','a' -> ''
C'est du code-golf , donc le code le plus court en octets gagne!
cde
? Qu'entendez-vous par valide? Devons-nous juger de la validité des entrées ou voulez-vous dire que nous ne recevrons pas d'entrées non valides?'abcde','bcd' -> 'abcde'
, pour avoir brisé ma solution'ababcde', 'ab'
→'abcde'
comme test. Certains algorithmes naïfs échouent sur celui-là.Réponses:
Java 8,
46454440 octets-1 octet grâce à TheLethalCoder
-1 octet parce que je suis idiot (merci Rod!)
-4 octets grâce à Kevin Cruijssen
Essayez-le en ligne! (inclut tous les cas de test)
Une réponse Java bat en réalité quelques autres langages pratiques. Des sourires. (Et maintenant, il bat JS!)
la source
a->b->
First
àAll
-2 octets. Etant donné^
que$
c'est toujours à la fin ou au début de la chaîne,replaceAll
elle ne la remplace qu'une fois. Essayez ici. PS: J'ai ajouté le nombre d'octets précédent barré à votre réponse, ce qui est généralement fait après les modifications de code-golf effectuées ici sur PPCG.All
au lieu deFirst
, cela devient vrai:"abab" + "ab" -> ""
JavaScript (ES6), 41 octets
Accepte les entrées via la syntaxe de currying, c'est-à-dire
f("abab")("ab")
.la source
eval()
pour construire RegExes auparavant?!Brachylog (Essayez-le en ligne!), 12 octets
Essayez-le en ligne!
Prend la chaîne à soustraire de l'entrée standard et la chaîne à soustraire en tant qu'argument de ligne de commande.
Explication
la source
Retina , 21 octets
1 octet grâce à Martin Ender.
Essayez-le en ligne!
la source
JavaScript (ES6),
76704541 octetsL'essayer
la source
new
.Perl 6 , 21 octets
L'essayer
Étendu:
la source
Japt ,
11 à9 octetsEssayez-le en ligne!
la source
TI-Basic (TI-84 Plus CE), 63 octets
la source
Ans
-on référence à la quatrième ligne?Ans
réfère à la dernière valeur évaluée, donc dans ce cas, à la valeur renvoyée parinString(
, qui correspond à l'index de la sous-chaîneStr2
de la chaîneStr0
ou à 0 si la sous-chaîne n'apparaît pas. Une instruction if ne modifie pas la valeur de Ans, donc sur la quatrième ligne, l'index est toujours présentAns
.inString
fonctionnait. Beau golf!Mathematica, 162 octets
test du style d'entrée ["abcde", "ab"]
la source
#
place de#1
- ils ont exactement la même signification. En outre, au lieu d'utiliserStringJoin@t
, vous pouvez tricher en joignant une chaîne vide à celle-ci""<>t
, qui joint automatiquement toutt
ensemble. Avez-vous vu la page des astuces de golf de Mathematica ?t={};
au début, par exemple), mais il serait peut-être plus facile d’utiliser une approche totalement différente: avez-vous essayéStringReplace
une fonction?c=Characters;a=c@#;b=c@#2;
l@Intersection[a,b]
estl[a∩b]
.Python,
696864575145 octetsCela a fini par être une solution complètement différente avec Regex.
Merci à Value Ink pour -2 octets!
et Felipe Nardi Batista pour l’énorme -6 octets!
Essayez-le en ligne!
la source
re.sub(c.join("^|$"),'',s,1)
c+'$|^'+c
Bash ,
666149 octetsEssayez-le en ligne!
moins golfé:
Utilise la casse pour tester le début ou la fin et la soustraction du préfixe / suffixe du tableau (% / #)
la source
case
, mais plus long que nécessaire. Les 2e et 3e modèle pourraient être fusionnés en un seul:*)c=${1#$2};;
. Puis , avec seulement deux branches seraient plus courtes àecho
chaque directement au lieu d'utiliser la variable$c
:case $1 in *$2)echo ${1%$2};;*)echo ${1#$2};;esac
. Ou vous pouvez continuer à l' utiliser, mais sanscase
:c=${1%$2};[[ $c = $1 ]]&&c=${1#$2};echo $c
.APL (Dyalog) ,
31 à30 octets-1 grâce à Zacharý .
Ceci utilise en fait la concaténation inverse (c'est-à-dire l'inverse de)! Prend la chaîne d'origine comme argument de gauche et ce qu'il faut soustraire comme argument de droite.
Essayez-le en ligne!
Ungolfed:
Légende:
{
…}
Fonction anonyme⍺
argument gauche de la fonction courante⍵
bon argument de la fonction courante0::
… Si une erreur se produit, exécutez ceci, sinon…⍣¯1⊢
inverse,∘⍵
concaténer ⍵ à droite⍵,
concaténer ⍵ à gauchela source
{0::⍺{0::⍺⋄,∘⍵⍣¯1⊢⍺}⍵⋄⍵,⍣¯1⊢⍺}
.PHP, 54 octets
Testcases
la source
Python 2 , 68 octets
Essayez-le en ligne!
la source
Haskell , 49 octets
Essayez-le en ligne! Utilisation:
f"" "abcdef" "ab"
. Alternativement, définir(-)=f""
et utiliser comme"abcdef" - "ab"
.Cette solution sans regex fonctionne en scindant de manière récursive la chaîne dans tous ses préfixes et postfixes et en vérifiant si la chaîne à soustraire correspond à l'un d'entre eux.
la source
Python 2 ,
7265 octetsEssayez-le en ligne!
-7 octets grâce à @FelipeNardiBatista
la source
C #, 88 octets
Compile a
Func<string, Func<string, string>>
.la source
Ruby (expression lambda), 29 octets
Yay pour l'interpolation regex! Requiert des soustraits regex-safe, mais cela ne pose pas de problème selon le défi.
la source
Tcl , 37 octets
Essayez-le en ligne! (exécute maintenant tous les tests)
Tcl est simple.
proc s {a b}
définit une fonction nommées
qui prend des paramètresa
etb
.regsub
substitutes{}
, qui est une chaîne vide, pour la valeur dub
début ou de la fin dea
. Le retour est implicite.la source
C, 96 octets
Il est de notoriété publique que la manipulation des cordes en C est lourde, car une extension de golf serait limite masochiste. Cela me va.
L'un des programmes les moins lisibles que j'ai écrits. Prend deux entrées (quelle que soit l'apparence de la fonction), un
char**
pointant sur la chaîne à déconcaténer et unchar*
qui est la chaîne à supprimer. Le pointeur d'entrée est édité à la place et devient la sortie (qui parle quand même des fuites de mémoire).Exemple d'utilisation:
la source
AWK ,
2132 octetsEssayez-le en ligne!
La soumission originale a naïvement remplacé le texte dans la première chaîne, pas seulement au début ou à la fin.
Essayez-le en ligne!
A l'origine essayé sans accolades, mais il fallait des astuces pour imprimer des lignes vides et / ou des non-correspondances qui ont fini par ajouter plus d'octets que cette version.
la source
R,
204241 octets-1 octet grâce à MickyT!
Retourne une fonction anonyme (qui a des arguments dans l'ordre
b,a
). Calcule la différence de chaînea-b
.sub
est une simple substitution qui permute la première occurrence du motif avec, dans ce cas, la chaîne vide''
. Construit l’expression rationnelle avecsprintf
pour qu’elle ne corresponde qu’au début et à la fin de la chaîne. Nécessite l'pryr
installation du package.Sur le lien TIO, utilise la
function(a,b)
définition plus détaillée de la fonction pour quatre octets supplémentaires.Essayez-le en ligne!
la source
'abcde','bcd' -> 'abcde'
affaire?sub
est une simple substitution qui remplace simplement la première occurrence deb
ina
": cette permutation sera-t-elle effectuée si la deuxième chaîne est au milieu de la première chaîne?sprintf('^%s|%s$',b,b)
Common Lisp, 121 octets
Essayez-le en ligne!
Le common Lisp habituel verbeux!
Version non-golfée:
la source
Kotlin , 91 octets
Essayez-le en ligne!
la source
{a,b->var c=a.removePrefix(b);if(a==c){c=a.removeSuffix(b)};c}
Powershell,
34 à40 octets+6 octets lorsque
Invalid Subtraction
des cas de test sont ajoutésCommentaire:
L’expression regexp
^$t|$t$
ne fonctionne pas comme prévu: elle remplace les deux correspondances au lieu d’une (flagg
toujours activé). Nous sommes donc obligés d’utiliser le groupe de surveillance négatif.Script de test:
Sortie:
la source
QBIC , 57 octets
Whegh, c'est un gâchis dans QBIC / QBasic ...
la source
Lua ,
7165 octetsAccepter les suggestions
Essayez-le en ligne!
la source
Au début, j'ai mal lu les instructions. Merci, Ørjan Johansen d' avoir signalé mon erreur!
PowerShell ,
46 à51 octetsEssayez-le en ligne!
la source
abcde
-bcd
ne se produit pas à l'une des extrémités de la chaîne.Excel, 129 octets
la source
sed ,
5653 octetsEssayez-le en ligne!
la source