どこが間違いか分かりません。(Ruby)
Rubyを使ったプログラムが巧く行かないのですが、どこでエラーが出ているのか分かりません。どなたか何が原因でエラーが起こったのか教えて頂けないでしょうか。
以下ソースコードです。
class SolitaireCipher
$deck = (1..52).to_a+['A','B']
def solitaire(count)
key_stream = []
until key_stream.size == count
a = $deck.index("A")
$deck.delete("A")
if a == 53
a = 0
else
a += 1
end
$deck.insert(a,"A")
b = $deck.index("B")
$deck.delete("B")
if b == 52
b = 1
elsif b == 53
b = 2
else
b = b+2
end
$deck.insert(b,"B")
a1 = $deck[0..b-1]
a2 = $deck[b..a]
a3 = $deck[a+1..53]
$deck = a3+a2+a1
if $deck[53] == 'A'
t1 = 27
elsif $deck[53] == 'B'
t1 = 27
else
t1 = $deck[53]
end
a4 = $deck[0..t1-1]
$deck = ($deck-a4).insert(52,a4).flatten!
i = $deck[0].to_i
key = $deck[i]
key_stream << key
end
key_stream_s = key_stream.join
n = 5
while n < key_stream_s.size
key_stream_s[n,0] = " "
n += 6
end
key_stream = key_stream_s.split(" ")
end
end
s = SolitaireCipher.new
p s.solitaire(20)
このプログラムを実行したときに、どういう訳かuntil文の中で毎回$deckの値が初期化されるようです。
そのため結果が以下のようになります。
["44444", "44444", "44444", "44444"]
初心者プログラマーなので何か初歩的な間違いをしているのかもしれません。
どなたかエラーの原因を教えて頂けないでしょうか。
読みにくいプログラムではありますがよろしくおねがいします。