9.4 KiB
title | localeTitle |
---|---|
Pig Latin | Jerga |
Recuerda usar Read-Search-Ask
si te atascas. Tratar de emparejar el programa y escribe tu propio código
Explicación del problema:
Necesitas crear un programa que se traduzca del inglés al cerdo latino. Pig Latin toma la primera consonante (o grupo de consonantes) de una palabra en inglés, la mueve al final de la palabra y los sufijos "ay". Si una palabra comienza con una vocal, simplemente agrega "camino" al final. Puede que no sea obvio, pero debe eliminar todas las consonantes hasta la primera vocal en caso de que la palabra no comience con una vocal.
Enlaces relevantes
Sugerencia: 1
Probablemente querrá usar expresiones regulares. Esto te permitirá convertir las palabras fácilmente.
intenta resolver el problema ahora
Sugerencia: 2
Si el primer carácter es una vocal, tome la palabra completa y agregue 'way' al final. De lo contrario viene la parte difícil, toma la consonante (s) antes de la primera vocal y muévela hasta el final y agrega 'ay'. Esto puede ser confuso, pero no es solo la primera consonante, sino todas antes de la primera vocal.
intenta resolver el problema ahora
Sugerencia: 3
Necesitará usar todo lo que sepa sobre la manipulación de cuerdas para obtener la última parte correcta. Sin embargo, se puede hacer con substr
solo.
intenta resolver el problema ahora
¡Alerta de spoiler!
¡Solución por delante!
Solución de código básico:
function translatePigLatin(str) {
// Create variables to be used
var pigLatin = '';
var regex = /[aeiou]/gi;
// Check if the first character is a vowel
if (str[0].match(regex)) {
pigLatin = str + 'way';
} else if(str.match(regex) === null) {
// Check if the string contains only consonants
pigLatin = str + 'ay';
} else {
// Find how many consonants before the first vowel.
var vowelIndice = str.indexOf(str.match(regex)[0]);
// Take the string from the first vowel to the last char
// then add the consonants that were previously omitted and add the ending.
pigLatin = str.substr(vowelIndice) + str.substr(0, vowelIndice) + 'ay';
}
return pigLatin;
}
// test here
translatePigLatin("consonant");
Explicación del código:
- Haga una cadena vacía para mantener su palabra latina de cerdo.
- Asigna tu expresión regular apropiada a una variable.
- Si el primer carácter es una vocal, simplemente agregue una forma al final de la cadena y devuélvala.
- Si el primer carácter no es una vocal:
- Encuentre el número de consonantes antes de la primera vocal con la ayuda de
indexOf()
,match()
y regex. - Comience la cuerda latina de cerdo con la primera vocal hasta el final.
- Agrega letras antes de la primera vocal hasta el final de la cuerda.
substr()
se utiliza para la manipulación de cadenas aquí.- Agrega ay al final de la cadena y devuélvela.
- Encuentre el número de consonantes antes de la primera vocal con la ayuda de
Enlaces relevantes
- Recursos JS Regex
- JS String Prototype IndexOf
- JS String Prototype Substr
Solución de código intermedio:
function translatePigLatin(str) {
function check(obj) {
return ['a','i','u','e','o'].indexOf(str.charAt(obj)) == -1 ? check(obj + 1) : obj;
}
return str.substr(check(0)).concat((check(0) === 0 ? 'w' : str.substr(0, check(0))) + 'ay');
}
// test here
translatePigLatin("consonant");
Explicación del código:
- Este es un enfoque declarativo y recursivo de este problema.
check()
es una función que verifica que la primera letra de la cadena esté en el conjunto de vocales,['a','i','u','e','o']
.- En caso de consonantes,
check()
llama a sí mismo en los siguientes caracteres hasta encontrar la primera vocal. - Devolverá el índice de lo que encuentre como la última consonante inicial, es decir, Schmidtsville sería 3.
- Entonces, las cartas hasta ese índice se eliminan de la cadena y concatenan, ya sea con el mismo trozo de cadena eliminado o w en consecuencia, y a continuación, Ay independientemente.
Enlaces relevantes
Solución avanzada de código:
function translatePigLatin(str) {
var strArr = [];
var tmpChar;
// check if the char is consonant using RegEx
function isConsonant(char) {
return !/[aeiou]/.test(char);
}
// return initial str + "way" if it starts with vowel
// if not - convert str to array
if (!isConsonant(str.charAt(0)))
return str + "way";
else
strArr = str.split("");
// push all consonats to the end of the array
while (isConsonant(strArr[0])) {
tmpChar = strArr.shift();
strArr.push(tmpChar);
}
// convert array to string and concatenate "ay" at the end
return strArr.join("")+"ay";
}
// test here
translatePigLatin("consonant");
Explicación del código:
isConsonant()
se usa para verificar si un personaje es una consonante.- Si el primer carácter es una vocal, agregue una forma al final de la cadena y devuélvala.
- Si el primer carácter no es una vocal:
- Divide la cadena en una matriz usando
split()
. - Empuje todas las consonantes hasta el final de la matriz con la ayuda de
shift()
ypush()
. - Convierta la matriz en cadena utilizando
join()
y agregue ay al final de la cadena. Devolverlo.
- Divide la cadena en una matriz usando
Enlaces relevantes
Créditos:
Si encontró útil esta página, puede dar las gracias a los colaboradores copiando y pegando la siguiente línea en el chat principal:
Thanks @Rafase282 @sabahang @aganita @Hallaathrad for your help with Algorithm: Pig Latin
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.