Inspiriert von dieser bescheidenen StackOverflow-Frage .
Die Idee ist einfach; Entfernen Sie bei einem String und einem Array von Strings alle Instanzen von Wörtern im Array (Groß- / Kleinschreibung wird ignoriert) aus dem Eingabe-String (außer dem ersten) sowie alle zusätzlichen Whitespaces, die möglicherweise verbleiben. Die Wörter müssen mit ganzen Wörtern in der Eingabezeichenfolge und nicht mit Wortteilen übereinstimmen.
zB "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"]
soll ausgeben"A cat called matt sat on a mat and wore a hat A called matt sat on a and wore a hat"
Eingang
- Die Eingabe kann entweder als Zeichenfolge oder als Array von Zeichenfolgen oder als Array von Zeichenfolgen erfolgen, wobei die Eingabezeichenfolge das erste Element ist. Diese Parameter können in beliebiger Reihenfolge angegeben werden.
- Die Eingabezeichenfolge darf nicht als Liste von durch Leerzeichen getrennten Zeichenfolgen verwendet werden.
- Die Eingabezeichenfolge enthält keine führenden, nachfolgenden oder aufeinanderfolgenden Leerzeichen.
- Alle Eingaben enthalten nur die Zeichen [A-Za-z0-9] mit Ausnahme der Eingabezeichenfolge, die auch Leerzeichen enthält.
- Das Eingabearray kann leer sein oder Wörter enthalten, die nicht in der Eingabezeichenfolge enthalten sind.
Ausgabe
- Die Ausgabe kann entweder der Rückgabewert einer Funktion sein oder auf STDOUT gedruckt werden
- Die Ausgabe muss im selben Fall wie die ursprüngliche Zeichenfolge erfolgen
Testfälle
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
Da dies Codegolf ist, gewinnt die niedrigste Byteanzahl!
This is a test Will this be correct Both will be removed
+ zu scheiternthis will
. Die zweiten beiden Wörter werden korrekt entfernt, aber aus irgendeinem Grund wird auch dasbe
nach dem zweiten Wort entferntwill
.@B=<>;$_=join$",grep!(/^$_$/xi~~@B&&$v{+lc}++),@F
lc
ohne Eltern angerufen zu werden. Genial! Die Verwendung eines regulären Ausdrucks für das Array ist viel besser. Vielen Dank! Ich bemühe mich, mich an all deine Tipps zu erinnern!Pyth, 27 Bytes
Probieren Sie es online aus
Erläuterung
Ich bin sicher, dass die 10 Bytes für die Prüfung auf Groß- und Kleinschreibung reduziert werden können, aber ich verstehe nicht, wie.
quelle
Stax , 21 Bytes CP437
25 Bytes beim Auspacken,
Das Ergebnis ist ein Array. Die bequeme Ausgabe für Stax ist ein Element pro Zeile.
Online ausführen und debuggen!
Erläuterung
quelle
Perl 6 , 49 Bytes
Probier es aus
Erweitert:
quelle
Perl 5 ,
5048 BytesBeinhaltet
+1
für-p
Geben Sie die Zielzeichenfolge gefolgt von jedem Filterwort in separaten Zeilen in STDIN an:
Das
chop
wird nur benötigt, um das nachgestellte Leerzeichen zu korrigieren, falls das letzte Wort entfernt wirdNur der Code:
Probieren Sie es online!
quelle
JavaScript (ES6), 98 Byte
quelle
K4 , 41 Bytes
Lösung:
Beispiele:
Erläuterung:
Auf Leerzeichen aufteilen, beide Eingaben in Kleinbuchstaben schreiben, nach Übereinstimmungen suchen, alle bis auf das erste Vorkommen entfernen, die Zeichenfolge wieder zusammenfügen.
quelle
JavaScript (Node.js) , 75 Byte
Probieren Sie es online!
quelle
f=
in Ihre Byteanzahl aufnehmen. Sie können auch ein Byte von currying die Parameter speichern, ersetzt(s,a)=>
mits=>a=>
und dann mit dem Aufruf der Funktionf(s)(a)
.JavaScript ES6, 78 Bytes
Wie es funktioniert:
quelle
f
für einen rekursiven Aufruf verwenden, ist eine unbenannte Funktion auch eine gültige Übermittlung. Sie können also zwei Bytes sparen, indem Sie das löschenf=
.PowerShell v3 oder höher, 104 Byte
Auf Kosten von einem Byte, kann es in PS - 2.0 läuft durch Ersetzen
$Matches.0
mit$Matches[0]
.Lange Version:
Usage
Speichern als Whatever.ps1 und Anruf mit der Zeichenfolge und die Wörter als Argumente. Wenn mehr als ein Wort übergeben werden muss, müssen die Wörter in @ () eingeschlossen werden:
Alternative ohne Datei (kann direkt in eine PS-Konsole eingefügt werden):
Speichern Sie das Skript als ScriptBlock (in geschweiften Klammern) in einer Variablen, rufen Sie dann die Invoke () -Methode auf, oder verwenden Sie sie mit Invoke-Command:
quelle
Javascript, 150 Bytes
quelle
Sauber ,
153142138134 BytesProbieren Sie es online!
Definiert die Funktion
$ :: String [String] -> String
und tut so ziemlich wörtlich, was die Herausforderung beschreibt. Es findet und entfernt jedes Vorkommen nach dem ersten für jedes Zielwort.quelle
Retina,
4637 Bytes-14 Bytes dank @Neil und +5 Bytes für einen Bugfix.
Eingabe im Format
word1,word2,word3,sentence
, da ich nicht sicher bin, wie man eine mehrzeilige Eingabe hat (wo die Eingaben unterschiedlich verwendet werden).Erläuterung:
Probieren Sie es online aus.
quelle
+i`((.+),.*\2.* )\2( |$)
und die zweite zu vereinfachen ,$1
aber ich stelle fest, dass Ihr Codeoften,he intended to keep ten geese
trotzdem fehlschlägt .\b
statt(^|,)
, aber die schlechte Nachricht ist , ich glaube , Sie brauchen\b\3\b
(haben keinen passenden Testfall noch obwohl entwickelt).Rot , 98 Bytes
Probieren Sie es online!
quelle
Schale , 13 Bytes
Nimmt eine Liste von Zeichenfolgen und eine einzelne Zeichenfolge als Argumente in dieser Reihenfolge. Es wird davon ausgegangen, dass die Liste frei von Duplikaten ist. Probieren Sie es online!
Erläuterung
quelle
Min , 125 Bytes
Die Eingabe erfolgt
quot
auf einem Stapel mit der Eingabezeichenfolge als erstes Element und einerquot
der doppelten Zeichenfolgen als zweites Element, d. Hquelle
Python 3 , 168 Bytes
Probieren Sie es online!
quelle
AWK , 120 Bytes
Probieren Sie es online!
Der Teil "Whitespace entfernen" machte dies etwas schwieriger als ich zuerst dachte. Wenn Sie ein Feld auf setzen
""
, wird ein Feld entfernt, es bleibt jedoch ein zusätzliches Trennzeichen übrig.Die TIO-Verbindung verfügt über 28 zusätzliche Bytes, um mehrere Einträge zuzulassen.
Die Eingabe erfolgt über 2 Zeilen. Die erste Zeile ist die Liste der Wörter und die zweite Zeile ist der "Satz". Beachten Sie, dass "word" und "word" nicht als identisch mit der angehängten Interpunktion angesehen werden. Interpunktionsanforderungen würden dies wahrscheinlich zu einem noch spaßigeren Problem machen.
quelle
Ruby ,
63 61 6059 BytesProbieren Sie es online!
Eine kürzere Version, bei der zwischen Groß- und Kleinschreibung unterschieden wird und die ~ alle 10-15- mal aufgrund von Zufälligkeiten fehlschlägt (37 Byte)
quelle
Python 2 , 140 Bytes
Probieren Sie es online!
Erläuterung:
re.sub(..)
kann als Argument eine Funktion anstelle einer Ersatzzeichenfolge verwenden. Also hier haben wir etwas schickes Lambda. Für jedes Auftreten eines Musters wird eine Funktion aufgerufen und ein Objekt an diese Funktion übergeben - das Match-Objekt. Dieses Objekt enthält Informationen zum Fundierten Vorkommen. Ich interessiere mich für einen Index dieses Ereignisses, der vonstart()
oder über eineend()
Funktion abgerufen werden kann. Letzteres ist kürzer, so dass es verwendet wird.Um das Ersetzen des ersten Vorkommens eines Wortes auszuschließen, habe ich eine andere Regex-Suchfunktion verwendet, um genau das erste zu erhalten und dann die Indizes zu vergleichen, wobei dieselbe verwendet wurde
end()
Flagge
re.I
ist eine Kurzversion vonre.IGNORECASES
quelle