猪拉丁句

时间:2015-06-09 19:54:53

标签: arrays ruby string

我正在尝试创建一个将字符串句子作为参数的方法,并将该句子翻译成pig Latin。我目前正试图在一种方法中完成所有这些。

我可以轻松地用一个词来表达:

def pig_latin_word(word)
  vowels = %w(a e i o u)
  word_array = word.split('')
  if vowels.include?(word_array[0])
    word_array.join('')
  else
    until vowels.include?(word_array[0])
      word_array += word_array.shift(1)
    end
    word = word_array.join('')
    "#{word}ay"
  end
end

我现在想做同样的事情,但让方法采取一个句子。这就是我到目前为止所做的:

def pig_latin_sentence(sentence)
  vowels = %w(a e i o u)
  sentence_array  = sentence.split.each_slice(1).map{|a| a.join('')}
  sentence_array.each do |word|
    if vowels.include?(word[0])
      sentence_array.join(' ')
    else
      until vowels.include?(word[0])
        word_array = word.split('')
        word_array += word_array.shift(1)
      end
      p sentence_array.join('ay ')
    end
  end
end

我最初试图将句子切成薄片,以便将每个单词分开。然后我可以迭代一个数组,每个单词都是一个元素。但是,为了让我执行.shift方法,我将不得不再次拆分每个字符串元素。我怎样才能做到这一点?

另外,有没有人有更简洁的方法来编写单字方法?

2 个答案:

答案 0 :(得分:2)

正如Dave Newton所说,让你的pig_latin_word处理这些话。如果这些话出了问题,你就会知道在哪里看;同样用句子。

sentence.split.each_slice(1).map{|a| a.join('')}

是来自努力工作的人的代码。

def pig_latin_sentence(sentence)
  pig_words = sentence.split.map do |word|
    pig_latin_word(word)
  end
  pig_words.join(" ")
end

答案 1 :(得分:0)

这是我为猪拉丁做的一个解决方案,它有点短了!

def pig_latin_ified(word)
  index = /[aeiou]/ =~ word
  return word if index == 0
  word_array = word.chars
  final_solution = (word_array + word_array.shift(index) + ["a", "y"]).join("")
end