De Camello a Vibora - FreeCodeCamp Daily Challenge

2 min

De Camello a Víbora

Aunque el título suene a número de circo, el desafío de hoy consiste en convertir cadenas escritas en formato camelCase a snake_case.

Camel Case es un estilo donde las palabras se unen sin espacios y cada palabra (excepto la primera) comienza con mayúscula, por ejemplo: camelCaseExample. Snake Case utiliza solo minúsculas y separa las palabras con guiones bajos, por ejemplo: snake_case_example.

Enunciado del Problema

Dado un string en camelCase, devolvé su versión en snake_case siguiendo estas reglas:

  • El string contiene solo letras (A-Z y a-z) y siempre comienza con minúscula.
  • Cada letra mayúscula indica el inicio de una nueva palabra.
  • Convertí todas las letras a minúsculas.
  • Separá las palabras con guiones bajos (_).

Enfoque de la Solución

La primera intuición es recorrer el string y detectar las letras mayúsculas. Cada vez que encontramos una, la convertimos a minúscula y la precedemos con un guion bajo en el resultado. Para identificar mayúsculas en JavaScript, podemos comparar char === char.toUpperCase() o usar char >= 'A' && char <= 'Z'.

Otra opción es usar expresiones regulares con replace, buscando todas las mayúsculas y reemplazándolas por un guion bajo seguido de la letra en minúscula. El método replace permite pasar una función para transformar el match.

Implementación

Solución con Bucle

function toSnakeLoop(camelCaseStr) {
  let snakeCaseStr = ''
  for (let char of camelCaseStr) {
    if (char === char.toUpperCase()) {
      snakeCaseStr += `_${char.toLowerCase()}`
    }
    else {
      snakeCaseStr += char
    }
  }
  return snakeCaseStr
}

Solución con Expresiones Regulares

function toSnakeRegex(camelCaseStr) {
  return camelCaseStr.replace(/([A-Z])/g, (match) => {
    return `_${match.toLowerCase()}`
  })
}

Análisis de Complejidad

  • Tiempo: O(n)O(n), donde nn es la longitud del string. Ambas soluciones recorren el string una vez.
  • Espacio: O(n)O(n), ya que se genera un nuevo string proporcional al tamaño de la entrada.

Consideraciones Finales

Ambas soluciones son eficientes y cumplen con los requisitos. La elección entre bucle o expresión regular depende de la preferencia personal y el contexto. Las expresiones regulares suelen ser más concisas, mientras que el bucle puede resultar más claro para quienes no están familiarizados con regex.

Recursos Adicionales