Ruby多字猪Pig

时间:2017-05-29 14:06:57

标签: ruby

我在使用Ruby pig latin翻译器翻译2个或更多单词时遇到了麻烦。我已成功地想出如何用我的函数translate翻译以元音,辅音或两个辅音开头的单词,并且我想创建第二个函数translate_words,它使用.map和第一个函数。

当字符串“eat pie”被提交时,输出为“eat pieay”。它只会更改第二个单词并且也会错误地进行更改(应该是“eatay iepay”)。我在没有运气的情况下看了很多其他解决方案。我对正则表达式仍然很新,所以这些解决方案有点过头了。

这个项目适用于RSpec,我在我的下面添加了测试代码。

这是我的代码:

def translate(input)
    pig_string = ''
    if input[0] =~ /[aeiou]/
        return input + 'ay'
    elsif input[0] =~ /[^aeiou]/ && input[1] =~ /[aeiou]/
        return input[1..-1] + input[0] + 'ay'
    elsif input[0..1] =~ /[^aeiou]/
        return input[2..-1] + input[0..1] + 'ay'
    else
        return input[0] + input + 'ay'
    end
end

def translate_words(multi_words)
    word_count = multi_words.split.size
    if word_count > 1
        multi_words.map! do |word|
            translate(word)
        end
    end
end

RSpec的:

it "translates two words" do
  s = translate("eat pie")
  expect(s).to eq("eatay iepay")
end

1 个答案:

答案 0 :(得分:0)

根据bitsapien和Sergio Tulentsev的评论:

def translate_words(multi_words)
  multi_words.split.map do |word|
    translate(word)
  end.join(' ')
end

map将足以代替map!

translate_words('eat plie') #=> "eatay ieplay"