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

9.4 KiB

title localeTitle
Pig Latin Jerga

: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:

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

:speech_balloon: Sugerencia: 1

Probablemente querrá usar expresiones regulares. Esto te permitirá convertir las palabras fácilmente.

intenta resolver el problema ahora

:speech_balloon: 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

:speech_balloon: 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!

señal de advertencia

¡Solución por delante!

:beginner: 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"); 

:rocket: Ejecutar código

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.

Enlaces relevantes

:sunflower: 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"); 

:rocket: Ejecutar código

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

:rotating_light: 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"); 

:rocket: Ejecutar código

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() y push() .
    • Convierta la matriz en cadena utilizando join() y agregue ay al final de la cadena. Devolverlo.

Enlaces relevantes

:trophy: 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

: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.