Remarque: La réponse gagnante sera sélectionnée le 4/12/17, le gagnant actuel est Jolf, 1 octet .
Je suis surpris que nous n'ayons pas encore eu de défi pour mon deuxième prénom sur ce site. J'ai fait beaucoup de recherches mais je n'ai rien trouvé. S'il s'agit d'un dup, veuillez le signaler comme tel.
Votre défi
Analyser une chaîne qui ressemble Jo Jean Smith
et retourner Jean
.
Cas de test
Input: Samantha Vee Hills
Output: Vee
Input: Bob Dillinger
Output: (empty string or newline)
Input: John Jacob Jingleheimer Schmidt
Output: Jacob Jingleheimer
Input: Jose Mario Carasco-Williams
Output: Mario
Input: James Alfred Van Allen
Output: Alfred Van
(Ce dernier est incorrect sur le plan technique, mais le corriger serait trop difficile.)
Remarques:
- Les noms auront toujours au moins 2 parties séparées par des espaces, avec des noms intermédiaires illimités entre eux ou peuvent être une liste / tableau de chaînes.
- Les noms peuvent contenir l'alphabet (insensible à la casse) et - (
0x2d
) - Vous pouvez générer une nouvelle ligne de fin.
- Vous pouvez avoir besoin d'une entrée pour avoir une nouvelle ligne de fin.
- L'entrée de STDIN, d'un paramètre de fonction ou d'un argument de ligne de commande est autorisée, mais le codage en dur n'est pas autorisé.
- Failles standard interdites.
- La sortie peut être une valeur de retour de fonction, STDOUT, STDERR, etc.
- Les espaces / sauts de ligne / tabulations dans la sortie sont autorisés.
- Des questions? Commentaires ci-dessous!
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte!
["John", "Jacob", "Jingleheimer", "Schmidt"]
->["Jacob", "Jingleheimer"]
une solution valable?Réponses:
Jolf, 1 octet
Obtient l'intérieur de l'entrée. Essayez-le ici!
la source
Ohm , 2 octets (CP437)
Accepte et renvoie une liste de chaînes.
Explication:
la source
Vim,
65 octetsEssayez-le en ligne!
(sorties avec un espace de fin)
Puisque Vim est rétrocompatible avec V, j'ai inclus un lien TIO pour V.
Explication
la source
dWWD
vous fait économiser un octet.dW
supprime jusqu'à l'espace blanc.dw
supprime jusqu'à ce que les caractères non-mot.Python , 24 octets
Essayez-le en ligne!
Format d'entrée: chaîne
Python 2 , 16 octets
Essayez-le en ligne!
Format d'entrée: liste
la source
Python
au lieu dePython 2
, car cela fonctionnePython 3
aussi, était sur le point de publier cela.must be a string
, et puisque le format d'entrée est autorisé à être une liste, imprimer une liste ne peut pas être considéré comme un mauvais résultat!lambda n:n[1:-1]
input()
(Python 3 uniquement)Brain-Flak , 133 octets
Essayez-le en ligne!
132 octets de code, plus 1 octet pour l'
-c
indicateur qui permet l'entrée et la sortie ASCII.Malheureusement, cela contient beaucoup de code dupliqué, mais il serait vraiment difficile de le réutiliser. J'y reviendrai plus tard. Voici une explication:
la source
05AB1E , 2 octets
Essayez-le en ligne!
Si la sortie d'une liste de prénoms n'est pas autorisée, je la changerai.
la source
Haskell,
23,179 octetsPrend et renvoie une liste de chaînes. Essayez-le en ligne!
Supprimer la première chaîne, supprimer la dernière chaîne.
Edit: @Generic Display Name a noté que l'entrée peut être une liste de chaînes, qui a sauvé 6 octets.
Edit II: retourne la liste des chaînes au lieu d'une seule chaîne
la source
unwords.
-8 octets.Mathematica, 10 octets
Une fonction sans nom qui accepte et renvoie une liste de chaînes.
Rest
jette le dernier élément,Most
jette le premier élément,@*
est la composition de la fonction. L'échangeRest
et /Most
ou l'utilisation de la bonne composition/*
fonctionneraient également. Cela bat l'indexation#[[2;;-2]]&
d'un octet.la source
Brain-Flak , 86 octets
Essayez-le en ligne!
La plupart de ce code provient de cette réponse . Si vous aimez ma solution, vous devriez également voter pour celle-ci.
la source
Java 7, 74 octets
Java 8, 49 octets
Fonction qui identifie la première occurrence du caractère espace et le dernier et extrait le milieu. La chaîne résultante est préfixée par un caractère espace (au moment de la publication, OP n'a pas précisé si les espaces de tête sont autorisés), ce qui peut être éliminé en ajoutant
.trim()
au code pour un coût supplémentaire de 7 octets.Comparé à C #, Java a l'avantage de spécifier l'index de fin au lieu de la longueur de sous-chaîne, ce qui réduit le nombre d'octets.
la source
JavaScript (ES6), 22 octets
Prend et sort un tableau de chaînes.
Cas de test
Afficher l'extrait de code
Version chaîne (27 octets)
Prend et sort une chaîne. La chaîne de sortie est soit un espace unique si aucun deuxième prénom n'a été trouvé, soit les noms intermédiaires avec des espaces de début et de fin.
Afficher l'extrait de code
la source
/./.exec.bind(/ .* /)
semble imiter le # 2, saufnull
pour aucunAWK ,
1710 octets7 octets enregistrés grâce à @steve!
Essayez-le en ligne!
Explication:
la source
$NF=$1="";1
$NF=$1=x;1
1
fait? Je ne suis pas si bon à AWK :)Groovy , 19 octets
Explication:
Une fonction de fermeture / anonyme
la source
.split()
?PHP, 37 octets
-4 octets pour une sortie sous forme de tableau
PHP, 42 octets
PHP, 50 octets
la source
Rétine , 11 octets
Essayez-le en ligne!
Correspond au premier mot (y compris l'espace après celui-ci) et au dernier mot, et les supprime tous les deux.
Si les E / S peuvent être une liste séparée par des sauts de ligne, cela peut être fait en 8 octets à la place:
Essayez-le en ligne!
la source
Perl 5 ,
2718 octetsBesoin de courir avec
-n
option.Essayez-le en ligne!
Wanted to do something similar in sed first, but, unfortunately, it doesn't support non-greedy quantifier.
It is needed in case middle name is more than one word.Edit
-9 bytes thanks to Dada.
Non-greedy quantifier is not needed anymore, among with some other things.
la source
/ (.+) /&&print$1
should be sorter. Great to see some new people golfing with Perl!print if s| (.+) |\1|
doesn't work? To me it looks similar to what you wrote.print if s| (.+) |\1|
replaces the middle part with... the middle part! (minus the spaces before and after), so it doesn't work. On the other side, what I suggested only matches the middle part and print only it ($1
).Javascript (ES6)
4916 bytesEdit:
Try it online!
ungolfed:
I forgot some of the simple properties of
slice
, and that the input can be an array. Thanks to @Neil and @fəˈnɛtɪk I was able to remove 27 bytes. Still not really competing.Original:
This isn't really competing but here's a Javascript solution:
This creates an anonymous function equal to:
How I golfed it
This is a pretty simple golf. I turned the function into an arrow function. Then I "minified" the code. This included renaming
name
into a single character(a
in this case) and removing thelet
decloration of the variable.Snippet
Show code snippet
Hope this helps anyone who is stuck on the challenge.
la source
length -
is unnecessary, asslice
already accepts negative lengths as being relative to the end. This means that you no longer need the intermediate variable, so you can turn your arrow function from a block into an expression.-1
is the last but one that you need here.Röda, 9 bytes
Try it online!
Not a very interesting solution. Takes a list from the stream and returns the middle names.
21 bytes and I/O:
Try it online!
This uses
/
(split) and&
(join).la source
Jelly, 2 bytes
Try it online!
This works as a non-inline link (i.e. function), not a full program.
'John','Jacob','Jingleheimer','Schmidt'
→'Jacob','Jingleheimer'
As a full program, it would be 3 bytes:
ḊṖK
, which prints a space-separated middle name.la source
Pyth, 2 bytes
Online interpreter
la source
C#, 67 bytes
Anonymous function which identifies the first occurrence of the space character and the last one and extracts the middle. It also extracts a trailing space, which can be removed at the cost of 2 bytes.
Full program with test cases:
la source
Kotlin, 39 bytes
Try it online!
i.e.
la source
VBA, 69 bytes
la source
R,
302722 bytesCurrent solution due to user11599!
Takes input from stdin, returns each middle name as a separate string. Returns
character()
in the case of no middle name; that is, a vector of classcharacter
of length0
.Explanation:
Read stdin into a list of strings, separated by spaces
Remove the last element.
head
returns the firstn
elements of a list, withn
defaulting to6
. Ifn
is-1
it returns all but the last element.Now, remove the first element of this list.
This yields the middle name(s).
la source
head()
andtail()
, but I didn't know you could pass a negative number as the second argument. Nice!Ruby,
2413 bytesSaved 11 bytes thanks to Piccolo pointing out that array-like output is allowed.
Takes the name as separate command line arguments, e.g.:
or
Previous code (outputs a proper string):
la source
$><<ARGV[1..-2].join" "
it complains about the" "
being unexpected, so I'd have to add parentheses - which would add 1 byte in the end.puts ARGV[1..-2]
, just so you know.p ARGV[1..-2]
for 13 bytes - just looks nothing like the output in OPs challengeGolang,
15281 bytesIt takes input as "Samantha Vee Hills" (with double quotes) and return the middle name to the stdout.
Try it Online!
Edit: @Dada, note that the "function as answer is allowed" shorten my code 71 bytes. a big thanks!
la source
Matlab,
81,79,78, 55 BytesTakes in an input string,
s
, is split (by the default delimiter, whitespace char) into a cell array, from which the middle element is accessed. Then the middle elements are concatenated, or an empty string is returned.Edit: thanks to Luis Mendo for saving 3 bytes!
Edit 2: Better solution from Ankit!
la source
nnz
on a cell array, but I did the other two changes :)function x=a(s) s=strsplit(s);x=strjoin(s(2:end-1));end
C, 42 bytes
The parameter is a NULL terminated array of pointers to char.
See it work here.
The command line arguments may also be used with the same function.
C, 51 bytes
A full program. Input is done through command line arguments.
See it work here.
C, 54 bytes
The parameter is an in/out parameter.
See it work here.
la source
Python 2,
421916 BytesTry it online! Thanks to @Kritixi Lithos for saving 23 bytes! Thanks @math_junkie for saving 3 more bytes. For input, put each part of the name as a string within a list like so:
And yes, the OP has approved a list to be a valid input.
Explanation
la source
print input()[1:-1]
is shorterlambda n:n[1:-1]
is even shorterSamantha Vee Hills
as input in repl.it link that you've shared, this just printsamantha Vee Hill
which is definitely not the output required.Names will always have at least 2 space-separated parts
is the first point of the question right.C++, 91 bytes
Takes input as a reference to a list of strings and modifies the list directly.
Try it online!
la source