Nesse Coding Golf, você deve converter uma convenção de codificação com TitleCase em lower_case_with_underscores. E vice versa!
Especificação
Mude a caixa da seguinte maneira:
- Se o caractere sublinhado for um delimitador, altere a caixa para maiúsculas e minúsculas sem delimitador.
- Se houver várias palavras sem delimitador, altere a caixa para minúscula e adicione um caractere sublinhado como delimitador.
- No caso de apenas uma palavra (ou um caractere): altere a caixa para maiúsculas e minúsculas se a palavra começar com minúsculas; altere a caixa para minúscula se a palavra começar com maiúscula.
Caracteres permitidos:
- A a Z
- A a Z
- sublinhado (
_
).
A entrada com palavras maiúsculas e minúsculas não é permitida. Exemplos de casos não permitidos:
Coding_Convention_Conversion
a_BC
Casos de exemplo
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
Regras
- É permitido usar
ToUpper
,ToLower
eToTitleCase
funções. - É permitido o uso de expressões regulares.
- code-golf : o menor código em bytes vence!
ToTitleCase
função bem? Você não especificou, então eu presumo que está tudo bem.Respostas:
Pitão, 25 bytes
29 33 35 40Guardado 2 bytes graças a @Dennis
Guardado 4 bytes graças a @FryAmTheEggman
Experimente online
fonte
/z\_
pararIz0
. Eu também acredito que eu encontrei uma alternativa do mesmo comprimento para o programa sublinhados acrescentando:tsXzrG1_Mcj\_G2
, talvez golf alguém possa mais ...tsXzrG1*\_G
Jolf, 35 bytes
Economiza 1 byte graças a @ Cᴏɴᴏʀ O'Bʀɪᴇɴ . Isso está codificado na ISO 8859-7.
Woohoo meu primeiro programa Jolf!
Explicação
Experimente online
fonte
"(?=[A-Z])'_
. A cadeia é fechada automaticamente.Retina , 37
Obrigado a @ MartinBüttner por salvar 4 bytes!
(Observe a nova linha à direita.)
Experimente online. Observe que isso inclui extra
m`
para configurar algumas linhas para tratar cada linha de entrada separadamente, para que todos os casos de teste possam ser executados de uma só vez. Isso não é um requisito da pergunta, portanto, eles não são contados na pontuação._
no início da entrada ou antes das letras maiúsculas. Todas as palavras agora são_
separadas, independentemente do caso._
no início da entrada ou quando são seguidas por uma letra maiúscula.fonte
?=
e substituindo esse estágio por$1
(embora não afete a contagem de bytes).GNU Sed, 46
Obrigado a @TobySpeight por salvar 2 bytes!
A pontuação inclui +1 na opção
-E
(ou-r
) parased
.Experimente online.
Bastante simples sed:
_
, seguido por uma letra minúscula pela maiúscula dessa letra. Og
sinalizador paras
executar essa substituição para cada instância encontradat
pula para o:
rótulo sem nome se houver alguma correspondência para a substituição acima. Este rótulo está implicitamente no final._
pela minúscula dessa letra_
antes da primeira letra.s/^_//
remove isso.fonte
-E
funciona no meu GNU sed 4.2.2 (Ubuntu 14.04.3), embora não esteja na página do manual. Eu li em algum lugar [citação necessário] que-E
é a opção Posix mais nova que será adicionada oficialmente ao GNU Sed em um lançamento mais recente, mas que já está lá não oficialmente. Independentemente disso,-r
faz a coisa certa se-E
não funcionar para você./* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
.-E
como sinônimo de-r
. Eu não estava passando corretamente um programa mínimo, por exemplosed -E -e Q
JavaScript (ES6), 87 bytes
Explicação
Dependendo de qual parte da regex corresponde, ela substitui a correspondência pela caixa oposta.
Teste
fonte
Ruby,
1018775 bytesInfelizmente, isso faz exatamente o mesmo que a solução Retina, pois esse método acabou sendo mais curto do que qualquer outra coisa que eu criei.
fonte
Python 3, 130 bytes
Tentativa rápida e suja usando regex para dividir nos limites. Força bruta: se alguém puder apresentar uma abordagem diferente, tenho certeza de que isso pode ser derrotado.
fonte
PHP 160 bytes
não é o mais curto, mas para ser completo aqui minha solução em PHP, $ s contém a string para converter:
fonte
Perl 6 ,
73 72 7168 bytesUso:
Explicação:
Você pode estar se perguntando por que usei as propriedades Unicode (
<:Lu>
,<:Ll>
) em vez de apenas uma classe de caracteres. No Perl 6, eles não são mais soletrados[a-z]
, são soletrados<[a..z]>
1,6 vezes mais. Os colchetes[ … ]
são usados para o agrupamento de não captura, que foi escrito como(?: … )
no Perl 5.fonte
Japonês, 40 bytes
Teste online!
Como funciona
fonte
Perl 5, 42 bytes
40 bytes mais 2 por
-p
(obrigado, dev-null )fonte
-E
vez de-e
.𝔼𝕊𝕄𝕚𝕟 3, 15 caracteres / 32 bytes (não competitivo)
Try it here (Firefox only).
A v3 foi lançada após esse desafio, com várias correções de bugs e atualizações da biblioteca.
Explicação
Este é apenas um mashup de builtins.
fonte
Gelatina , 24 bytes
Experimente online!
fonte
Python 3 , 86 bytes
Experimente online!
Também funciona em Python 2 .
Fazendo uso do fato conveniente de que o valor ascii para
_
(95) está correto entre os das letras maiúsculas (65-90) e minúsculas (97-122), o que permite comparações fáceis de cadeias.fonte
Quarto (gforth) , 129 bytes
Experimente online!
Código Explicação
fonte