2016-08-24 3 views
0

Я написал код, чтобы преобразовать код Морзе в символы. Дело в том, что когда я запускаю этот код на терминале, и через IRB я получаю вывод, как ожидалось, но когда я запускаю тот же код в онлайн-среде IDE, у меня получается другой вывод.Разный выход для одного и того же кода Ruby?

Код:

$morse_dict = { 
    "a" => ".-", 
    "b" => "-...", 
    "c" => "-.-.", 
    "d" => "-..", 
    "e" => ".", 
    "f" => "..-.", 
    "g" => "--.", 
    "h" => "....", 
    "i" => "..", 
    "j" => ".---", 
    "k" => "-.-", 
    "l" => ".-..", 
    "m" => "--", 
    "n" => "-.", 
    "o" => "---", 
    "p" => ".--.", 
    "q" => "--.-", 
    "r" => ".-.", 
    "s" => "...", 
    "t" => "-", 
    "u" => "..-", 
    "v" => "...-", 
    "w" => ".--", 
    "x" => "-..-", 
    "y" => "-.--", 
    "z" => "--..", 
    " " => " ", 
    "1" => ".----", 
    "2" => "..---", 
    "3" => "...--", 
    "4" => "....-", 
    "5" => ".....", 
    "6" => "-....", 
    "7" => "--...", 
    "8" => "---..", 
    "9" => "----.", 
    "0" => "-----" 
} 

def decodeMorse(morseCode) 
    words = morseCode.split('  ') 
    i=0 
    sentence = [] 
    while i < words.length 
    word = words[i].split(' ') 
    j = 0 
    while j < word.length 
     sentence.push($morse_dict.key(word[j])) 
     if word.length - j == 1 
     sentence.push(' ') 
     end 
    j += 1 
    end 
    i += 1 
    end 
    sentence = sentence.join().upcase 
    return sentence 
end 

sentence= decodeMorse('.... . -.--  .--- ..- -.. .') 
puts sentence 

выход я получаю в консоли и IRB: HEY JUDE выход я получаю в онлайн-редакторов: HEYJUDE

Я не понимаю, почему в пространстве (ЭЙ (пробел) JUDE) удаляется и добавляется в конце в онлайн-редакторы (HEYJUDE (пробел)).

Чтобы проверить мой код дальше, я поставил некоторые проверки как Iteration #{j} во внутреннем цикле while, и у меня появилось очень странное поведение. То, что я получил на выходе был:

Iteration 1 
Iteration 2 
Iteration 3 
Iteration 4 
Iteration 5 
Iteration 6 
Iteration 7 

вместо

Iteration 1 
Iteration 2 
Iteration 3 

Iteration 1 
Iteration 2 
Iteration 3 
Iteration 4 

Почему такое поведение? Я пробовал изо всех сил следовать стилю синтаксиса Ruby, но я новичок!

+4

работает для меня , Я предполагаю, что копирование вашего кода в онлайн-среду IDE изменяет пробел где-то. Можете ли вы сохранить код в интерактивной среде IDE и показать нам ссылку, которая воспроизводит проблему, или еще лучше скопировать код в онлайн-среду IDE и вернуться и воспроизвести проблему на вашем компьютере? –

ответ

-2

Этот код может быть намного проще ... Попробуйте что-то вроде этого (я не стал наклеивать morse_dict глобальные) (пс старается избегать использования глобального ВАРА, как это):

def decode_morse(morse_code) 
    morse_dict = { ... } # placeholder, use your actual map here 
    out = [] 
    morse_code.split('  ').each do |w| 
    w.split(' ').each do |l| 
     out.push morse_dict.invert[l] # actual letter 
    end 
    out.push ' ' # after each word 
    end 
    out.join.strip # final output 
end 
+0

Его очень аккуратный, однако я должен понять, как это работает. Но это не отвечает на мой вопрос. Я хочу знать причину поведения, которое я получаю? –

Смежные вопросы