Dans ce défi, vous supprimerez les mots en double de chaque phrase .
Exemples
Hello Hello, World!
Hello, World!
Code Code! Golf Code
Code! Golf Code
Hello hello World
Hello World
Programming Golf Programming!
Programming Golf!
spécification
- L'entrée sera une chaîne de caractères ASCII.
- Une phrase est définie comme n'importe quoi jusqu'à la fin de la chaîne, un saut de ligne (
\n
) ou une ponctuation (.!?
). - Un mot est défini comme une séquence de
A-Za-z
. - Les mots ne respectent pas la casse (
Hello
==heLlO
).
- Seule la première occurrence d'un mot dans une phrase est conservée.
- Si un mot est supprimé, les espaces avant le mot supprimé doivent être supprimés. (par exemple
A A B
->A B
).
- Comme toujours, les failles standard sont interdites.
C'est le code-golf donc le code le plus court en octets gagne!
a b a.
va à quoi?a b.
car le «a» est supprimé.a__b_b_a
, obtenez-vousa_b_a
(premierb
supprimé) oua__b_a
(deuxièmeb
supprimé)?a__b__
parce que la répétitionb
est supprimée et la répétitiona
est suppriméeRéponses:
Vim, 27 octets
Notez que les 27 octets incluent un retour chariot fin à la fin.
Essayez-le en ligne! Note latérale: Ceci est un lien vers une autre langue que j'écris appelée "V". V est principalement rétrocompatible avec vim, donc à toutes fins utiles, il peut compter comme un interprète vim. J'ai également ajouté un octet
%
pour que vous puissiez vérifier tous les cas de test à la fois.Explication:
la source
JavaScript (ES6), 98
Notez que même si je l'ai trouvé moi-même, il ressemble énormément à @ Neil, juste avec la logique supplémentaire pour diviser la chaîne d'entrée entière en phrases.
Tester
la source
Rétine ,
6646 octetsLe nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Explication
Étant donné que seules les lettres doivent être considérées comme des caractères de mots (mais l'expression régulière traite les chiffres et les traits de soulignement comme des caractères de mots), nous devons créer nos propres limites de mots. Étant donné que l'entrée ne contient que des caractères ASCII, j'insère
·
(en dehors de l'ASCII, mais à l'intérieur de l'ISO 8859-1) autour de tous les mots et je les supprime à nouveau avec les doublons. Cela économise 20 octets sur l'utilisation de contournements pour implémenter des limites de mots génériques.Cela correspond à chaque mot et l'entoure
·
.Il s'agit de deux étapes compressées en une seule.
<sp>*(·[a-z]+·)(?<=\1[^.!?¶]+)
correspond à un mot complet (garanti en incluant le·
dans le match), ainsi que tous les espaces qui le précèdent, à condition que (comme assuré par le lookbehind) nous puissions trouver le même mot quelque part plus tôt dans la phrase. (Le¶
correspond à un saut de ligne.)L'autre partie est simplement le
·
, qui correspond à toutes les limites de mots artificiels qui ne correspondaient pas à la première moitié. Dans les deux cas, la correspondance est simplement supprimée de la chaîne.la source
C, 326 octets
Qui a besoin d'expressions régulières?
la source
Perl 6 , 104 octets
Usage:
Explication
la source
Perl 5, 57 octets
Code de 56 octets + 1 pour
-p
Usage:
Peut-être besoin d'être +1, actuellement je suppose qu'il n'y aura que des espaces dans l'entrée, pas d'onglets.
la source
\s
place ... Toujours loin de votre réponse rétine cependant!