codebreaker_diz 0.2.5 → 0.2.6
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 +4 -4
- data/Gemfile.lock +1 -1
- data/codebreaker_diz.gemspec +0 -1
- data/lib/codebreaker_diz/errors.rb +9 -0
- data/lib/codebreaker_diz/game.rb +16 -8
- data/lib/codebreaker_diz/matcher.rb +14 -10
- data/lib/codebreaker_diz/version.rb +1 -1
- data/lib/codebreaker_diz.rb +1 -6
- metadata +3 -17
- data/config/locales/en.yml +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b25b6d901bf9bd538342fb86c878b4cb1e66a2b33f50902a39989677c89b036b
|
4
|
+
data.tar.gz: b2b97cdbaeb85c13b95190770aa476da1443f158ebd5786d7b44e9cb3fa626c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb0673a0234e0daa3bb044139e7dd25c0a210dc21e57ceedce78f70b72d9263a874a730531360030a0bc013c9e17e806ec2bff3dff8c9789d8f04d4ef6079cef
|
7
|
+
data.tar.gz: 9d78f67fc142ed43e3feef1d9f7e246207f59a985635e8e3c2360770b361e7e1aa9c37ea3d4b87d76e312ac0285074638e3777525dc0283dcd2020a9ad35b485
|
data/Gemfile.lock
CHANGED
data/codebreaker_diz.gemspec
CHANGED
data/lib/codebreaker_diz/game.rb
CHANGED
@@ -4,7 +4,7 @@ require_relative 'config'
|
|
4
4
|
|
5
5
|
module CodebreakerDiz
|
6
6
|
class Game
|
7
|
-
attr_reader :tries_count, :hints_count
|
7
|
+
attr_reader :tries_count, :hints_count, :errors
|
8
8
|
|
9
9
|
def initialize(difficulty: :kid)
|
10
10
|
validate_difficulty(difficulty)
|
@@ -18,25 +18,25 @@ module CodebreakerDiz
|
|
18
18
|
@tries_count = DIFFICULTIES[@difficulty][:tries]
|
19
19
|
@hints_count = DIFFICULTIES[@difficulty][:hints]
|
20
20
|
|
21
|
-
@
|
22
|
-
end
|
21
|
+
@errors = []
|
23
22
|
|
24
|
-
|
25
|
-
raise ArgumentError, I18n.t(:INVALID_DIFFICULTY) unless DIFFICULTIES.include? difficulty.to_sym
|
23
|
+
@matches = ''
|
26
24
|
end
|
27
25
|
|
28
26
|
def check_guess(input)
|
29
27
|
input = to_array(input)
|
30
28
|
|
31
|
-
return
|
29
|
+
return add_error(GuessFormatError) unless valid? input
|
32
30
|
|
33
31
|
@tries_count -= 1
|
34
32
|
|
35
|
-
|
33
|
+
resolver = CodeResolver.new(@secret, input)
|
34
|
+
|
35
|
+
@matches = resolver.matches
|
36
36
|
end
|
37
37
|
|
38
38
|
def generate_hint
|
39
|
-
return
|
39
|
+
return add_error(NoHintsError) if @hints_count.zero?
|
40
40
|
|
41
41
|
index = @hint_indexes.sample
|
42
42
|
|
@@ -70,6 +70,14 @@ module CodebreakerDiz
|
|
70
70
|
|
71
71
|
private
|
72
72
|
|
73
|
+
def add_error(err)
|
74
|
+
(@errors << err) && nil
|
75
|
+
end
|
76
|
+
|
77
|
+
def validate_difficulty(difficulty)
|
78
|
+
raise DifficultyError unless DIFFICULTIES.include? difficulty.to_sym
|
79
|
+
end
|
80
|
+
|
73
81
|
def to_array(input)
|
74
82
|
input.to_i.digits.reverse
|
75
83
|
end
|
@@ -3,29 +3,33 @@
|
|
3
3
|
require_relative 'config'
|
4
4
|
|
5
5
|
module CodebreakerDiz
|
6
|
-
class
|
6
|
+
class CodeResolver
|
7
|
+
attr_reader :matches
|
8
|
+
|
7
9
|
def initialize(secret_code, user_code)
|
8
|
-
@secret_code
|
9
|
-
@user_code
|
10
|
+
@secret_code = secret_code.clone
|
11
|
+
@user_code = user_code
|
10
12
|
|
11
|
-
@exact_matches
|
13
|
+
@exact_matches = 0
|
12
14
|
@number_matches = 0
|
15
|
+
|
16
|
+
@matches = obtain_matches
|
13
17
|
end
|
14
18
|
|
15
|
-
|
16
|
-
|
19
|
+
private
|
20
|
+
|
21
|
+
def obtain_matches
|
22
|
+
calculate_matches unless @secret_code.empty?
|
17
23
|
|
18
24
|
EXACT_MATCH_SIGN * @exact_matches << NUMBER_MATCH_SIGN * @number_matches
|
19
25
|
end
|
20
26
|
|
21
|
-
private
|
22
|
-
|
23
27
|
def calculate_matches
|
24
28
|
@secret_code.zip(@user_code).each do |secret_code_number, user_code_number|
|
25
29
|
next unless @secret_code.include? user_code_number
|
26
30
|
|
27
|
-
if secret_code_number == user_code_number
|
28
|
-
|
31
|
+
if secret_code_number == user_code_number then @exact_matches += 1
|
32
|
+
else @number_matches += 1
|
29
33
|
end
|
30
34
|
|
31
35
|
@secret_code.delete_at(@secret_code.index(user_code_number))
|
data/lib/codebreaker_diz.rb
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'i18n'
|
4
|
-
|
5
3
|
require_relative 'codebreaker_diz/game'
|
6
4
|
require_relative 'codebreaker_diz/matcher'
|
5
|
+
require_relative 'codebreaker_diz/errors'
|
7
6
|
require_relative 'codebreaker_diz/version'
|
8
|
-
|
9
|
-
I18n.config.load_path << Dir[File.expand_path('config/locales') + '/*.yml']
|
10
|
-
I18n.config.available_locales = :en
|
11
|
-
I18n.default_locale = :en
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codebreaker_diz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bl0rch1d
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -164,20 +164,6 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 0.1.0
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: i18n
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '1.6'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '1.6'
|
181
167
|
description: Game for true Hackers
|
182
168
|
email:
|
183
169
|
- temaflash96@gmail.com
|
@@ -203,9 +189,9 @@ files:
|
|
203
189
|
- bin/console
|
204
190
|
- bin/setup
|
205
191
|
- codebreaker_diz.gemspec
|
206
|
-
- config/locales/en.yml
|
207
192
|
- lib/codebreaker_diz.rb
|
208
193
|
- lib/codebreaker_diz/config.rb
|
194
|
+
- lib/codebreaker_diz/errors.rb
|
209
195
|
- lib/codebreaker_diz/game.rb
|
210
196
|
- lib/codebreaker_diz/matcher.rb
|
211
197
|
- lib/codebreaker_diz/version.rb
|