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_Conversiona_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,ToLoweryToTitleCasefunciones. - Se permite el uso de expresiones regulares.
- code-golf : ¡el código más corto en bytes gana!

ToTitleCasefunció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\_G2quizás alguien pueda jugar más golf ...tsXzrG1*\_GJolf, 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. Lagmarca parasrealizar esta sustitución para cada instancia encontradatsalta 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
-Efunciona 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-Ees 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,-rhace lo correcto si-Eno funciona para usted./* Undocumented, for compatibility with BSD sed. */case 'E':case 'r':.-Ecomo sinónimo de-r. No estaba pasando correctamente un programa mínimo, por ejemplosed -E -e QJavaScript (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
-Elugar 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