Sha256: a83a3e92362b99dd0aa7f574771f8c11d9d167cc76dd144399ac8166a39fbc45
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
module Codebreaker class Game ATTEMPTS = 10 HINTS = 4 attr_reader :used_attempts, :used_hints def initialize @secret_code = generate @shuffled_secret_code = @secret_code.shuffle @used_attempts = 0 @used_hints = 0 end def hint @used_hints += 1 @shuffled_secret_code.pop end def make_guess(user_code) return unless code_valid?(user_code) @used_attempts += 1 @user_code = user_code.chars.map(&:to_i) return '++++' if @user_code == @secret_code exact_matches + number_matches end def available_attempts ATTEMPTS - @game.used_attempts end def available_hints HINTS - @game.used_hints end private def generate Array.new(4) { rand(1..6) } end def code_valid?(user_code) user_code.match(/^[1-6]{4}$/) end def exact_matches @zipped_codes = @secret_code.zip(@user_code).delete_if { |el| el[0] == el[1] } '+' * (@secret_code.length - @zipped_codes.length) end def number_matches transposed = @zipped_codes.transpose secret_array = transposed[0] user_array = transposed[1] user_array.each do |el| if secret_array.include?(el) index = secret_array.index(el) secret_array.delete_at(index) end end '-' * (@zipped_codes.length - secret_array.length) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
lkr-codebreaker-0.2.2 | lib/codebreaker/game.rb |