En ese Golf de codificación, debe convertir una convención de codificación con TitleCase a lower_case_with_underscores. ¡Y viceversa!
Especificación
Cambie la carcasa de la siguiente manera:
- Si el carácter de subrayado es un delimitador, cambie la carcasa a Título de caso sin ninguno de los delimitadores.
- Si hay varias palabras sin delimitador, cambie la carcasa a minúsculas y agregue un carácter de subrayado como delimitador.
- En el caso de una sola palabra (o un carácter): cambie la carcasa a Título de caso si la palabra comienza con minúscula; cambie la carcasa a minúscula si la palabra comienza con mayúscula.
Caracteres permitidos:
- De la A a la Z
- de la A a la Z
- subrayado (
_
).
La entrada con palabras mixtas en mayúsculas no está permitida. Ejemplos de casos no permitidos:
Coding_Convention_Conversion
a_BC
Casos de ejemplo
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
Reglas
- Está permitido usar
ToUpper
,ToLower
yToTitleCase
funciones. - Se permite el uso de expresiones regulares.
- code-golf : ¡el código más corto en bytes gana!
ToTitleCase
función? No especificaste, así que supongo que está bien.Respuestas:
Pyth, 25 bytes
29 33 35 40Guardado 2 bytes gracias a @Dennis
Guardado 4 bytes gracias a @FryAmTheEggman
Pruébalo en línea
fuente
/z\_
arIz0
. También creo que encontré una alternativa de la misma longitud para agregar el programa de guiones bajos:tsXzrG1_Mcj\_G2
quizás alguien pueda jugar más golf ...tsXzrG1*\_G
Jolf, 35 bytes
Ahorra 1 byte gracias a @ Cᴏɴᴏʀ O'Bʀɪᴇɴ . Esto está codificado en ISO 8859-7.
Woohoo mi primer programa Jolf!
Explicación
Pruébalo en línea
fuente
"(?=[A-Z])'_
. La cadena se cierra automáticamente.Retina , 37
¡Gracias a @ MartinBüttner por guardar 4 bytes!
(Tenga en cuenta la nueva línea final).
Pruébalo en línea. Tenga en cuenta que esto incluye un extra
m`
para configurar un par de líneas para tratar cada línea de entrada por separado, de modo que todos los casos de prueba se puedan ejecutar de una vez. Este no es un requisito de la pregunta, por lo que no se cuentan en el puntaje._
al principio de la entrada o antes de las letras mayúsculas. Todas las palabras ahora están_
separadas, sin importar el caso._
al comienzo de la entrada o cuando van seguidas de una letra mayúscula.fuente
?=
y reemplazando esa etapa con$1
(aunque no afecta el recuento de bytes).GNU Sed, 46
¡Gracias a @TobySpeight por guardar 2 bytes!
La puntuación incluye +1 para
-E
(o-r
) la opción desed
.Pruébalo en línea.
Sed bastante sencillo:
_
, seguido de una letra minúscula con la mayúscula de esa letra. Lag
marca paras
realizar esta sustitución para cada instancia encontradat
salta a la:
etiqueta sin nombre si hubo coincidencias para la sustitución anterior. Esta etiqueta está implícitamente al final._
las minúsculas de esa letra_
antes de la primera letra.s/^_//
elimina eso.fuente
-E
funciona en mi GNU sed 4.2.2 (Ubuntu 14.04.3), aunque no está en la página de manual. Leí en alguna parte [cita requerida] que-E
es la nueva opción de Posix que se agregará oficialmente a GNU Sed en una versión más reciente, pero que ya está allí de manera no oficial. De todos modos,-r
hace lo correcto si-E
no funciona para usted./* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
.-E
como sinónimo de-r
. No estaba pasando correctamente un programa mínimo, por ejemplosed -E -e Q
JavaScript (ES6), 87 bytes
Explicación
Dependiendo de qué parte de la expresión regular coincida, reemplaza la coincidencia con el caso opuesto.
Prueba
fuente
Ruby,
1018775 bytesDesafortunadamente, esto hace exactamente lo mismo que la solución Retina, ya que ese método terminó siendo más corto que cualquier otra cosa que se me ocurrió.
fuente
Python 3, 130 bytes
Intento rápido y sucio con expresiones regulares para dividir las tapas. Fuerza bruta: si alguien puede llegar a un enfoque diferente, estoy seguro de que esto puede ser vencido.
fuente
PHP 160 bytes
No es el más corto, pero para completar aquí mi solución en PHP, $ s contiene la cadena para convertir:
fuente
Perl 6 ,
73 72 7168 bytesUso:
Explicación:
Puede que se pregunte por qué usé las propiedades Unicode (
<:Lu>
,<:Ll>
) en lugar de solo una clase de caracteres. En Perl 6 ya no se deletrean[a-z]
, se deletrean,<[a..z]>
que es 1.6 veces más grande. Los corchetes[ … ]
se usan para agrupar sin capturar, que se deletreaba como(?: … )
en Perl 5.fuente
Japt, 40 bytes
¡Pruébelo en línea!
Cómo funciona
fuente
Perl 5, 42 bytes
40 bytes más 2 para
-p
(gracias, dev-null )fuente
-E
lugar de-e
.𝔼𝕊𝕄𝕚𝕟 3, 15 caracteres / 32 bytes (no competitivo)
Try it here (Firefox only).
v3 se lanzó después de este desafío, con un montón de correcciones de errores y actualizaciones de la biblioteca.
Explicación
Esto es solo un mashup de builtins.
fuente
Jalea , 24 bytes
Pruébalo en línea!
fuente
Python 3 , 86 bytes
Pruébalo en línea!
También funciona en Python 2 .
Aprovechando el hecho conveniente de que el valor ascii para
_
(95) está justo entre los de las letras mayúsculas (65-90) y minúsculas (97-122), lo que permite una fácil comparación de cadenas.fuente
Adelante (gforth) , 129 bytes
Pruébalo en línea!
Explicación del código
fuente