42 lines
932 B
Go
42 lines
932 B
Go
package igpay
|
|
|
|
import "strings"
|
|
|
|
// PigLatin takes some words and converts them to pig latin
|
|
// 1) Move starting consonant sounds to the end of the word
|
|
// 2) add 'ay'
|
|
func PigLatin(in string) string {
|
|
var ret string
|
|
words := strings.Split(in, " ")
|
|
for i := range words {
|
|
ret += pigLatinWord(words[i])
|
|
if i < len(words)-1 {
|
|
ret += " "
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
// pigLatinWord actually does the heavy lifting
|
|
func pigLatinWord(in string) string {
|
|
var ret string
|
|
// First move all consonant sounds to the end
|
|
for i := 0; i < len(in); i++ {
|
|
// Edge consonant sound cases
|
|
if in[0] == 'q' && in[1] == 'u' {
|
|
in = in[2:] + string(in[0]) + string(in[1])
|
|
}
|
|
|
|
vowelPos := strings.IndexAny(in, "aeiou")
|
|
|
|
// If we have a y and another vowel, then y is a consonant
|
|
// also, x
|
|
if vowelPos == 0 || (vowelPos > 1 && (in[0] == 'y' || in[0] == 'x')) {
|
|
return in + "ay"
|
|
}
|
|
in = in[1:] + string(in[0])
|
|
}
|
|
|
|
return ret
|
|
}
|