2013-01-13 3 views
3

ruby에서 돼지 라틴어 번역기를 만드는 중입니다. 그것은 대부분의 단어에 대해 작동하지만, 한 번에 한 단어 이상으로 작동하도록하는데 어려움을 겪고 있습니다. 그래서 예를 들어 "apple"이라는 단어를 넣을 때 "appleay"를 얻습니다. 그러나 하나 이상의 단어가 입력되면 단어를 번역하지 않습니다. 나는 해결책을 찾기 위해 주위를 둘러 보았지만 공허가왔다. 여기에있는 몇 가지 다른 스레드가 나를 멀리까지 데려 오는 데 정말로 도움이되었습니다. 모든 팁은 크게 감사하겠습니다.Ruby pig 라틴어 번역기 (복수 단어)

"qu"가 자음으로 간주되는 "quiet"및 "square"의 올바른 돼지 라틴어 번역을 허용하기 위해 if/else 문에서 두 가지 예외를 추가했습니다.

도움을 주신 분들께 미리 감사드립니다!

def translate (word) 
    alpha = ('a'..'z').to_a 
    vowels = %w[a e i o u] 
    consonants = alpha - vowels 

    if vowels.include?(word[0..0]) 
    word + 'ay' 
    elsif consonants.include?(word[0..0]) && consonants.include?(word[1..1]) 
    word[2..-1] + word[0..1] + 'ay' 
    elsif word[0..1] == "qu" 
    word[2..word.length]+"quay" 
    elsif word[0..2] == "squ" 
    word[3..word.length]+"squay" 
    else consonants.include?(word[0]) 
    word[1..-1] + word[0..0] + 'ay' 
    end 

end 

답변

1

당신은 그것을 이런 식으로 할 수있는 :

Alpha = ('a'..'z').to_a 
Vowels = %w[a e i o u] 
Consonants = Alpha - Vowels 

def translate(word) 
    if Vowels.include?(word[0]) 
    word + 'ay' 
    elsif Consonants.include?(word[0]) && 
    Consonants.include?(word[1]) 
    word[2..-1] + word[0..1] + 'ay' 
    elsif word[0..1] == "qu" 
    word[2..-1]+"quay" 
    elsif word[0..2] == "squ" 
    word[3..-1]+"squay" 
    else Consonants.include?(word[0]) 
    word[1..-1] + word[0..0] + 'ay' 
    end 
end 

puts "Enter some text to translate" 
text = fgets 
puts text.split.map(&method(:translate)).join(' ') 
+0

올바른 결과를 얻으려면 어디에서 코드를 작성해야합니까? 앞뒤에 if/else 문을 넣으면 "stack level too deep"오류가 발생합니다. – PaperKraftMike

+0

'text'변수는 변환 할 입력 단어가 들어있는 문자열 인 메소드 본문 외부 (즉 프로그램의 마지막 줄)에 배치합니다. – user2398029

+0

그래서 메서드의 마지막 "끝"전에? 그리고 "텍스트 변수"는 그냥 그대로 두어야 만합니까? 거기에서 메서드의 입력을 직접 지시해야합니까? – PaperKraftMike

0

무엇 다양한 방법들로 그것을 깨는 약? 문자열을 단어로 분리 한 다음 단어를 다른 방법으로 전송하여 함께 결합하고 결과를 제공하는 방법입니다.