Inspiré par cette question modeste de StackOverflow .
L'idée est simple; étant donné une chaîne et un tableau de chaînes, supprimez toutes les instances de mots du tableau (en ignorant la casse) de la chaîne d'entrée autre que la première, ainsi que tout espace supplémentaire que cela peut laisser. Les mots doivent correspondre à des mots entiers dans la chaîne d'entrée et non à des parties de mots.
Par exemple, "A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat", ["cat", "mat"]
devrait sortir"A cat called matt sat on a mat and wore a hat A called matt sat on a and wore a hat"
Contribution
- L'entrée peut être considérée comme une chaîne et un tableau de chaînes ou un tableau de chaînes où la chaîne d'entrée est le premier élément. Ces paramètres peuvent être dans l'un ou l'autre ordre.
- La chaîne d'entrée ne peut pas être considérée comme une liste de chaînes délimitées par des espaces.
- La chaîne d'entrée n'aura pas d'espaces de début, de fin ou consécutifs.
- Toutes les entrées ne contiendront que des caractères [A-Za-z0-9] à l'exception de la chaîne d'entrée comprenant également des espaces.
- Le tableau d'entrée peut être vide ou contenir des mots ne figurant pas dans la chaîne d'entrée.
Production
- La sortie peut être soit la valeur de retour d'une fonction, soit imprimée sur STDOUT
- La sortie doit être dans le même cas que la chaîne d'origine
Cas de test
the blue frog lived in a blue house, [blue] -> the blue frog lived in a house
he liked to read but was filled with dread wherever he would tread while he read, [read] -> he liked to read but was filled with dread wherever he would tread while he
this sentence has no matches, [ten, cheese] -> this sentence has no matches
this one will also stay intact, [] -> this one will also stay intact
All the faith he had had had had no effect on the outcome of his life, [had] -> All the faith he had no effect on the outcome of his life
5 times 5 is 25, [5, 6] -> 5 times is 25
Case for different case, [case] -> Case for different
the letters in the array are in a different case, [In] -> the letters in the array are a different case
This is a test Will this be correct Both will be removed, [this,will] -> This is a test Will be correct Both be removed
Comme c'est le golf de code, le nombre d'octets le plus bas gagne!
This is a test Will this be correct Both will be removed
+this will
. Les deux deuxièmes mots sont correctement supprimés, mais il a également supprimébe
le secondwill
pour une raison quelconque.@B=<>;$_=join$",grep!(/^$_$/xi~~@B&&$v{+lc}++),@F
lc
être appelé sans parens. Impressionnant! Et utiliser une expression rationnelle contre le tableau est beaucoup mieux, merci! J'ai du mal à me souvenir de tous vos conseils!Pyth, 27 octets
Essayez-le en ligne
Explication
Je suis sûr que les 10 octets pour la vérification insensible à la casse peuvent être réduits, mais je ne vois pas comment.
la source
Stax , 21 octets CP437
25 octets une fois déballés,
Le résultat est un tableau. La sortie pratique pour Stax est d'un élément par ligne.
Exécutez et déboguez en ligne!
Explication
la source
Perl 6 , 49 octets
Essaye-le
Étendu:
la source
Perl 5 ,
5048 octetsComprend
+1
pour-p
Donnez la chaîne cible suivie de chaque mot de filtre sur des lignes distinctes sur STDIN:
Le
chop
n'est nécessaire que pour corriger l'espace de fin au cas où le dernier mot serait suppriméJuste le code:
Essayez-le en ligne!
la source
JavaScript (ES6), 98 octets
la source
K4 , 41 octets
Solution:
Exemples:
Explication:
Séparer sur les espaces, mettre les deux entrées en minuscules, rechercher des correspondances, supprimer toutes les occurrences sauf la première, réunir à nouveau la chaîne.
la source
JavaScript (Node.js) , 75 octets
Essayez-le en ligne!
la source
f=
dans votre nombre d'octets. Vous pouvez également enregistrer un octet en curryant les paramètres, en les remplaçant(s,a)=>
pars=>a=>
puis en appelant la fonction avecf(s)(a)
.JavaScript ES6, 78 octets
Comment ça fonctionne:
la source
f
de la fonction pour un appel récursif, une fonction sans nom serait également une soumission valide, vous pouvez donc économiser deux octets en supprimant lef=
.PowerShell v3 ou version ultérieure, 104 octets
Au prix d'un octet, il peut fonctionner dans PS 2.0 en le remplaçant
$Matches.0
par$Matches[0]
.Version longue:
Utilisation
Enregistrez sous Wwhat.ps1 et appelez avec la chaîne et les mots comme arguments. Si plusieurs mots doivent être passés, les mots doivent être enveloppés dans @ ():
Alternative sans fichier (peut être collé directement dans une console PS):
enregistrez le script sous ScriptBlock (entre accolades) dans une variable, puis appelez sa méthode Invoke (), ou utilisez-la avec Invoke-Command:
la source
Javascript, 150 octets
la source
Propre ,
153142138134 octetsEssayez-le en ligne!
Définit la fonction
$ :: String [String] -> String
, faisant littéralement ce que le défi décrit. Il recherche et supprime chaque occurrence après la première, pour chaque mot cible.la source
Rétine,
4637 octets-14 octets grâce à @Neil , et +5 octets pour une correction de bogue.
Entrez dans le format
word1,word2,word3,sentence
, car je ne sais pas comment avoir une entrée multi-lignes (où les entrées sont utilisées différemment) ..Explication:
Essayez-le en ligne.
la source
+i`((.+),.*\2.* )\2( |$)
et la seconde,$1
mais je remarque que votre code échoue deoften,he intended to keep ten geese
toute façon.\b
place de(^|,)
, mais la mauvaise nouvelle est que je pense que vous en avez besoin\b\3\b
(je n'ai pas encore conçu de cas de test approprié).Rouge , 98 octets
Essayez-le en ligne!
la source
Décortiquer , 13 octets
Prend une liste de chaînes et une seule chaîne comme arguments, dans cet ordre. Suppose que la liste est exempte de doublons. Essayez-le en ligne!
Explication
la source
Min , 125 octets
L'entrée est
quot
sur la pile avec la chaîne d'entrée comme premier élément et unequot
des chaînes en double comme deuxième élément, c'est-à-direla source
Python 3 , 168 octets
Essayez-le en ligne!
la source
AWK , 120 octets
Essayez-le en ligne!
La partie "supprimer les espaces blancs" a rendu cela un peu plus difficile que je ne le pensais. Définition d'un champ sur
""
supprime un champ, mais laisse un séparateur supplémentaire.Le lien TIO a 28 octets supplémentaires pour permettre plusieurs entrées.
L'entrée est donnée sur 2 lignes. La première ligne est la liste des mots et la seconde est la "phrase". Notez que «mot» et «mot» ne sont pas considérés comme identiques à la ponctuation jointe. Avoir des exigences de ponctuation rendrait probablement ce problème encore plus amusant .
la source
Rubis ,
63 61 6059 octetsEssayez-le en ligne!
Une version plus courte qui respecte la casse et échoue ~ tous les 10 15 fois en raison du caractère aléatoire (37 octets)
la source
Python 2 , 140 octets
Essayez-le en ligne!
Explication:
re.sub(..)
peut prendre comme argument une fonction au lieu d'une chaîne de remplacement. Nous avons donc ici un lambda de fantaisie. Une fonction est appelée pour chaque occurrence de motif et un objet est transmis à cette fonction - matchobject. Cet objet contient des informations sur l'occurrence fondée. Je suis intéressé par l'index de cette occurrence, qui peut être récupéré parstart()
ouend()
fonction. Ce dernier est plus court, il est donc utilisé.Pour exclure le remplacement de la première occurrence du mot, j'ai utilisé une autre fonction de recherche d'expression régulière pour en obtenir exactement un puis comparer les index, en utilisant le même
end()
Le drapeau
re.I
est une version courte dere.IGNORECASES
la source