Goat Latin
Problem statement
You are given a string sentence that consist of words separated by spaces. Each word consists of lowercase and uppercase letters only.
We would like to convert the sentence to "Goat Latin" (a made-up language similar to Pig Latin.) The rules of Goat Latin are as follows:
- If a word begins with a vowel (
'a','e','i','o', or'u'), append"ma"to the end of the word.- For example, the word
"apple"becomes"applema".
- For example, the word
- If a word begins with a consonant (i.e., not a vowel), remove the first letter and append it to the end, then add
"ma".- For example, the word
"goat"becomes"oatgma".
- For example, the word
- Add one letter
'a'to the end of each word per its word index in the sentence, starting with1.- For example, the first word gets
"a"added to the end, the second word gets"aa"added to the end, and so on.
- For example, the first word gets
Return the final sentence representing the conversion from sentence to Goat Latin.
Example 1:
Input: sentence = "I speak Goat Latin"Output: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
Example 2:
Input: sentence = "The quick brown fox jumped over the lazy dog"Output: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
Constraints:
1 <= sentence.length <= 150sentenceconsists of English letters and spaces.sentencehas no leading or trailing spaces.- All the words in
sentenceare separated by a single space.
My solution
/**
* @param {string} sentence
* @return {string}
*/
var toGoatLatin = function(sentence) {
const vowels = ["a", "e", "i", "o", "u"];
return sentence.split(/\s/).map((w, index) => {
const firstChar = w.charAt(0);
let newWord = w;
if (!vowels.includes(firstChar.toLowerCase())) {
// not vowel
newWord = `${newWord.substring(1)}${firstChar}ma`
} else {
// vowel
newWord += "ma";
}
newWord += Array.from({
length: index + 1
}, () => "a").join("")
return newWord;
}).join(" ")
};