wordl-solver 1.2.1 → 1.3.0

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: 9206e179244d4923e5b43b61d7a5e41469952c1c931ed9fa9fe096275e2606fa
4
- data.tar.gz: 368b816a614e6cb2cde10c7a00d0b8a4344bf7cb8dcff09b45a2308568e611df
3
+ metadata.gz: fb3bf465211db353a6705e7a34a9678ab1c054e02fc8ee99c6420577705b8a09
4
+ data.tar.gz: 90e1a0ccec7e76c4c4e9609f8e55a858c557b7db48d73658ec0f3c8acb59f3cf
5
5
  SHA512:
6
- metadata.gz: f77778b28f85942040810cdf6ce3c29d144af0aaacf559aefe10e34785c911186d57d67bd90d26f271d026a26ca0c2125d4752ae36dd2f75dcde958b4087c39d
7
- data.tar.gz: '080349d45b6e5f73aaac423248011dfd2d071f6fc334d9ecd92e2764951e47b27880702d0389c4040aca4fb3dc5bfaf4986266f77fb30d5d4dab592cabd1e306'
6
+ metadata.gz: 7056a94cb5ad3f64cd8bbef26ae67e5bc72a7f85df20ad5084ef49e7a8f882236cb6fd6c97de30ee67f338035b14b5176838a74ac09bc473d8c5de46e33ff23b
7
+ data.tar.gz: b549d2effd15ae76b8910efaba4912d3f2f2974c335a2b5d5e99f08bcf79433f6256d2da37ce02f3e5ce57019e282d88a0caf185f05eb2ac135ce7831b1931b2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.1
1
+ 1.3.0
data/lib/wordl_solver.rb CHANGED
@@ -11,45 +11,48 @@ CSV.foreach(FILE_PATH) do |row|
11
11
  LETTER_WORDS << row[0]
12
12
  end
13
13
 
14
+ # The Class WordlSolver is a class that contains the methods to solve the wordl puzzle.
14
15
  class WordlSolver
15
- def self.find_possible_words(greys, greens, yellows)
16
- @greys = greys
17
- @greens = greens
18
- @yellows = yellows
19
- @possible_words = @possible_words.nil? || @possible_words.empty? ? LETTER_WORDS : @possible_words
20
- filter_greens
21
- filter_yellows
22
- filter_greys
23
- @possible_words
24
- end
16
+ class << self
17
+ def find_possible_words(greys, greens, yellows)
18
+ @greys = greys
19
+ @greens = greens
20
+ @yellows = yellows
21
+ @possible_words = @possible_words.nil? || @possible_words.empty? ? LETTER_WORDS : @possible_words
22
+ filter_greens
23
+ filter_yellows
24
+ filter_greys
25
+ @possible_words
26
+ end
25
27
 
26
- def self.filter_greens
27
- @possible_words.select! do |word|
28
- put_in = true
29
- @greens.each do |key, value|
30
- next if value.nil?
28
+ def filter_greens
29
+ @possible_words.select! do |word|
30
+ put_in = true
31
+ @greens.each do |key, value|
32
+ next if value.nil?
31
33
 
32
- put_in = false unless word[key] == value
34
+ put_in = false unless word[key] == value
35
+ end
36
+ put_in
33
37
  end
34
- put_in
35
38
  end
36
- end
37
39
 
38
- def self.filter_yellows
39
- yellow_letters = @yellows.values.flatten.uniq
40
- @possible_words.select! do |word|
41
- possible = true
42
- word.chars.each_with_index do |letter, index|
43
- possible = false if @yellows[index].include?(letter)
40
+ def filter_yellows
41
+ yellow_letters = @yellows.values.flatten.uniq
42
+ @possible_words.select! do |word|
43
+ possible = true
44
+ word.chars.each_with_index do |letter, index|
45
+ possible = false if @yellows[index].include?(letter)
46
+ end
47
+ possible = false unless yellow_letters.all? { |letter| word.include?(letter) }
48
+ possible
44
49
  end
45
- possible = false unless yellow_letters.all? { |letter| word.include?(letter) }
46
- possible
47
50
  end
48
- end
49
51
 
50
- def self.filter_greys
51
- @possible_words.reject! do |word|
52
- @greys.any? { |letter| word.include?(letter) }
52
+ def filter_greys
53
+ @possible_words.reject! do |word|
54
+ @greys.any? { |letter| word.include?(letter) }
55
+ end
53
56
  end
54
57
  end
55
58
  end
@@ -53,18 +53,14 @@ class WordlSolverInterface
53
53
  puts "and then the letter that was tried."
54
54
  puts "For example, if you have tried and arose and you get grey for a"
55
55
  puts "You'd type, after being prompted for the first position: sa "
56
- 5.times do |t|
57
- puts @greens[t]
58
- if @greens[t].nil?
59
- puts "for position #{t + 1}"
60
- letters = gets.chomp
61
- while check_word_correct(letters)
62
- puts "sorry, didn't catch that, try again:"
63
- letters = gets.chomp
64
- end
65
- sort_letter_upon_color(letters, t)
56
+ 5.times do |position|
57
+ puts @greens[position]
58
+ if @greens[position].nil?
59
+ puts "for position #{position + 1}"
60
+ letters = retrieve_input_letters
61
+ sort_letter_upon_color(letters, position)
66
62
  else
67
- puts "for position #{t + 1} this #{@greens[t]}"
63
+ puts "for position #{position + 1} this #{@greens[position]}"
68
64
  end
69
65
  end
70
66
  end
@@ -86,17 +82,25 @@ class WordlSolverInterface
86
82
  end
87
83
  end
88
84
 
89
- def check_word_correct(letters)
90
- letters.length != 2 || !%w[s y g].include?(letters[0])
85
+ def word_is_correct?(letters)
86
+ letters.length == 2 && %w[s y g].include?(letters[0])
91
87
  end
92
88
 
93
89
  def set_letters_frequencies
94
- @frenquencies = {}
90
+ @frenquencies = Hash.new(0)
95
91
  @possible_words.each do |word|
96
92
  word.chars.each do |letter|
97
- @frenquencies[letter] = 0 if @frenquencies[letter].nil?
98
93
  @frenquencies[letter] += 1
99
94
  end
100
95
  end
101
96
  end
97
+
98
+ def retrieve_input_letters
99
+ letters = gets.chomp
100
+ until word_is_correct?(letters)
101
+ puts "sorry, didn't catch that, try again:"
102
+ letters = gets.chomp
103
+ end
104
+ letters
105
+ end
102
106
  end
data/wordl-solver.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: wordl-solver 1.2.1 ruby lib
5
+ # stub: wordl-solver 1.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "wordl-solver".freeze
9
- s.version = "1.2.1"
9
+ s.version = "1.3.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["george kosmopoulos".freeze]
14
- s.date = "2022-05-31"
14
+ s.date = "2022-06-16"
15
15
  s.description = "This gem helps you solve wordl puzzles. It does so by asking you for the letters position you know, the letters you know exists and the ones you know don't exists. It then proposes words depending on how good they are by weighting the letters by their frequency in the english language.".freeze
16
16
  s.email = "gkosmo1@hotmail.com".freeze
17
17
  s.executables = ["wordl-solver".freeze]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wordl-solver
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - george kosmopoulos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-31 00:00:00.000000000 Z
11
+ date: 2022-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda