Примечание . Победивший ответ будет выбран 12.12.17. Текущий победитель - Джольф, 1 байт .
Я удивлен тем, что на этом сайте у нас еще не было ответа на вопрос, каково мое второе имя. Я много искал, но ничего не нашел. Если это дубликат, отметьте его как таковой.
Ваш вызов
Разобрать строку, которая выглядит как Jo Jean Smith
и вернуть Jean
.
Контрольные примеры
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
(Это последнее технически неверно, но исправить это было бы слишком сложно.)
Заметки:
- Имена всегда будут содержать как минимум 2 части, разделенные пробелами, с неограниченными промежуточными именами между ними или могут быть списком / массивом строк.
- Имена могут содержать алфавит (без учета регистра) и - (
0x2d
) - Вы можете вывести завершающий символ новой строки.
- Вам может потребоваться ввод для новой строки.
- Ввод из STDIN, параметра функции или аргумента командной строки разрешен, но жесткое его кодирование не допускается.
- Стандартные лазейки запрещены.
- Выход может быть возвращаемым значением функции, STDOUT, STDERR и т. Д.
- Конечные пробелы / переводы строк / табуляции в выводе разрешены.
- Любые вопросы? Комментарий ниже!
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
["John", "Jacob", "Jingleheimer", "Schmidt"]
->["Jacob", "Jingleheimer"]
допустимым решением?Ответы:
Джольф, 1 байт
Получает внутреннюю часть ввода. Попробуй это здесь!
источник
Ом , 2 байта (CP437)
Принимает и возвращает список строк.
Объяснение:
источник
Vim,
65 байтовПопробуйте онлайн!
(выходы с завершающим пробелом)
Поскольку Vim обратно совместим с V, я включил ссылку TIO для V.
объяснение
источник
dWWD
экономит один байтdW
удаляет до пробела.dw
удаляет до несловесных символов.Python , 24 байта
Попробуйте онлайн ввод строки!
Формат ввода: строка
Python 2 , 16 байт
Попробуйте онлайн список ввода!
Формат ввода: список
источник
Python
вместоPython 2
, потому что он работаетPython 3
также, как раз собирался опубликовать это.must be a string
, и так как формат ввода может быть списком, распечатка списка не может рассматриваться как неправильный результат!lambda n:n[1:-1]
input()
(Python 3 только)Brain-Flak , 133 байта
Попробуйте онлайн!
132 байта кода, плюс 1 байт для
-c
флага, который допускает ввод и вывод ASCII.К сожалению, в нем много дублирующегося кода, но его будет очень сложно использовать повторно. Я посмотрю на это позже. Вот объяснение:
источник
05AB1E , 2 байта
Попробуйте онлайн!
Если вывод списка отчеств не разрешен, я его поменяю.
источник
Haskell,
23,179 байтПринимает и возвращает список строк. Попробуйте онлайн!
Удалить первую строку, удалить последнюю строку.
Редактировать: @Generic Display Name отметил, что входные данные могут быть списком строк, которые сохранили 6 байтов.
Редактировать II: вернуть список строк вместо одной строки
источник
unwords.
на -8 байт.Mathematica, 10 байт
Безымянная функция, которая принимает и возвращает список строк.
Rest
отбрасывает последний элемент,Most
отбрасывает первый элемент,@*
это функция композиции. ЗаменаRest
и /Most
или использование правильной композиции/*
вместо этого также будет работать. Это лучше, чем индексирование#[[2;;-2]]&
по одному байту.источник
Brain-Flak , 86 байт
Попробуйте онлайн!
Большая часть этого кода происходит из этого ответа . Если вам нравится мое решение, вы должны также подтвердить это.
источник
Java 7, 74 байта
Java 8, 49 байт
Функция, которая идентифицирует первое вхождение символа пробела и последнего и извлекает середину. Результирующая строка имеет префикс пробела (во время публикации OP не уточнил, разрешены ли начальные пробелы), что можно устранить, добавив
.trim()
to the code for an extra cost of 7 bytes.По сравнению с C # у Java есть преимущество, заключающееся в указании конечного индекса вместо длины подстроки, что снижает количество байтов.
источник
JavaScript (ES6), 22 байта
Принимает и выводит массив строк.
Контрольные примеры
Показать фрагмент кода
Строковая версия (27 байт)
Принимает и выводит строку. Выходная строка представляет собой либо один пробел, если не найдено второе имя, либо отчество с начальным и конечным пробелами.
Показать фрагмент кода
источник
/./.exec.bind(/ .* /)
кажется, подражают # 2, за исключениемnull
ни одногоAWK ,
1710 байтСохранено 7 байт благодаря @steve!
Попробуйте онлайн!
Объяснение:
источник
$NF=$1="";1
$NF=$1=x;1
1
do? I'm not so good at AWK :)Groovy, 19 bytes
Explanation:
A closure / anonymous function
источник
.split()
?PHP, 37 Bytes
-4 bytes for an output as array
PHP, 42 Bytes
PHP, 50 Bytes
источник
Retina, 11 bytes
Try it online!
Matches the first word (including the space after it) and the last word, and removes both of them.
If I/O can be a linefeed-separated list, it can be done in 8 bytes instead:
Try it online!
источник
Perl 5,
2718 bytesNeed to run with
-n
option.Try it online!
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.
источник
/ (.+) /&&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.
источник
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).источник
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.источник
Pyth, 2 bytes
Online interpreter
источник
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:
источник
Kotlin, 39 bytes
Try it online!
i.e.
источник
VBA, 69 bytes
источник
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).
источник
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):
источник
$><<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!
источник
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!
источник
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.
источник
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
источник
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!
источник