codebreaker_kub 0.1.6 → 0.2.2

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: 3a49f0af67627baefe1e347796218ea5ea54d8155e1187ded572e04c28729c0f
4
- data.tar.gz: f4d02d1790d23a479d48f3f24d2e62a20264d231c42c3d7a6c23a1a2532aabd2
3
+ metadata.gz: 051607a50601d334aa48d9d28785323e8d5c221c0aef317be4b4a5ceee34386e
4
+ data.tar.gz: 6a7ef0f973f7f648ab9ec282631d77f18f62ab2b8d271fa1959e6a4d50286225
5
5
  SHA512:
6
- metadata.gz: 10154c1f27c0dcb29b36280731de9b3c261eb69e5aebab8947f519a70012e035126f2f412be3bef4d70f41533b4432f23c88e5b88385d1ec00ac8566e22a6359
7
- data.tar.gz: 7a3f12d5f012885f3a0a89e940f5515f4569f0200e31f8bccf301ffdb241496b6388d1ad1c88ba14be31ea063893a689d1fffc74a22690d69ef8a89e2b21e16c
6
+ metadata.gz: a60a49f8ea3d902cc5455fba5e1acf75a1290d013bc4dda5ff4ca6cadabddd8795c8a8e25f697cfed92b1c10973e410b64070a5d48bc73e52afb252ec3c2da46
7
+ data.tar.gz: 50d31ee1829a607075be8ec34df7b77eea7aa5c783ea62b5f12bfdc119f4c9df5db751b2d195a2c19970375422442f4a797e6e8326b327a2325765fbba717f99
@@ -7,9 +7,6 @@ Style/Documentation:
7
7
  Layout/LineLength:
8
8
  Max: 110
9
9
 
10
- Style/FrozenStringLiteralComment:
11
- Enabled: false
12
-
13
10
  Metrics/BlockLength:
14
11
  Enabled: false
15
12
 
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in codebreaker.gemspec
4
6
  gemspec
5
-
6
- gem 'rake', '~> 12.0'
7
- gem 'rspec', '~> 3.0'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreaker_kub (0.1.5)
4
+ codebreaker_kub (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -65,7 +65,7 @@ DEPENDENCIES
65
65
  fasterer (~> 0.8)
66
66
  i18n (~> 1.8)
67
67
  rake (~> 12.0)
68
- rspec (~> 3.0)
68
+ rspec (~> 3.9)
69
69
  rubocop (~> 0.87)
70
70
  simplecov (~> 0.18)
71
71
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'codebreaker'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/codebreaker/version'
2
4
 
3
5
  Gem::Specification.new do |spec|
@@ -28,6 +30,7 @@ Gem::Specification.new do |spec|
28
30
 
29
31
  spec.add_development_dependency 'fasterer', '~>0.8'
30
32
  spec.add_development_dependency 'i18n', '~>1.8'
33
+ spec.add_development_dependency 'rake', '~> 12.0'
31
34
  spec.add_development_dependency 'rspec', '~>3.9'
32
35
  spec.add_development_dependency 'rubocop', '~>0.87'
33
36
  spec.add_development_dependency 'simplecov', '~>0.18'
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'codebreaker/guess_checker'
1
4
  require_relative 'codebreaker/game'
2
5
  require_relative 'codebreaker/loader'
3
6
  require_relative 'codebreaker/output'
@@ -19,11 +19,11 @@
19
19
  wrong_difficulty: "There is no such level. Select from available, please"
20
20
  get_hint: "You can choose get hint - puts 'hint'"
21
21
  no_hints: "You have no hints"
22
+ enter_guess: "Enter your guess, please"
22
23
  wrong_input: "Your input is invalid or there is no such command."
23
24
  win: "YOU WIN!"
24
25
  lose: "You lose, sorry("
25
26
  code: "The code was: "
26
27
  no_stats: "Sorry, you have not any statistic yet"
27
28
  save_result: "Do you want to save result y/n"
28
- game_over: "GAME OVER"
29
29
 
@@ -1,10 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  class Game
5
+ include Codebreaker::GuessChecker
6
+
3
7
  attr_accessor :input_code, :code, :name, :difficulties, :difficulty, :hints_left, :attempts_left
8
+ attr_reader :minuse, :plus, :none, :hints_code
9
+
10
+ CODE_LENGTH = 4
11
+ CODE_RANGE = (1..6).freeze
4
12
 
5
13
  def initialize
6
14
  @difficulties = Codebreaker::Loader.load('difficulties')
7
15
  @code = generate_code
16
+ @hints_code = @code.chars.shuffle
17
+ symbols
8
18
  end
9
19
 
10
20
  def game_option(name, difficulty)
@@ -22,47 +32,36 @@ module Codebreaker
22
32
  end
23
33
 
24
34
  def hints_left?
25
- @hints_left.positive?
35
+ hints_left.positive?
26
36
  end
27
37
 
28
38
  def input_operation(input_code)
29
- @input_code = input_code
30
39
  return unless attempts_left?
31
40
 
32
41
  @attempts_left -= 1
33
- check_input
42
+ check_input(@code, input_code)
34
43
  end
35
44
 
36
45
  def attempts_left?
37
- @attempts_left.positive?
46
+ attempts_left.positive?
38
47
  end
39
48
 
40
49
  def win?
41
- @input_code == @code
50
+ input_code == code
42
51
  end
43
52
 
44
53
  def save
45
- Codebreaker::Loader.save(to_h, 'stat')
54
+ Codebreaker::Loader.save(to_h, 'stats')
46
55
  end
47
56
 
48
57
  private
49
58
 
50
- def check_input(code = @code.chars)
51
- input = @input_code.chars
52
- minuses = (code & input).map { |element| [code.count(element), input.count(element)].min }.sum
53
- result = '-' * minuses
54
- input.each.with_index do |element, index|
55
- result.sub!('-', '+') if element == code[index]
56
- end
57
- result
58
- end
59
-
60
59
  def generate_code
61
- Array.new(4) { rand(1..6) }.join
60
+ Array.new(CODE_LENGTH) { rand(CODE_RANGE) }.join
62
61
  end
63
62
 
64
63
  def generate_hint
65
- @code.chars.shuffle.pop
64
+ @hints_code.pop
66
65
  end
67
66
 
68
67
  def difficulty_option
@@ -76,9 +75,8 @@ module Codebreaker
76
75
  attempts: difficulty_option[:attempts],
77
76
  hints: difficulty_option[:hints],
78
77
  code: @code,
79
- attempts_left: @attempts_left,
80
- hints_left: @hints_left,
81
- win: win?
78
+ used_attempts: difficulty_option[:attempts] - @attempts_left,
79
+ used_hints: difficulty_option[:hints] - @hints_left
82
80
  }
83
81
  end
84
82
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  module Loader
3
5
  PATH = File.join(File.dirname(__FILE__), 'data/').freeze
4
- EXTENCTION = '.yml'.freeze
6
+ EXTENCTION = '.yml'
5
7
  def self.load(file_name)
6
8
  file_name = PATH + file_name + EXTENCTION.to_s
7
9
  if File.exist?(file_name)
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  class Output
3
5
  attr_reader :stats
4
6
  def initialize
5
7
  I18n.load_path << Dir[File.expand_path(File.join(File.dirname(__FILE__), 'data/locales/')) + '/*.yml']
6
8
  I18n.config.available_locales = :en
7
- @stats = Codebreaker::Loader.load('stat')
9
+ @stats = Codebreaker::Loader.load('stats')
8
10
  end
9
11
 
10
12
  def greeting
@@ -27,16 +29,23 @@ module Codebreaker
27
29
  puts I18n.t(:rules)
28
30
  end
29
31
 
32
+ def sort_stats
33
+ @stats = @stats.sort_by do |game|
34
+ [game[:attempts], game[:used_attempts],
35
+ game[:used_hints]]
36
+ end
37
+ end
38
+
30
39
  def show_stats
31
- @stats.each do |game|
40
+ sort_stats
41
+ @stats.each_with_index do |game, index|
32
42
  puts "Hey, #{game[:name]}
43
+ Rating: #{index + 1}
33
44
  Attempts: #{game[:attempts]}
34
45
  Hints: #{game[:hints]}
35
- Code: #{game[:code]}
36
46
  Chosen difficulty: #{game[:difficulty]}
37
- Unused attempts: #{game[:attempts_left]}
38
- Unused hints: #{game[:hints_left]}
39
- Win: #{game[:win]}"
47
+ Used attempts: #{game[:used_attempts]}
48
+ Used hints: #{game[:used_hints]}"
40
49
  end
41
50
  end
42
51
 
@@ -50,7 +59,6 @@ module Codebreaker
50
59
 
51
60
  def no_hints
52
61
  puts I18n.t(:no_hints)
53
- puts I18n.t(:code)
54
62
  end
55
63
 
56
64
  def choose_difficulty
@@ -61,6 +69,10 @@ module Codebreaker
61
69
  puts I18n.t(:wrong_difficulty)
62
70
  end
63
71
 
72
+ def enter_guess
73
+ puts I18n.t(:enter_guess)
74
+ end
75
+
64
76
  def wrong_input
65
77
  puts I18n.t(:wrong_input)
66
78
  end
@@ -71,6 +83,7 @@ module Codebreaker
71
83
 
72
84
  def lose
73
85
  puts I18n.t(:lose)
86
+ puts I18n.t(:code)
74
87
  end
75
88
 
76
89
  def save_result
@@ -80,9 +93,5 @@ module Codebreaker
80
93
  def goodbye
81
94
  puts I18n.t(:goodbye)
82
95
  end
83
-
84
- def game_over
85
- puts I18n.t(:game_over)
86
- end
87
96
  end
88
97
  end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  module Validation
5
+ MIN_NAME_LENGTH = 3
6
+ MAX_NAME_LENGTH = 20
3
7
  def name_is_valid?(name)
4
- name.instance_of?(String) && name.length.between?(3, 20)
8
+ name.instance_of?(String) && name.length.between?(MIN_NAME_LENGTH, MAX_NAME_LENGTH)
5
9
  end
6
10
 
7
11
  def input_is_valid?(input)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
- VERSION = '0.1.6'.freeze
4
+ VERSION = '0.2.2'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker_kub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - katia kub
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-11 00:00:00.000000000 Z
11
+ date: 2020-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fasterer
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '12.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '12.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement