Sha256: cbf5828e5d8fe7fc8f6c86b63502577a24ce94b5cb4d4cc0d2ae72e94c3308e8
Contents?: true
Size: 1.5 KB
Versions: 2
Compression:
Stored size: 1.5 KB
Contents
# frozen_string_literal: true module Codebreaker class Game GUESS_PRESENCE = '-' GUESS_PLACE = '+' attr_reader :secret_code, :attempts_counter, :hinted_numbers, :current_difficulty def initialize(difficulty) @secret_code = create_secret_code @attempts_counter = 0 @current_difficulty = difficulty.level @hinted_numbers = @secret_code.sample(@current_difficulty[:hints]) end def check_number_match(guess) @guess = guess @attempts_counter += 1 return win_string if @guess == @secret_code number_match(exact_match) end def take_hint @hinted_numbers.pop end def win?(string) string == win_string end def lose? @attempts_counter >= @current_difficulty[:attempts] end private def win_string GUESS_PLACE * Guess::VALID_GUESS_LENGTH end def create_secret_code Array.new(4) { rand(0..6) } end def exact_match array = @secret_code.dup array.map.with_index do |_char, index| next unless array[index] == @guess[index] @guess[index] = nil GUESS_PLACE end.compact end def number_match(pluses) code = @secret_code.map.with_index { |char, index| char if @guess[index] }.compact @guess.compact! code.map.with_index do |_char, index| if code.include? @guess[index] code[code.index(@guess[index])] = nil pluses << GUESS_PRESENCE end end pluses.join end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
codebreaker_gapdn-0.1.5 | lib/codebreaker_gapdn/game.rb |
codebreaker_gapdn-0.1.3 | lib/codebreaker_gapdn/game.rb |