freeCodeCamp/guide/spanish/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../missing-letters/index.md

8.8 KiB

title localeTitle
Missing Letters Cartas perdidas

:triangular_flag_on_post: Recuerda usar Read-Search-Ask si te atascas. Tratar de emparejar el programa :busts_in_silhouette: y escribe tu propio código :pencil:

:checkered_flag: Explicación del problema:

Creará un programa que encontrará la letra que falta en una cadena y la devolverá. Si no falta una letra, el programa debería regresar indefinido. Actualmente no hay un caso de prueba para la cadena que falta más de una letra, pero si hubiera una, se usaría la recursión. Además, las letras siempre se proporcionan en orden para que no haya necesidad de ordenarlas.

Enlaces relevantes

:speech_balloon: Sugerencia: 1

Deberá convertir el carácter al código ASCII usando los dos métodos proporcionados en la descripción.

intenta resolver el problema ahora

:speech_balloon: Sugerencia: 2

Tendrá que verificar la diferencia en el código ASCII ya que están en orden. Usar una tabla sería muy útil.

intenta resolver el problema ahora

:speech_balloon: Sugerencia: 3

Deberá averiguar dónde está la letra faltante, junto con el manejo del caso de que no falte una letra, ya que necesita un valor de devolución específico.

intenta resolver el problema ahora

¡Alerta de spoiler!

señal de advertencia

¡Solución por delante!

:beginner: Solución de código básico:

function fearNotLetter(str) { 
 
  for(var i = 0; i < str.length; i++) { 
    /* code of current character */ 
    var code = str.charCodeAt(i); 
 
    /* if code of current character is not equal to first character + no of iteration 
    hence character has been escaped */ 
    if (code !== str.charCodeAt(0) + i) { 
 
      /* if current character has escaped one character find previous char and return */ 
      return String.fromCharCode(code - 1); 
    } 
  } 
  return undefined; 
 } 
 
 // test here 
 fearNotLetter("abce"); 

:rocket: Ejecutar código

Explicación del código:

  • Esta solución hace uso de un bucle for .
  • El código del personaje encontrado se almacena en el código .
  • Se verifica si el código del carácter actual es el esperado (no se omiten caracteres) utilizando el code of current character = code of first character + number of iterations lógico code of current character = code of first character + number of iterations .
  • Si falta un carácter, se encuentra el carácter que falta y se devuelve la cadena final.
  • se devuelve undefined si no falta ningún carácter en la cadena.

Enlaces relevantes

:sunflower: Solución de código intermedio:

// Adding this solution for the sake of avoiding using 'for' and 'while' loops. 
 // See the explanation for reference as to why. It's worth the effort. 
 
 function fearNotLetter(str) { 
  var compare = str.charCodeAt(0), missing; 
 
  str.split('').map(function(letter,index) { 
    if (str.charCodeAt(index) == compare) { 
      ++compare; 
    } else { 
      missing = String.fromCharCode(compare); 
    } 
  }); 
 
  return missing; 
 } 
 
 // test here 
 fearNotLetter("abce"); 

:rocket: Ejecutar código

Explicación del código:

  • Primero definimos las variables para almacenar el código de carácter para la primera letra de la cadena y para almacenar las letras que faltan que podamos encontrar.
  • Damos vuelta a la cadena en una matriz con el fin de trazar a través de él en lugar de utilizar for y while bucles.
  • A medida que map través de los códigos de caracteres de nuestras letras, vamos comparando con el que debería estar en esa posición.
  • Si la letra actual coincide, movemos la variable de comparación a su siguiente posición para que podamos comparar en el siguiente ciclo.
  • De lo contrario, la letra faltante se asignará a la variable missing , que se devolverá una vez que el mapa haya finalizado.
  • Si no hay caracteres faltantes, devuelve undefined .

Enlaces relevantes

:rotating_light: Solución de código avanzado simplificado:

function fearNotLetter(str) { 
  for (let i = 1; i < str.length; ++i) { 
    if (str.charCodeAt(i) - str.charCodeAt(i-1) > 1) { 
      return String.fromCharCode(str.charCodeAt(i - 1) + 1); 
    } 
  } 
 } 

Explicación del código:

  • Bucle sobre la cuerda
  • Compruebe si la diferencia en los códigos de caracteres entre caracteres adyacentes en la cadena es más de 1 (tabla ASCII de chack)
  • Devuelve el carácter que falta (+1 desde donde se detectó el espacio)

:rotating_light: Solución avanzada de código:

function fearNotLetter(str) { 
  var allChars = ''; 
  var notChars = new RegExp('[^'+str+']','g'); 
 
  for (var i = 0; allChars[allChars.length-1] !== str[str.length-1] ; i++) 
    allChars += String.fromCharCode(str[0].charCodeAt(0) + i); 
 
  return allChars.match(notChars) ? allChars.match(notChars).join('') : undefined; 
 } 
 
 // test here 
 fearNotLetter("abce"); 

:rocket: Ejecutar código

Explicación del código:

  • Se crea una nueva cadena allChars .
  • Crea una expresión regular notChars que selecciona todo excepto str .
  • El bucle for se utiliza para agregar todas las letras del rango a allChars .
  • match() se usa para quitar las letras str de la cadena recién creada y se devuelve.
  • Si no hay caracteres faltantes, devuelve undefined .

Enlaces relevantes

:clipboard: NOTAS PARA LAS CONTRIBUCIONES:

  • :warning: NO agregue soluciones que sean similares a las soluciones existentes. Si cree que es similar pero mejor , intente fusionar (o reemplazar) la solución similar existente.
  • Agregue una explicación de su solución.
  • Categorice la solución en una de las siguientes categorías: Básica , Intermedia y Avanzada . :traffic_light:
  • Agregue su nombre de usuario solo si ha agregado algún contenido principal relevante . ( :warning: NO elimine ningún nombre de usuario existente )

Ver :point_right: Wiki Challenge Solution Template para referencia.