# File lib/quiz1/t/solutions/James Edward Gray II/solitaire.rb, line 63
def generate(count)             # Keystream Steps
        key_stream = [ ]

        until key_stream.size == count
                # Step 2
                a = $deck.index("A")
                if a == 53
                        $deck.insert(1, $deck.pop)
                else
                        $deck.insert(a + 1, $deck.delete_at(a))
                end

                # Step 3
                b = $deck.index("B")
                if b == 53
                        $deck.insert(2, $deck.pop)
                elsif b == 52
                        $deck.insert(1, $deck.delete_at(b))
                else
                        $deck.insert(b + 2, $deck.delete_at(b))
                end

                # Step 4
                a = $deck.index("A")
                b = $deck.index("B")
                top = [a, b].min
                bottom = [a, b].max
                $deck = $deck.values_at((bottom + 1)..53, top..bottom, 0...top)

                # Step 5
                if $deck[53].kind_of? Integer
                        $deck = $deck.values_at($deck[53]..52, 0...$deck[53], 53)
                end

                # Step 5
                if $deck[0].kind_of? Integer
                        if $deck[$deck[0]].kind_of? Integer
                                key_stream.push($deck[$deck[0]])
                        end
                else
                        if $deck[53].kind_of? Integer
                                key_stream.push($deck[53])
                        end
                end
        end            # Step 7

        key_stream.map! do |number|
                if number > 26
                        (number - 26 - 1 + ?A).chr
                else
                        (number - 1 + ?A).chr
                end
        end
        key_stream = key_stream.join("")
        i = 5
        while i < key_stream.size
                key_stream[i, 0] = " "
                i += 6
        end
        return key_stream
end