Вдохновленный этим вызовом (или, точнее, неправильным его чтением), я придумал следующий вызов:
Если задана входная строка S, измените порядок всех заглавных и строчных букв. Оставьте все не-буквенные символы на месте. Например:
Обратите внимание, что верхний регистр W
(первая заглавная буква) был заменен на H
(последний). То же самое касается строчных букв: «d» (первый) заменяется на ( e
последний), l
(второй) заменяется на l
(pen-ultimate) ... Все не-буквенные символы остаются на месте.
вход
- Ввод - это строка, содержащая только символы ASCII в диапазоне 32-126.
- Длина ввода должна быть не менее 1 символа и не превысит лимит вашего языка.
Выход
- Та же самая строка с замененными символами, как описано.
Дополнительные правила
- Стандартные лазейки запрещены
- Ответом должна быть полная программа или функция, а не фрагмент или запись REPL.
- Code-Golf , самый короткий ответ в байтах выигрывает.
Контрольные примеры
A
A
Ok
Ok
OK
KO
Hello, World!
Wdlro, Holle!
0123456789
0123456789
The quick brown Fox jumps over the lazy doge
Feg odyza lehtr Tev ospmu jxon wor bkci uqeh
odd
ddo
racecar
racecar
EtOn Em OsN R AaToNsIsIhT!!1!
ThIs Is NoT A RaNsOmEnOtE!!1!
.+
на.*
)Ответы:
MATL , 14 байтов
Попробуйте это на MATL Online
объяснение
источник
2:"tttXk>f)5MP(Yo
по 17 байтСетчатка , 19 байт
Retina не имеет прямого способа перевернуть строку, но мы можем сделать это, используя этап сортировки:
Sort (
O
), считывая их как числа (#
), а затем в обратном порядке (^
) для всех строк, соответствующих данному регулярному выражению (строчные буквы для первой строки и прописные буквы для второй).Это работает, потому что когда мы пытаемся прочитать строки без числовых символов как числа, к которым они относятся
0
, то есть все символы имеют одинаковое значение для сортировки. Так как сортировка стабильна, они остаются в том же порядке, и их обращение возвращает исходную строку в обратном порядке.Попробуйте онлайн!
источник
Perl , 45 байт
44 байта кода +
-p
флаг.Попробуйте онлайн!
Классы символов Unicode
\p{Lu}
и\p{Ll}
соответствуют соответственно прописным и строчным буквам.Так
/\p{L$c}/
что вернет список всех прописных (или строчных) букв (и сохранит его внутри@T
).И затем, регулярное выражение
s/\p{$c}/pop@T/ge
заменит каждую букву (в верхнем, а затем в нижнем регистре) последней буквой@T
при удалении из@T
.источник
JavaScript (ES6),
74737170 байтРедактировать: 1 байт сохранен благодаря @Arnauld.
источник
JavaScript (ES6), 92 байта
Там уже есть должен быть способ , чтобы воспользоваться сходством между регулярными выражениями ...
Тестовый фрагмент
Показать фрагмент кода
источник
f
? Разве это не должно быть в числе байтов?F
затем дважды вызывает ее рекурсивно. Внешняя функция на самом деле не вызывает себя в любой точке..*
в регулярных выражениях?a
in([x],a,y)=>
)Perl 6 ,
7569 байтКак это работает
my @a=.comb;
Разбейте строку на символы и сохраните их в массиве.
for /<:Lu>/,/<:Ll>/
Для двух регулярных выражений, совпадающих с прописными и строчными буквами, соответственно ...
@(grep $_,@a)
Получить часть всех записей массива, соответствующих регулярному выражению.
.&{@$_=[R,] $_}
Назначьте обратный срез себе.
[~] @a
Объединить измененный массив, чтобы снова сформировать строку, и вернуть ее.
-6 байт, украдя идею использовать классы Unicode вместо диапазонов символов, из решения @ Dada.
источник
Желе , 14 байт
Попробуйте онлайн!
Как это работает
источник
Утилиты Bash + Unix,
122121 байтПопробуйте онлайн!
Не очень очень короткий; возможно кто-то может сыграть в гольф дальше.
Вход на стандартный вывод, вывод на стандартный вывод.
Это будет правильно работать на входах менее 200 символов.
(На самом деле он правильно обрабатывает любую строку, содержащую менее 200 строчных букв и менее 200 заглавных букв.)
Если вы увеличите 99 в коде до 102 (за счет одного дополнительного байта), он будет обрабатывать строки длиной до 205 символов.
Однако вы не можете увеличить 99 в коде за 102, так как тогда вы превысите максимальную длину аргумента sed.
Вот версия без какого-либо конкретного ограничения входного размера, но счетчик немного длиннее, 137 байтов. (Эта более длинная версия записывает во вспомогательный файл с именем t.)
Тестовые прогоны:
источник
sed
реализации, установленной в вашей системе, но в GNUsed
вы можете добавить-r
опцию и удалить\
экранирование всех скобок.Python 2 , 115 байт
Попробуйте онлайн!
источник
exec
анализируется как обычный код Python, поэтому цикл for должен находиться в отдельной строке.Java (OpenJDK 8) , 271 байт
Попробуйте онлайн!
источник
s->new String...
char[]o=s.toCharArray();char c;int b;
чтобыchar o[]=s.toCharArray(),c,b;
; и как&&
к&
«; иc=o[i];return b>1?!Character.isUpperCase(c):!Character.isLowerCase(c);
доc=o[i];Character x=c;return b>1?!x.isUpperCase(c):!x.isLowerCase(c);
(всего 259 байт ). И я, вероятно, пропустил некоторые вещи, чтобы играть в гольф больше. Кроме того, если вы еще этого не видели, интересно почитать советы по игре в гольф на Java .R , 107 байт
Адаптировано из моего ответа на связанный вызов. Это значительно проще, чем просто поменять пары. Интересно, могу ли я получить саб 100 с некоторыми гольфами ...
Попробуйте онлайн!
источник