codebreaker-ga 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
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