Étant donné une chaîne, recherchez le premier mot commençant par chaque lettre (insensible à la casse).
Échantillon
Utilisation Ferulas flourish in gorgeous gardens.
comme entrée:
"Ferulas flourish in gorgeous gardens."
^^^^^^^ ^^ ^^^^^^^^
| | |
| | --> is the first word starting with `g`
| --> is the first word starting with `i`
--> is the first word starting with `f`
Ensuite, la sortie de cet exemple doit être les mots correspondants joints par un seul espace:
"Ferulas in gorgeous"
Défi
L'entrée et la sortie doivent être une représentation sous forme de chaîne ou l'alternative la plus proche dans votre langue.
Programme ou fonction autorisé.
Vous pouvez considérer qu'un mot est au moins l'un des suivants lowercase or uppercase letters, digits, underscore
:.
C'est le code-golf , la réponse la plus courte en victoires en octets.
Un autre échantillon:
input: "Take all first words for each letter... this is a test"
output: "Take all first words each letter is"
input: "Look ^_^ .... There are 3 little dogs :)"
output: "Look _ There are 3 dogs"
input: "...maybe some day 1 plus 2 plus 20 could result in 3"
output: "maybe some day 1 plus 2 could result in 3"
Réponses:
Rétine , 28 octets:
M!
- Faites correspondre chaque œuvre et imprimez tous les mots séparés par des retours à la ligne.i
- Ignorer la casse.\b(\w)
- Capturez la première lettre de chaque mot(?<!\b\1.+)
- Après avoir fait correspondre la lettre, vérifiez s'il n'y avait pas de mot précédent commençant par la même lettre.\1.+
assure au moins deux caractères, donc nous sautons le mot actuel.\w*
- correspond au reste du mot.Ce qui précède ne correspond qu'aux mots - tous les autres caractères sont supprimés.
¶\n
- Remplacez les nouvelles lignes par des espaces.Essayez-le en ligne!
la source
Rétine , 45 octets
Utilise simplement une seule expression régulière pour supprimer les mots ultérieurs commençant par le même
\w
caractère (insensible à la casse avec l'i
option), convertit les séquences de\W
en un seul espace, puis supprime tout espace de début / fin du résultat.Essayez-le en ligne!
Edit: Voir la réponse de @ Kobi pour une version plus courte en utilisant
M!`
la source
i` \b((\w)\w*)\b(?<=\b\2\w*\b.+)
(un espace avant le premier\b
) Les lignes sont-elles ensuite inutiles?a...a -> a
JavaScript (ES6),
7371 octetsEnregistré 2 octets grâce à @ edc65!
Tester
la source
parseInt("_",36) = NaN
? Blasphème!s=>s.match(u=/\w+/g).filter(w=>u[w=parseInt(w[0],36)]?0:u[w]=1).join' '
Pyth, 23 octets
Essayez-le en ligne: démonstration ou suite de tests
J:z"\w+"1
trouve tous les mots dans l'entrée à l'aide de l'expression rationnelle\w+
et les stocke dansJ
..grhk0J
regroupe les mots par leur première lettre minuscule,hM
prend la première de chaque groupe,xDJ
trie ces mots par leur index dans la chaîne d'entrée etjd
place des espaces entre eux.la source
Perl 6, 39 octets
la source
\w+
et jouent lasubstr
partieC,
142132122 122 octets10 octets de moins grâce à @tucuxi!
Imprime un espace de fin après le dernier mot de sortie.la source
c>47
etc<58
en utilisantisalnum
au lieu deisalpha
MATL , 23 octets
Cela emprunte l'idée de Jakube d'utiliser une expression rationnelle pour supprimer les caractères indésirables et diviser en même temps.
L'entrée est une chaîne entre guillemets simples.
Essayez-le en ligne!
Explication
la source
Vim 57 touches
Explication:
Je suis vraiment déçu par la longueur de celui-ci. Les caractères non valides « » (de tout sauf
a-z
,A-Z
,_
et dans l' espace) vraiment jeté me off. Je suis sûr qu'il existe une meilleure façon de procéder:Puisque
\h
correspond à tout cela, attendez-vous à l'espace, mais je ne peux pas comprendre comment mettre le métachar dans une plage. Si quelqu'un a des conseils, j'aimerais les entendre.la source
a-zA-Z_
et non\w
? les chiffres sont validesJulia,
165155151129102 octetsIl s'agit d'une fonction qui accepte une chaîne et renvoie une chaîne.
Non golfé:
53 octets enregistrés avec l'aide de Sp3000!
la source
Gelée,
3231 octetsEssayez-le en ligne!
la source
C # (LINQPAD) -
136128 octetsla source
05AB1E , 40 octets
Code:
Essayez-le en ligne!
Explication:
Nous générons d'abord tous les caractères qui doivent être supprimés de la chaîne d'entrée en utilisant
94L32+ç
( Essayez ici ). Nous joignons cette chaîne en utilisantJ
et en supprimant[a-zA-Z0-9_]
qui est stockée dans žj ( Essayez ici ). Nous supprimons tous les caractères qui sont dans la deuxième chaîne de la première chaîne, ce qui nous laissera:Cela peut également être testé ici . Nous le
D
reproduisons et le stockonsX
avec laU
commande-. Nous supprimons ensuite tous les caractères de cette chaîne de l'entrée. Nous nous séparons ensuite sur les espaces blancs en utilisantð¡
et supprimons toutes les chaînes vides (en utilisant""K
). Nous avons maintenant cela .Il s'agit de la version claire de l'entrée, avec laquelle nous travaillerons. Nous cartographions chaque élément en utilisant
v
. Cela utilisey
comme variable chaîne. Nous prenons le premier caractère de la chaîne en utilisant¬
et pushX
, qui contient une chaîne avec tous les caractères interdits (!"#$%&'()*+,-./:;<=>?@[\]^`{|}~
). Nous vérifions si lal
version en minuscule du premier caractère, (qui sera également©
affichée dans le registre), est dans cette chaîne en utilisantå
. Couvert par cette partie:,ï>i
si la première lettre n'existe pas dans la chaîne de caractères interdits (X
), nous ajoutons cette lettre à la liste des caractères interdits (terminé avecX®«U
) et nous poussonsy
en haut de la pile.Enfin, lorsque les chaînes sont filtrées, nous joignons la pile par des espaces avec
ðý
.la source
PHP
Inspiré par l'utilisation de regex dans la plupart des réponses, j'ai essayé à l'origine de le faire sans utiliser regex du tout juste pour montrer une variation soignée, mais le point critique de ne pas avoir de chaînes propres en entrée a ruiné cette idée. Triste.
Avec wrapper de fonction, 89 octets
Sans wrapper de fonction (nécessitant $ s pré-déclaré), 73 octets
Explication:
Mon seul regret est de ne pas avoir trouvé un moyen plus rapide de vérifier / convertir la casse des lettres.
la source
Python, 103 octets
la source
Lua, 172 octets
Ça a fini bien plus longtemps que je voulais ...
Non golfé
la source
Sérieusement, 43 octets
Essayez-le en ligne!
Le manque de capacités d'expression régulière a rendu cela beaucoup plus difficile que nécessaire.
Explication:
la source
Ruby 76 octets
Ou avec une définition de méthode de 88 octets
Non golfé et avec test unitaire:
la source
\w
inclut des caractères numériques,[\w\d]
peut donc être remplacé par\w
. De plus, si lesnil
valeurs sont dans un tableau lorsque vous appelezjoin' '
(ou mieux encore,*' '
c'est un raccourci que vous pouvez utiliser pour économiser plus d'octets), elles disparaissent, donc l'appel àcompact
n'est pas nécessaire.\w\d
gênant pour moi. Mais si je supprime le,compact
j'obtiens des espaces supplémentaires (voir['x',nil,'x']*'y' == 'xyyx'
). Ou ai-je raté quelque chose?(list-[p])
enregistre les octetslist.compact
. Est également/\w/
équivalent à/[\w]/
. Enfin, vous pouvez remplacer votrenil
avecp
et votre!p
avec1
(puisque votre hachage n'a besoin que de valeurs véridiques)nil
parp
ne fonctionne pas. Si je l'utilise dans mon code, j'obtiens une erreur de syntaxe. Je dois encapsuler comme(p)
- mais j'ai encore 3 caractères.!f[j=i.upcase]?(f[j]=1;h):p
. J'ai également pensé à cela, mais à cause de l'indexation des chaînes, l'utilisations.scan(/\w+/)
et la suppression de lai
faveur deh[0]
travaux aussi.grep et awk,
6856 octetsLe script:
Explication:
grep -o
correspond aux mots légaux, en les imprimant chacun sur sa propre ligne.awk
prend la première lettre de chaque ligne avecsubstr
, la met en minuscule, puis incrémente une entrée de table de hachage avec cette clé. Si la valeur n'a pas été définie avant l'incrément, la ligne est imprimée.echo ...
transforme les lignes en motsJ'ai déjà essayé de créer une solution sans
awk
, en utilisantuniq
,sort
,grep
et ,bash
mais a manqué de peu. Histoire dans les éditions.Merci à Dennis pour certaines améliorations que j'ai ratées.
la source
Python 3.5, 138 octets:
Fondamentalement, ce qui se passe est ..
la source
PHP 120 octets
Cela génère un tas d'avertissements, mais c'est très bien.
la source
function
nécessaire?Javascript ES6,
108107 caractères107 caractères, la chaîne de résultat est tronquée
Tester:
la source
f=
ne compte pas .Tcl , 150 octets
Essayez-le en ligne!
la source