Ваша задача - взять имя (строку) в качестве ввода, например
Albert Einstein
и вывод:
Einstein, Albert
псевдокод:
set in to input
set arr to in split by " "
set last to the last element of arr
remove the last element of arr
set out to arr joined with " "
prepend ", " to out
prepend last to out
output out
Больше тестовых случаев:
John Fitzgerald Kennedy => Kennedy, John Fitzgerald
Abraham Lincoln => Lincoln, Abraham
правила
- Ввод всегда будет соответствовать регулярному выражению
^([A-Z][a-z]+ )+([A-Z][a-z]+)$
. - Вам не нужно обрабатывать странные имена , даже если выходные данные технически некорректны, здесь все в порядке.
- Конечный пробел / новая строка в порядке.
- Любые вопросы? Комментарий ниже!
le
с,
и у вас есть этот вопросle
с,
.Ответы:
05AB1E , 7 байтов
Код:
Использует кодировку 05AB1E . Попробуйте онлайн!
Объяснение:
источник
JavaScript (ES6), 34 байта
Демо-версия:
источник
Сетчатка ,
191716 байтИзменить: Спасибо Riker за сохранение 3 байта
Попробуйте онлайн!
источник
(.+)
работает тоже для обоих.\w
в первую очередьЖеле , 7 байт
Попробуйте онлайн!
Я не очень хорошо знаю Jelly, но, читая другие ответы, казалось, что они не использовали оптимальный алгоритм ... так вот оно:
объяснение
источник
Vim, 10 байт / нажатий клавиш
Попробуйте онлайн!
источник
<esc>
не появляется в вашем коде. Обратите внимание на тех, кто хочет попробовать: Предполагается, что имя написано в редакторе, и вы находитесь в начале файла в обычном режиме.V / vim,
98 байтПопробуйте онлайн!
Сохранено один байт благодаря
Обратите внимание, что в конце есть пробел. Оставляет завершающий пробел, который разрешен в соответствии с правилами.
Объяснение:
источник
<esc>
. Вы можете сохранить один байт, выполнив$bD
вместо$diw
. :)$bD
не обрабатывает односимвольные имена, я спросил OP , разрешено ли это.Python 2 , 39 байт
Попробуйте онлайн!
Да,
rsplit
.источник
input
вместо игрыraw_input
в гольф - см. Эту мета-Mathematica,
5240 байтисточник
> <> , 27 байт
Попробуйте онлайн!
источник
C 45 байтов
РЕДАКТИРОВАТЬ: Я только сейчас заметил требование для ввода, возможно, более двух слов. Я оставлю это как есть с примечанием, что это работает только для двух слов.
РЕДАКТИРОВАТЬ: удалено
\n
. Добавьте 2 байта, если считаете это необходимым.Компилируется с
gcc name.c
GCC 6.3.1. Игнорировать предупреждения. Использование:Злоупотребление языком:
int
изmain
и ничего не возвращается.printf
. GCC включит его в любом случае.b
. Не имеет значения с%s
Спасибо @ Khaled.K за советы по использованию,
main(a,b)int**b;
а неmain(int a, int **b)
.источник
main(a,**b){printf("%s, %s",b[2],b[1]);}
40 байтовmain(a,b)int**b;{printf("%s, %s\n",b[2],b[1]);}
Рубин , 22 байта
Попробуйте онлайн!
источник
sed, 19 + 1 для -E = 20 байт
Необходимо использовать -r (GNU) или -E (BSD, последние GNU), чтобы избежать необходимости избегать скобок группировки.
Если он записан в командной строке, он должен быть заключен в кавычки, чтобы оболочка не анализировала его как несколько токенов:
источник
C 68 байт
Надеюсь, что нет ничего плохого в том, чтобы добавить еще один пост, но здесь решение несколько отличается от моего ранее опубликованного решения C. Этот принимает любое количество имен.
Компилировать с
gcc name.c
(GCC 6.3.1) и игнорировать предупреждения. Использование:Спасибо @ Khaled.K за советы по
main(a,b)int**b;
Спасибо за подсказку для цикла @Alkano.
источник
main(a,b)int**b;{for(printf("%s,",b[--a]);++b,--a;printf(" %s",*b));}
main(a,b)int**b;{a&&printf("%s,"b[a-1])&&main(a-1,b);}
main(a,b)int**b;{--a&&printf("%s, ",b[a])&&main(a,b);}
. Это на 2 байта короче, и это гарантирует, что вы не печатаете имя программы, но она по-прежнему использует запятую между каждым именем.Mathematica, 45 байт
Сохраните несколько байтов в ответе ngenisis, приняв ввод как список символов, а не как строку. Чистая функция, которая использует правило замены шаблона.
Mathematica, 49 байтов
Еще одна чистая функция, принимающая список символов в качестве входных данных и возвращающая список символов. Этот добавляет
","
и" "
к вводу, а затем поворачивает список символов до последнего пробела в конце. (Таким образом, у выхода есть завершающий пробел, в отличие от первой функции выше.)источник
#/.{a__,s=" ",b:Except@s..}->{b,",",s,a}&
на4
байты короче, но я обнаружил, что этоExcept
не нужно для строковых шаблонов, экономя мне12
байты.x
в вашем ответе?C #,
7672 байтаСохранено 4 байта с помощью @KevinCruijssen
Старая версия с использованием подстрок для 76 байт:
источник
System.Text.RegularExpressions.Regex
что в C # так чертовски долго ...s=>new System.Text.RegularExpressions.Regex("(.+) (.+)").Replace(s,"$2, $1");
всего на один байт больше.Regex
для сохранения 4 байтовAwk, 18 символов
Образец прогона:
Попробуйте онлайн!
источник
Желе , 8 байт
Попробуйте онлайн!
источник
05AB1E , 9 байтов
Попробуйте онлайн!
объяснение
источник
Pyth , 11 байт
Объяснение:
Проверьте это онлайн!
источник
PHP, 45 байт
Попробуйте онлайн!
источник
\pL+
вместо.+
?.
или\pL
MATLAB / Октава , 37 байт
Попробуйте онлайн!
Основываясь на ответе Retina @ngenisis, мы также можем играть в регулярные выражения в Octave и MATLAB, сэкономив несколько байтов по сравнению с моим предыдущим ответом.
Старый ответ:
Я собираюсь оставить этот ответ и здесь, учитывая, что это более уникальный способ сделать это по сравнению с простым регулярным выражением.
Октава ,
4947 байтСтарый попробуйте онлайн!
Анонимная функция для генерации вывода.
В основном код сначала находит последний пробел в строке, используя
b=find(a==32)(end)
. Затем он принимает конечную часть строки (после пробела), используяa(b+1:end)
, гдеb
вывод нахождения последнего пробела. Он также берет начало строки сa(1:b-1)
и объединяет оба вместе с', '
промежуточным.Я уже сэкономил несколько байт по сравнению с обычным
find(a==32,1,'last')
. Не совсем уверен, что можно сэкономить гораздо больше.источник
Желе , 9 байт
Объяснил, иш:
Попробуйте онлайн!
Попробуйте на всех тестовых случаях.
источник
Python 3, 52 байта
Очень просто, можно использовать помощь в гольф. Просто помещает последнее слово впереди и соединяет их с ",".
Прецедент:
источник
Japt, 14 байт
Порт ответа @ programmer5000 на JavaScript .
Попробуйте онлайн!
источник
Ява,
11062 байтаНестатический метод.
-48 байтов благодаря Кевину Круйссену
источник
String c(String s){int i=s.lastIndexOf(' ');return s.substring(i+1)+", "+s.substring(0,i);}
короче ( 91 байт ).String d(String s){return s.replaceAll("(.+) (.+)","$2, $1");}
еще короче ( 62 байта ).PHP ,
6259 байт-3 байта, спасибо Йорг
Попробуйте онлайн!
Старое решение, 63 байта
Не работает, если у человека есть 3 повторяющихся имени.
Попробуйте онлайн
источник
$argn
вместо$argv[1]
Excel,
174170168 байтСохранено 2 байта благодаря Вернишу
Это не модно и не умно. Это довольно простой метод. Такое ощущение, что должен быть более короткий путь с формулами массива, но я не могу найти тот, который работает.
источник
-1
функцию LEFT.JS (ES6),
5244 байтаисточник
MATL , 10 байт
Попробуйте онлайн!
объяснение
источник
Гема, 23 персонажа
Единственная замечательная вещь здесь - это то, как вызову удалось поразить слабость ненасытности паттернов Гема.
Образец прогона:
источник