Вызов :
Задана строка, разбитая на определенные позиции и использующая заглавные буквы первого символа данного слова. Прописать первый символ первого слова, если и только если оно уже было написано
Вход:
Строка s
и символ c
.
Ouput:
Строка с каждым вхождением c
заменяется на первый символ с заглавной буквы
Примеры :
STRING(s) CHARACTER(c) RESULT
Hello_world _ HelloWorld
me,no,like , meNoLike
you-got-it - youGotIt
Am^I^clear ^ AmIClear
go!full!caps ! goFullCaps
weird&but&tRue & weirdButTRue
ProbleM1fixed1no 1 ProbleMFixedNo
!prob!!lem!s!Olved!! ! ProbLemSOlved
Замечания :
- Данный ввод всегда будет действительным. То есть: первая всегда будет строкой с хотя бы одним экземпляром символа, который нужно заменить. Вторым всегда будет один символ.
- Длина входной строки будет больше 4.
Там будет по крайней мере одно вхождение персонажа для разделения.
Входные данные гарантированно содержат только буквы и разделитель (спасибо @Arnauld)
- Разделитель - это все, что не является алфавитом (az / AZ) (предложено @Dennis)
Критерии победы:
Это код-гольф, поэтому выигрывает самый короткий код в байтах для каждого языка.
- Спасибо @JonathanAllan за указание на две ошибки.
1
). Попробуйте подумать о том, как решения могут потерпеть неудачу, и создайте контрольный пример для таких ситуаций. Некоторые примеры: буквы в качестве разделителей, разделитель - последний символ, последовательные разделители и т. Д. Не нужно иметь много тестов, которые не проверяют разные вещи..
, я могу представить некоторые функции разбиения строк, борющиеся с этим.Ответы:
Python 3 , 63 байта
Попробуйте онлайн!
источник
C (gcc) ,
615355 байтов-8 байт благодаря Денису!
Попробуйте онлайн!
источник
*s==c?*++s&=95:0;
вместоif(*s==c)*++s&=95;
JavaScript (ES6),
5856 байтСохранено 2 байта благодаря @ l4m2 / @Downgoat
Принимает ввод в синтаксисе карри
(s)(c)
.Попробуйте онлайн!
комментарии
источник
s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase())
, поскольку оно не работает для специальных символов регулярных выражений!prob!!lem!s!Olved!!
+
перед этим.
в RegEx обойдется.Perl 6
-p
, 19 байтПопробуйте онлайн!
источник
sed 4.2.2 (-r), 21
Я пытался
\W
вместо[^a-z]
, но, к сожалению, это не соответствует_
.Попробуйте онлайн!
источник
sed 4.2.2 (-r), 21 bytes
.Желе , 8 байт
Попробуйте онлайн!
Как это устроено
источник
Октава ,
83,66, 64 байтаСохранено 2 байта благодаря Луису Мендо.
upper
вместоtoupper
.Попробуйте онлайн!
Вау, это, наверное, самый грязный кусок октавного кода, который я когда-либо писал! При этом используются два трюка, опубликованных в этом вопросе, а именно список аргументов и массивы ячеек.
Объяснение:
Ввод списка аргументов:
k
здесь первый символs
после каждого разделителяc
, преобразованный в верхний регистр. Индекс каждого заглавного символа хранится вi
.Тело клеточного массива:
Мы создаем массив ячеек с двумя элементами, один из которых, мы говорим, что все i-ые символы должны быть заменены его аналогом
k
, а другой сs
, который теперь уже обновлен. Мы индексируем это, используя,{2}
чтобы мы получили только всю измененную строку обратно. Это подается наstrsplit
, который разбивает его на ячейки в символ разделителя. Мы преобразуем его в список, разделенный запятыми{:}
, и объединяем его обратно в строку, используя квадратные скобки[]
.Извинения, если это не имеет никакого смысла для вас ... Это едва ли имеет смысл для меня: P
источник
Сетчатка 0.8.2 , 20 байт
Попробуйте онлайн! Принимает только строку, разделитель необязательно. Все не алфавитные символы удаляются, но все последующие буквенные символы пишутся в верхнем регистре. Предыдущая 34-байтовая версия приняла произвольный ввод:
Попробуйте онлайн! Ссылка включает тестовый набор. Предполагается, что входные данные состоят из строки и символа, соединенных вместе. Объяснение: Первый этап транслитерирует все символы сразу после вхождения конечного символа из нижнего в верхний регистр, а второй этап затем удаляет все вхождения конечного символа.
Для обоих решений использование соответствия справа налево вместо a
+
также работает.источник
[^a-z]
вместо заглядывания Попробуйте онлайн!APL (Dyalog Classic) , 22 байта
Попробуйте онлайн!
источник
Рёда ,
5754 байта-3 байта благодаря шарлатану коров
Попробуйте онлайн!
Объяснение:
источник
\E
_[0:1]
_[:1]
V 6
7байт1 байт сохранен без использования аргумента
Попробуйте онлайн!
Программа принимает текст в качестве ввода и символ в качестве аргумента.
HexDump:
Это простая замена. Несжатый, это выглядит следующим образом
Выполните глобальную замену, в которой
\A
не алфавитный символ, за которым следует символ(.)
, заменяется\u
первой группой захвата в верхнем регистре\1
источник
c
находится специальный символ регулярного выраженияСкала, 83 байта
Попробуйте онлайн!
Объяснение:
источник
Красный , 87 байт
Попробуйте онлайн!
источник
05AB1E , 9 байт
Попробуйте онлайн!
объяснение
источник
PHP,
9183 байтаБеги с
-r
. На 2 байта короче, используя split вместо взрыва, но ^ test не пройден из-за регулярного выражения.-8 благодаря Med
источник
{
и}
из цикла for, он будет обрабатывать только следующий оператор как тело условия.$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
Groovy, 43 байта,
45 байтовПопробуйте онлайн . Тестовый набор включен, исключая последний элемент, так как в нем отсутствует разделитель символов
c
.источник
Go,
1389287 байтОтброшено 46 байтов благодаря идее заглавной буквы @Dennis .
Попробуйте онлайн!
источник
шелуха , 10 байт
Попробуйте онлайн!
объяснение
источник
F # (моно) , 122 байта
Попробуйте онлайн!
источник
Java 10, 141 байт
Попробуйте онлайн.
Объяснение:
источник
R , 87 байт
Попробуйте онлайн!
Использует этот трюк не может быть правильно выполнено в TIO, поэтому я смоделировал его.
Нам нужен в
T
противном случае один из тестовых случаев не пройден.источник
Stax , 11 байт
Запустите и отладьте его
объяснение
Есть несколько деталей, которые мне бы хотелось как-то исправить. Я могу уменьшить его до 8 байтов, но в последнем тесте это не удается>. <
источник
Рубин
-pl
, 36 байтПопробуйте онлайн!
Принимает только строку без второго аргумента. Использует блочную версию
gsub!
метода, потому что с общимgsub! x,y
синтаксисом$1
нелегко заполнить данными совпадений.|$
в регулярное выражение необходимо для теста с разделителем в конце.источник
Python 3 , 77 байт
Попробуйте онлайн!
Это предполагает , что строка ASCII , кодируются и предполагает , что
s
иc
предварительно загружены переменные , содержащие входные данные .Это решение работает на том факте, что в кодировке ASCII строчные буквы располагаются на 32 записи после заглавных букв.
Изменить: я только что понял, что это также с заглавной буквы первого символа в строке, что не должно быть. но я очень горжусь своей ерундой, поэтому я оставлю это, если это позволено
источник
s
должно быть?A string s and a character c.