codebreaker-ga 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 571cb5edc34dfe9123091e8786675ed4460e02624ae59ab3b538abb7216d0303
4
- data.tar.gz: 251dfb9530f68727c53b64cdbc96444982f28c432e73997992b2b7e7be02e335
3
+ metadata.gz: be1e59f2f709152c69c3a63b15e3ba7418b2305f3c0de91f5f290cb330f1a696
4
+ data.tar.gz: 95342c1fac36f34f760109028bb85c13c9cf2ea3e8b8872f3de158aa1634a73a
5
5
  SHA512:
6
- metadata.gz: 02355ed87e5436a22d63e7dc7388762e726dd5dc045571c9c22dcc5ffbbd5ce16c038719a7ca27a2eaabe5f68c5803cf98f6365f2b9a829af894af248b86bc43
7
- data.tar.gz: 81328f8cd2df76f85c3880c542b57ec38762e7d133f0e881926ddbaf32c3df7d9013105b53df78bc77260c99b738885ed202e3489304b723a2787b1d22c13fba
6
+ metadata.gz: c2367c6e2ffc4fc051a03a4e5707f697b0bd447d2d91028729241de2e20f8f5c6dc041d5e25ad5c5e924bca676e16cb219b3f50a238e80ff57234074bad0e935
7
+ data.tar.gz: 493ff78fd80619b4f34726f4ed785f867875ba4319f407f92dbe15bb8a7cd886f891512140060e4a39200db169f031b7ce21a8c2800bc42302aefeae6d234aff
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /tmp/
9
9
  spec/examples.txt
10
10
  spec/examples.txt
11
+ spec/examples.txt
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreaker-ga (0.2.8)
4
+ codebreaker-ga (0.2.9)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,13 +1,9 @@
1
1
  module Codebreaker
2
- class CompareCodes
3
- def initialize(secret_code)
4
- @secret_code = secret_code
5
- @secret_code_positions = get_code_positions(@secret_code)
6
- end
7
-
8
- def compare(match_code)
2
+ module CompareCodes
3
+ def compare(secret_code, match_code)
4
+ @secret_code_positions = get_code_positions(secret_code)
9
5
  @match_code_positions = get_code_positions(match_code)
10
- crossing_values = @secret_code & match_code
6
+ crossing_values = secret_code & match_code
11
7
  crossing_values.each_with_object([]) { |value, cross_result| cross_result << get_cross_value(value) }
12
8
  .flatten.sort_by { |item| item ? 0 : 1 }
13
9
  end
@@ -1,6 +1,7 @@
1
1
  module Codebreaker
2
2
  class Game < BaseClass
3
3
  include InitDifficulties
4
+ include CompareCodes
4
5
 
5
6
  CODE_LENGTH = 4
6
7
  CODE_NUMBERS = ('1'..'6').freeze
@@ -18,35 +19,43 @@ module Codebreaker
18
19
  def match_code_valid_length?(match_code)
19
20
  return true if validate_length?(match_code, CODE_LENGTH..CODE_LENGTH)
20
21
 
21
- (@errors[:match_code] = 'error_match_code_length') && false
22
+ @errors[:match_code] = 'error_match_code_length'
23
+ false
22
24
  end
23
25
 
24
26
  def validate_match_code_number_range?(match_code)
25
27
  return true if validate_number_range?(match_code, CODE_NUMBERS)
26
28
 
27
- (@errors[:match_code] = 'error_match_code_number') && false
29
+ @errors[:match_code] = 'error_match_code_number'
30
+ false
28
31
  end
29
32
 
30
33
  def difficulty=(difficulty)
31
34
  @difficulty = @difficulties.detect { |value| value.name == difficulty }
35
+ difficulty_valid?
32
36
  end
33
37
 
34
38
  def game_start
35
39
  generate_secret_code
36
40
  generate_hints
37
- @game_stage = GameStage.new(match_code_length: CODE_LENGTH, attempts: @difficulty.attempts)
41
+ @game_stage = GameStage.new(attempts: @difficulty.attempts)
38
42
  end
39
43
 
40
44
  def game_step(match_codes)
41
45
  return unless match_code_valid?(match_codes)
46
+ return unless @game_stage.valide_allow_step?
42
47
 
43
- @game_stage.step(@compare_codes.compare(match_codes))
48
+ @game_stage.step(compare(@secret_code, match_codes))
44
49
  @game_stage.compare_result
45
50
  end
46
51
 
47
52
  def registration(username)
48
53
  @user = User.new(username)
49
- { status: @user.valid?, value: @user.errors.empty? ? @user.username : @user.errors[:user] }
54
+ if @user.valid?
55
+ { status: true, value: @user.username }
56
+ else
57
+ { status: false, value: @user.errors[:user] }
58
+ end
50
59
  end
51
60
 
52
61
  def hint_show
@@ -70,13 +79,6 @@ module Codebreaker
70
79
  true
71
80
  end
72
81
 
73
- def difficulty_valid?
74
- return true unless @difficulty.nil?
75
-
76
- @errors[:difficulty] = 'difficulty_change_error'
77
- false
78
- end
79
-
80
82
  def generate_number
81
83
  Array.new(CODE_LENGTH) { CODE_NUMBERS.to_a.sample }
82
84
  end
@@ -87,11 +89,14 @@ module Codebreaker
87
89
 
88
90
  def generate_secret_code
89
91
  @secret_code = generate_number
90
- @compare_codes = CompareCodes.new(@secret_code)
91
92
  end
92
93
 
93
- def validate
94
- difficulty_valid?
94
+ def difficulty_valid?
95
+ return true unless @difficulty.nil?
96
+
97
+ @errors = {}
98
+ @errors[:difficulty] = 'difficulty_change_error'
99
+ false
95
100
  end
96
101
  end
97
102
  end
@@ -3,20 +3,23 @@ module Codebreaker
3
3
  attr_reader :step_number, :endgame, :attempts, :compare_result, :win
4
4
  attr_accessor :hint_used
5
5
 
6
- def initialize(match_code_length:, attempts:)
6
+ def initialize(attempts:)
7
7
  @step_number = 1
8
8
  @endgame = false
9
9
  @attempts = attempts
10
10
  @compare_result = []
11
- @match_code_length = match_code_length
12
11
  @hint_used = 0
13
12
  end
14
13
 
15
14
  def step(compare_result)
16
15
  @compare_result = compare_result
17
16
  @step_number += 1
18
- @win = @compare_result.length == @match_code_length && @compare_result.all?
19
- @endgame = true if @step_number > @attempts || @win
17
+ @win = @compare_result.length == Game::CODE_LENGTH && @compare_result.all?
18
+ @endgame = true if !valide_allow_step? || @win
19
+ end
20
+
21
+ def valide_allow_step?
22
+ @attempts >= @step_number
20
23
  end
21
24
  end
22
25
  end
@@ -1,3 +1,3 @@
1
1
  module Codebreaker
2
- VERSION = '0.2.8'.freeze
2
+ VERSION = '0.2.9'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker-ga
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - GorohovAlex
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-24 00:00:00.000000000 Z
11
+ date: 2019-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler