Class: Solitaire::KeyStream
- Defined in:
- lib/quiz1/t/solutions/Florian Gross/solitaire.rb
Instance Method Summary collapse
- #generate_letter(seed_phrase = nil) ⇒ Object (also: #shift)
-
#initialize(key_method = nil) ⇒ KeyStream
constructor
A new instance of KeyStream.
Constructor Details
#initialize(key_method = nil) ⇒ KeyStream
Returns a new instance of KeyStream.
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/quiz1/t/solutions/Florian Gross/solitaire.rb', line 78 def initialize(key_method = nil) case key_method when true then @deck = Card.deck.sort_by { rand } when String then @deck = Card.deck generate_letter(key_method) else @deck = Card.deck end end |
Instance Method Details
#generate_letter(seed_phrase = nil) ⇒ Object Also known as: shift
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/quiz1/t/solutions/Florian Gross/solitaire.rb', line 90 def generate_letter(seed_phrase = nil) if seed_phrase seed_phrase = Solitaire.clean(seed_phrase) seed_phrase = nil if seed_phrase.empty? end result = nil until result deck_size = @deck.size # Move JokerA down one card old_a_pos = @deck.index(Card::JokerA) new_a_pos = case old_a_pos when deck_size - 1 then 1 else old_a_pos + 1 end @deck.move(old_a_pos, new_a_pos) # Move JokerB down two cards old_b_pos = @deck.index(Card::JokerB) new_b_pos = case old_b_pos when deck_size - 1 then 2 when deck_size - 2 then 1 else old_b_pos + 2 end @deck.move(old_b_pos, new_b_pos) # Perform triple cut top_pos, bot_pos = [@deck.index(Card::JokerA), @deck.index(Card::JokerB)].sort @deck.replace( @deck[(bot_pos + 1) .. -1] + @deck[top_pos .. bot_pos] + @deck[0 ... top_pos]) # Perform count cut top = @deck.slice!(0 ... @deck.last.value) @deck.insert(-2, *top) if seed_phrase key = seed_phrase.slice!(0, 1) top = @deck.slice!(0 ... Solitaire.letter_to_number(key)) @deck.insert(-2, *top) result = true if seed_phrase.empty? else # Fetch result card = @deck[@deck.first.value] result = card.letter unless card.special? end end return result end |