wordl-solver 0.2.2 → 0.2.5

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: 0f326a634328a97eef7ad9e227edb9f8255108f451862c8a62384ad17b8b9985
4
- data.tar.gz: e97864313b704202cd0e089f937c808fbe8dd7ab0a147a385fae127aad433674
3
+ metadata.gz: 12440553edb5c06e61fdb1f41ec3f43d1bdeb440b41255933cd07564ba7f1606
4
+ data.tar.gz: bb5765773d94e26cfac030301d64671df970b4962ff5bedc23ee40ca4541989f
5
5
  SHA512:
6
- metadata.gz: dd62d01accc322db7fbf2a18210e64ddf795beb806dadfae46bc0168a930a99cfce55527ec6488b5a978145cb34db949c4e82e4375e4981fabc832e593ecc507
7
- data.tar.gz: 58e72e25b1f0c2efff9b76de6f92d99d1f27f669a8bd769cef8b006d5a7fd22f3b67d49f2c41223644a7eb2e1500cbe250faafafd815ed9efdbecb540d3bed56
6
+ metadata.gz: f4766ed5464a1bdc2cd27a2d53e2b4318329a10319bbcc34e713574826ef4081d94119c8bfd5ce0bf1aca07f2ae12946cb2057a6aaf4a2b8e2d926d1746fe845
7
+ data.tar.gz: 073f5ee750959c6bb8cdb686cbccb320e78c40016fcd064762fefabd995c18153782318e64dc79eebaca39dbc109310cc5bbda01b66ffb8ad468e6fdcabf1c08
data/Rakefile CHANGED
@@ -1,16 +1,14 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler'
1
+ require "rubygems"
2
+ require "bundler"
5
3
  begin
6
4
  Bundler.setup(:default, :development)
7
5
  rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
6
+ warn e.message
7
+ warn "Run `bundle install` to install missing gems"
10
8
  exit e.status_code
11
9
  end
12
- require 'rake'
13
- require 'juwelier'
10
+ require "rake"
11
+ require "juwelier"
14
12
  Juwelier::Tasks.new do |gem|
15
13
  # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
16
14
  gem.name = "wordl-solver"
@@ -22,30 +20,30 @@ Juwelier::Tasks.new do |gem|
22
20
  gem.authors = ["george kosmopoulos"]
23
21
  gem.files.include "lib/*"
24
22
  # dependencies defined in Gemfile
25
- gem.executables = ['wordl-solver']
23
+ gem.executables = ["wordl-solver"]
26
24
  end
27
25
  Juwelier::RubygemsDotOrgTasks.new
28
- require 'rake/testtask'
26
+ require "rake/testtask"
29
27
  Rake::TestTask.new(:test) do |test|
30
- test.libs << 'lib' << 'test'
31
- test.pattern = 'test/**/test_*.rb'
28
+ test.libs << "lib" << "test"
29
+ test.pattern = "test/**/test_*.rb"
32
30
  test.verbose = true
33
31
  end
34
32
 
35
33
  desc "Code coverage detail"
36
34
  task :simplecov do
37
- ENV['COVERAGE'] = "true"
38
- Rake::Task['test'].execute
35
+ ENV["COVERAGE"] = "true"
36
+ Rake::Task["test"].execute
39
37
  end
40
38
 
41
- task :default => :test
39
+ task default: :test
42
40
 
43
- require 'rdoc/task'
41
+ require "rdoc/task"
44
42
  Rake::RDocTask.new do |rdoc|
45
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
43
+ version = File.exist?("VERSION") ? File.read("VERSION") : ""
46
44
 
47
- rdoc.rdoc_dir = 'rdoc'
45
+ rdoc.rdoc_dir = "rdoc"
48
46
  rdoc.title = "wordl-solver #{version}"
49
- rdoc.rdoc_files.include('README*')
50
- rdoc.rdoc_files.include('lib/**/*.rb')
47
+ rdoc.rdoc_files.include("README*")
48
+ rdoc.rdoc_files.include("lib/**/*.rb")
51
49
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.5
data/bin/wordl-solver CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'wordl-solver'
3
+ require 'wordl_solver'
4
4
  WordlSolver.run
@@ -1,17 +1,18 @@
1
- require "csv"
2
- require "fileutils"
1
+ # frozen_string_literal: true
3
2
 
4
- FILE_PATH = File.join( File.dirname(__FILE__), '5_words.csv')
3
+ require 'csv'
4
+ require 'fileutils'
5
5
 
6
- LETTER_WORDS = []
7
- LETTER_FRENQUENCY = %w(e t a o i n s h r d l c u m f w y g p b v k j x q z)
6
+ FILE_PATH = File.join(File.dirname(__FILE__), '5_words.csv')
7
+
8
+ LETTER_WORDS = [].freeze
9
+ LETTER_FRENQUENCY = %w[e t a o i n s h r d l c u m f w y g p b v k j x q z].reverse.freeze
8
10
 
9
11
  CSV.foreach(FILE_PATH) do |row|
10
12
  LETTER_WORDS << row[0]
11
13
  end
12
14
 
13
15
  class WordlSolver
14
-
15
16
  def initialize
16
17
  @yellows = {
17
18
  0 => [],
@@ -36,12 +37,12 @@ class WordlSolver
36
37
  end
37
38
 
38
39
  def run
39
- answer = ""
40
- while answer != "y"
40
+ answer = ''
41
+ while answer != 'y'
41
42
  ask_for_letters_and_colours
42
43
  find_possible_words
43
44
  present_possible_words
44
- puts "have you found it ? (y/n)"
45
+ puts 'have you found it ? (y/n)'
45
46
  answer = gets.chomp
46
47
  end
47
48
  end
@@ -49,8 +50,8 @@ class WordlSolver
49
50
  private
50
51
 
51
52
  def ask_for_letters_and_colours
52
- puts "Type in order color initial then the letter"
53
- puts "(s for silver, y for yellow and g for green)"
53
+ puts 'Type in order color initial then the letter'
54
+ puts '(s for silver, y for yellow and g for green)'
54
55
  5.times do |t|
55
56
  puts @greens[t]
56
57
  if @greens[t].nil?
@@ -60,18 +61,22 @@ class WordlSolver
60
61
  puts "sorry, didn't catch that, try again:"
61
62
  letters = gets.chomp
62
63
  end
63
- if letters[0] == 's'
64
- @greys << letters[1]
65
- elsif letters[0] == 'y'
66
- @yellows[t] << letters[1]
67
- else
68
- @greens[t] = letters[1]
69
- end
64
+ sort_letter_upon_color(letters, t)
70
65
  else
71
66
  puts "for position #{t + 1} this #{@greens[t]}"
72
67
  end
73
68
  end
74
- return [@greens, @yellows, @greys]
69
+ end
70
+
71
+ def sort_letter_upon_color(letters, t)
72
+ case letters[0]
73
+ when 's'
74
+ @greys << letters[1]
75
+ when 'y'
76
+ @yellows[t] << letters[1]
77
+ else
78
+ @greens[t] = letters[1]
79
+ end
75
80
  end
76
81
 
77
82
  def find_possible_words
@@ -81,17 +86,17 @@ class WordlSolver
81
86
  end
82
87
 
83
88
  def present_possible_words
84
- puts "here are the existing words"
85
- hash_word_frequency = Hash.new()
89
+ puts 'here are the existing words'
90
+ hash_word_frequency = {}
86
91
  @possible_words.each do |word|
87
92
  count = 0
88
- word.chars.each do |char|
89
- count += LETTER_FRENQUENCY.index(char) + 2 * word.chars.count(char)
93
+ word.chars.uniq.each do |char|
94
+ count += LETTER_FRENQUENCY.index(char)
90
95
  end
91
96
  hash_word_frequency[word] = count
92
97
  end
93
- hash_word_frequency = hash_word_frequency.sort_by { |k, v| v }
94
- hash_word_frequency.first(30).each do |word, count|
98
+ hash_word_frequency = hash_word_frequency.sort_by { |_k, v| v }
99
+ hash_word_frequency.last(30).each do |word, count|
95
100
  p "#{word} : #{count}"
96
101
  end
97
102
  end
@@ -109,18 +114,20 @@ class WordlSolver
109
114
  end
110
115
 
111
116
  def filter_yellows
117
+ yellow_letters = @yellows.values.flatten.uniq
112
118
  @possible_words.select! do |word|
113
119
  possible = true
114
120
  word.chars.each_with_index do |letter, index|
115
121
  possible = false if @yellows[index].include?(letter)
116
122
  end
123
+ possible = false unless yellow_letters.all? { |letter| word.include?(letter) }
117
124
  possible
118
125
  end
119
126
  end
120
127
 
121
128
  def filter_greys
122
- @possible_words.select! do |word|
123
- !@greys.any? { |letter| word.include?(letter) }
129
+ @possible_words.reject! do |word|
130
+ @greys.any? { |letter| word.include?(letter) }
124
131
  end
125
132
  end
126
133
 
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 0.2.2 ruby lib
5
+ # stub: wordl-solver 0.2.5 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "wordl-solver".freeze
9
- s.version = "0.2.2"
9
+ s.version = "0.2.5"
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-04-06"
14
+ s.date = "2022-04-29"
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]
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
29
29
  "VERSION",
30
30
  "bin/wordl-solver",
31
31
  "lib/5_words.csv",
32
- "lib/wordl-solver.rb",
32
+ "lib/wordl_solver.rb",
33
33
  "wordl-solver.gemspec"
34
34
  ]
35
35
  s.homepage = "http://github.com/gkosmo/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: 0.2.2
4
+ version: 0.2.5
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-04-06 00:00:00.000000000 Z
11
+ date: 2022-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda
@@ -101,7 +101,7 @@ files:
101
101
  - VERSION
102
102
  - bin/wordl-solver
103
103
  - lib/5_words.csv
104
- - lib/wordl-solver.rb
104
+ - lib/wordl_solver.rb
105
105
  - wordl-solver.gemspec
106
106
  homepage: http://github.com/gkosmo/wordl-solver
107
107
  licenses: