В этом Coding Golf вы должны преобразовать одно соглашение о кодировании с TitleCase в lower_case_with_underscores. И наоборот!
Спецификация
Замените корпус следующим образом:
- Если символ подчеркивания является разделителем, измените регистр на Заглавный регистр без разделителя.
- Если есть несколько слов без разделителя, измените регистр на нижний регистр и добавьте символ подчеркивания в качестве разделителя.
- В случае только одного слова (или одного символа): измените регистр на Заглавный регистр, если слово начинается со строчной буквы; измените регистр на нижний регистр, если слово начинается с верхнего регистра.
Разрешенные символы:
- От А до Я
- от А до Я
- подчеркивание (
_
).
Ввод со смешанными словами запрещен. Примеры запрещенных случаев:
Coding_Convention_Conversion
a_BC
Примеры случаев
Input | Expected Output
===========================================================
CodingConventionConversion | coding_convention_conversion
coding_convention_conversion | CodingConventionConversion
abc | Abc
Abc | abc
ABC | a_b_c
a_b_c | ABC
a | A
A | a
правила
- Допускается использовать
ToUpper
,ToLower
иToTitleCase
функции. - Использование регулярных выражений разрешено.
- код-гольф : выигрывает самый короткий код в байтах!
ToTitleCase
функции хорошо? Вы не указали, так что я бы предположил, что все в порядке.Ответы:
Pyth, 25 байтов
29 33 35 40Сохранено 2 байта благодаря @Dennis
Сохранено 4 байта благодаря @FryAmTheEggman
Попробуйте онлайн
источник
/z\_
наrIz0
. Я также считаю, что нашел ту же альтернативу программе добавления подчеркиваний:tsXzrG1_Mcj\_G2
возможно, кто-то сможетtsXzrG1*\_G
Джольф, 35 байт
Сохраняет 1 байт благодаря @ Cᴏɴᴏʀ O'Bʀɪᴇɴ . Это закодировано в ISO 8859-7.
Woohoo моя первая программа Jolf!
объяснение
Попробуйте онлайн
источник
"(?=[A-Z])'_
. Строка закрывается автоматически.Сетчатка , 37
Спасибо @ MartinBüttner за сохранение 4 байта!
(Обратите внимание на завершающий символ новой строки.)
Попробуйте онлайн. Обратите внимание, что это включает дополнительную
m`
настройку пары строк для обработки каждой строки ввода отдельно, поэтому все тестовые случаи могут быть запущены за один раз. Это не является обязательным требованием вопроса, поэтому они не учитываются в баллах._
либо в начале ввода, либо перед заглавными буквами. Все слова теперь_
разделены, независимо от регистра._
либо в начале ввода, либо когда за ними следует заглавная буква.источник
?=
и заменив этот этап на$1
(хотя это не влияет на количество байтов).GNU Sed, 46
Спасибо @TobySpeight за сохранение 2 байта!
Оценка включает +1 для
-E
(или-r
) вариантаsed
.Попробуйте онлайн.
Довольно простой сед:
_
, а затем строчную букву заглавной буквой этой буквы.g
Флагs
выполняет эту замену для каждого экземпляра найденыt
переходит на:
безымянный ярлык, если были найдены совпадения для вышеуказанной замены. Этот ярлык неявно в конце._
строчными._
перед первой буквой.s/^_//
удаляет это.источник
-E
работает в моем GNU sed 4.2.2 (Ubuntu 14.04.3), хотя его нет в справочной странице. Я где-то читал [цитата нужна], что-E
это более новая опция Posix, которая будет официально добавлена в GNU Sed в более новой версии, но уже там неофициально. Независимо от того,-r
делает правильные вещи, если-E
не работает для вас./* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
.-E
качестве синонима-r
. Я не правильно прошел минимальную программу, напримерsed -E -e Q
JavaScript (ES6), 87 байт
объяснение
В зависимости от того, какая часть регулярного выражения соответствует, оно заменяет совпадение на противоположный случай.
Тестовое задание
источник
Рубин,
1018775 байтК сожалению, это делает то же самое, что и решение Retina, так как этот метод оказался короче всего, что я придумал.
источник
Python 3, 130 байт
Быстрая и грязная попытка с помощью регулярных выражений разделить заголовки. Довольно грубая сила: если кто-то может придумать другой подход, я уверен, что это можно победить.
источник
PHP 160 байт
не самое короткое, но для полноты здесь мое решение в PHP, $ s содержит строку для преобразования:
источник
Perl 6 ,
73 72 7168 байтИспользование:
Объяснение:
Вы можете быть удивлены, почему я использовал свойства Unicode (
<:Lu>
,<:Ll>
) вместо просто класса символов. В Perl 6 они больше не пишутся,[a-z]
а пишутся,<[a..z]>
что в 1,6 раза больше. Скобки[ … ]
используются для группирования без захвата, как было написано(?: … )
в Perl 5.источник
Japt, 40 байт
Проверьте это онлайн!
Как это устроено
источник
Perl 5, 42 байта
40 байтов плюс 2 за
-p
(спасибо, dev-null )источник
-E
вместо-e
.𝔼𝕊𝕄𝕚𝕟 3, 15 символов / 32 байта (неконкурентный)
Try it here (Firefox only).
v3 был выпущен после этой проблемы, с кучей исправлений и обновлений библиотеки.
объяснение
Это просто коллаж из встроенных.
источник
Желе , 24 байта
Попробуйте онлайн!
источник
Python 3 , 86 байт
Попробуйте онлайн!
Также работает в Python 2 .
Воспользовавшись удобным фактом, что значение ascii для
_
(95) находится прямо между значениями прописных (65-90) и строчных (97-122) букв, что позволяет легко сравнивать строки.источник
Forth (gforth) , 129 байтов
Попробуйте онлайн!
Код Объяснение
источник