2017-08-11 20 views
0

私のRuby解読メソッドがアルファベットの特定の文字だけに壊れているように見える理由を調べようとしています。Ruby解読メソッドの問題

このメソッドの目的は、入力文字列( "new_str")を取得し、その文字列内の各文字をアルファベットの前の文字で書き換えることによって解読することです。つまり、 "bcd"は "abc"を返すはずです...

私は間違っているかもしれませんが、文字ajではうまくいくようですが、その後は文字kzを壊してしまいます。 "a" "b"または "z"は文字にかかわらず: 「azazazazazbzbzbz」

一つの観測が定義されたアルファベット文字列変数に、インデックス番号はので、多分それは何かを投げています...文字k(指数10)から始まる二桁になるということです。(「klmnopqrstuvwxyz」) リターンを解読式でオフですか?とにかく、どんな助け/提案も感謝しました!

def decrypt(new_str) 
    alphabet = "abcdefghijklmnopqrstuvwxyz" 
    index = 0 
    while index < new_str.length 
    new_str[index] = alphabet.index(new_str[index]) 
    new_str[index] = alphabet[new_str[index] - 1] 
    index +=1 
    end 
    puts new_str 
end   

答えて

0

あなたのコードは次のようする必要があります:あなたのコードでは

def decrypt(new_str) 
    alphabet = 'abcdefghijklmnopqrstuvwxyz' 
    index = 0 
    while index < new_str.length 
    letter_index = alphabet.index(new_str[index]) 
    new_str[index] = alphabet[letter_index - 1] 
    index += 1 
    end 
    puts new_str 
end 

decrypt('klmnopqrstuvwxyz') #=> jklmnopqrstuvwxy 
decrypt('abcdefghij')  #=> zabcdefghi 
decrypt('noah')    #=> mnzg 

、あなたは第五行にnew_str[index] = alphabet.index(new_str[index])を実行して、整数によって、文字を切り替えました。

PS:これは実装しているシーザーサイファーコードです。もっとRubyの実装方法に興味があるなら、link hereにチェックを入れてください。

0

置換暗号はtrで簡単に実行できます。

def decrypt(str) 
    alphabet = 'abcdefghijklmnopqrstuvwxyz' 
    replacement = alphabet.split('').rotate(-1).join 
    str.tr(alphabet,replacement) 
end 

decrypt('klmnopqrstuvwxyz') #=> jklmnopqrstuvwxy 
decrypt('abcdefghij')  #=> zabcdefghi 
decrypt('noah')    #=> mnzg