Bei dieser Herausforderung entfernen Sie doppelte Wörter aus jedem Satz .
Beispiele
Hello Hello, World!
Hello, World!
Code Code! Golf Code
Code! Golf Code
Hello hello World
Hello World
Programming Golf Programming!
Programming Golf!
Spezifikation
- Die Eingabe erfolgt durch eine Zeichenfolge aus ASCII-Zeichen.
- Ein Satz ist definiert als alles bis zum Ende der Zeichenfolge, ein Zeilenvorschub (
\n
) oder eine Interpunktion (.!?
). - Ein Wort ist definiert als eine Folge von
A-Za-z
. - Bei Wörtern wird die Groß- und Kleinschreibung nicht
Hello
berücksichtigt ( ==heLlO
).
- Es wird nur das erste Vorkommen eines Wortes in einem Satz beibehalten.
- Wenn ein Wort entfernt wird, sollten die Leerzeichen vor dem entfernten Wort entfernt werden. (zB
A A B
->A B
).
- Standardschlupflöcher sind wie immer nicht erlaubt.
Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes!
a b a.
geht zu was?a b.
weil das `a` entfernt wird.a__b_b_a
, bekommen Siea_b_a
(zuerstb
entfernt) odera__b_a
(zweiteb
entfernt)?a__b__
weil das wiederholteb
entfernt wird und das wiederholtea
entfernt wirdAntworten:
Vim, 27 Bytes
Beachten Sie, dass die 27 Bytes am Ende einen nachgestellten Wagenrücklauf enthalten.
Probieren Sie es online aus! Randnotiz: Dies ist ein Link zu einer anderen Sprache, die ich schreibe und die "V" heißt. V ist größtenteils abwärtskompatibel mit vim, sodass es in jeder Hinsicht als vim-Interpreter gelten kann. Ich habe auch ein Byte hinzugefügt,
%
damit Sie alle Testfälle gleichzeitig überprüfen können.Erläuterung:
quelle
JavaScript (ES6), 98
Beachten Sie, dass es @ Neil's ärgerlich ähnlich ist, obwohl ich es selbst gefunden habe, nur mit der zusätzlichen Logik, die gesamte Eingabezeichenfolge in Sätze aufzuteilen.
Prüfung
quelle
Netzhaut ,
6646 BytesDie Byteanzahl setzt die ISO 8859-1-Codierung voraus.
Probieren Sie es online aus!
Erläuterung
Da nur Buchstaben als Wortzeichen betrachtet werden sollten (Regex behandelt jedoch auch Ziffern und Unterstriche als Wortzeichen), müssen wir unsere eigenen Wortgrenzen festlegen. Da die Eingabe garantiert nur ASCII-Zeichen enthält, füge ich
·
(außerhalb von ASCII, aber innerhalb von ISO 8859-1) alle Wörter ein und entferne sie erneut mit den Duplikaten. Das spart 20 Bytes gegenüber der Verwendung von Lookarounds zum Implementieren generischer Wortgrenzen.Dies passt zu jedem Wort und umgibt es
·
.Dies sind zwei Schritte, die zu einem komprimiert sind.
<sp>*(·[a-z]+·)(?<=\1[^.!?¶]+)
stimmt mit einem vollständigen Wort·
überein (sichergestellt durch Einfügen des Wortes in die Übereinstimmung), zusammen mit allen vorangestellten Leerzeichen, vorausgesetzt, dass wir (wie durch das Aussehen sichergestellt) dasselbe Wort irgendwo früher im Satz finden können. (Das¶
entspricht einem Zeilenvorschub.)Der andere Teil ist einfach der
·
, der allen künstlichen Wortgrenzen entspricht, die in der ersten Hälfte nicht übereinstimmten. In beiden Fällen wird die Übereinstimmung einfach aus der Zeichenfolge entfernt.quelle
C 326 Bytes
Wer braucht reguläre Ausdrücke?
quelle
Perl 6 , 104 Bytes
Verwendungszweck:
Erläuterung
quelle
Perl 5, 57 Bytes
56 Bytes Code + 1 für
-p
Verwendungszweck:
Möglicherweise muss +1 sein. Derzeit gehe ich davon aus, dass die Eingabe nur Leerzeichen enthält, keine Tabulatoren.
quelle
\s
stattdessen zu verwenden ... Immer noch nicht annähernd deine Antwort auf die Netzhaut!