8.8 KiB
title | localeTitle |
---|---|
Missing Letters | Cartas perdidas |
Recuerda usar Read-Search-Ask
si te atascas. Tratar de emparejar el programa y escribe tu propio código
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
- Objeto global de cadena
- JS String Prototype CharCodeAt
- String.fromCharCode
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
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
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!
¡Solución por delante!
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");
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ógicocode 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
- JS For Loops Explicado
- Longitud de la cuerda
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");
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
ywhile
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
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)
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");
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
- Recursos JS Regex
- Js ternario
- JS String Prototype Match
- JS Array Prototype Join
NOTAS PARA LAS CONTRIBUCIONES:
- 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 .
- Agregue su nombre de usuario solo si ha agregado algún contenido principal relevante . ( NO elimine ningún nombre de usuario existente )
Ver
Wiki Challenge Solution Template
para referencia.