wordl-solver 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +113 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/bin/wordl-solver +4 -0
- data/lib/5_words.csv +12927 -0
- data/lib/wordl-solver.rb +111 -0
- data/wordl-solver.gemspec +58 -0
- metadata +129 -0
data/lib/wordl-solver.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require "csv"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
FILE_PATH = "./lib/5_words.csv"
|
5
|
+
LETTER_WORDS = []
|
6
|
+
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)
|
7
|
+
INITIAL_POSITIONED_LETTER_MESSAGE = "enter in order the letters for which you know the position \n if you don't know the position press enter"
|
8
|
+
INITIAL_EXISTING_LETTER_MESSAGE = "enter all the letters you know exist in the word but for which you don't know the position"
|
9
|
+
INITIAL_NOT_EXISTING_MESSAGE = "enter all the letters you know DO NOT exist in the word"
|
10
|
+
POSITIONED_LETTER_MESSAGE = "enter all the letters in their position \n if you don't know the position press enter"
|
11
|
+
EXISTING_LETTER_MESSAGE = "add the letters you know exist in the word but for which you don't know the position"
|
12
|
+
NOT_EXISTING_MESSAGE = "enter all the letters you know DO NOT exist in the word"
|
13
|
+
|
14
|
+
CSV.foreach(FILE_PATH) do |row|
|
15
|
+
LETTER_WORDS << row[0]
|
16
|
+
end
|
17
|
+
class WordlSolver
|
18
|
+
|
19
|
+
def self.run
|
20
|
+
WordlSolver.new.run
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
existing_letters, not_existing_letters, posish = initial_run
|
25
|
+
iterating_run(existing_letters, not_existing_letters, posish)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def ask_and_list_words(positioned_letter_message, existing_letter_message, not_existing_message, existing_letters, not_existing_letters, posish)
|
31
|
+
puts positioned_letter_message
|
32
|
+
|
33
|
+
posish.each do |position, value|
|
34
|
+
if value.nil? || value == ""
|
35
|
+
puts "for position #{position + 1} enter a letter"
|
36
|
+
posish[position] = gets.chomp
|
37
|
+
else
|
38
|
+
puts "for position #{position + 1} you've found: #{value}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
puts existing_letters
|
42
|
+
puts existing_letter_message
|
43
|
+
exist = existing_letters | gets.chomp.split('')
|
44
|
+
puts not_existing_message
|
45
|
+
puts not_existing_letters
|
46
|
+
not_exist = not_existing_letters | gets.chomp.split('')
|
47
|
+
possible_words = []
|
48
|
+
LETTER_WORDS.each do |word|
|
49
|
+
put_in = true
|
50
|
+
posish.each do |key, value|
|
51
|
+
next if value == ""
|
52
|
+
put_in = false unless word[key] == value
|
53
|
+
end
|
54
|
+
possible_words << word if put_in
|
55
|
+
end
|
56
|
+
possible_words = possible_words.select do |word|
|
57
|
+
exist.all? { |letter| word.include?(letter) }
|
58
|
+
end
|
59
|
+
|
60
|
+
possible_words = possible_words.select do |word|
|
61
|
+
!not_exist.any? { |letter| word.include?(letter) }
|
62
|
+
end
|
63
|
+
"here are the existing words"
|
64
|
+
hash_word_frequency = Hash.new()
|
65
|
+
possible_words.each do |word|
|
66
|
+
count = 0
|
67
|
+
word.chars.each do |char|
|
68
|
+
count += LETTER_FRENQUENCY.index(char) + 2 * word.chars.count(char)
|
69
|
+
end
|
70
|
+
hash_word_frequency[word] = count
|
71
|
+
end
|
72
|
+
hash_word_frequency = hash_word_frequency.sort_by { |k, v| v }
|
73
|
+
hash_word_frequency.first(30).each do |word, count|
|
74
|
+
puts "#{word} : #{count}"
|
75
|
+
end
|
76
|
+
return [exist, not_exist, posish]
|
77
|
+
end
|
78
|
+
|
79
|
+
def initial_run
|
80
|
+
existing_letters = []
|
81
|
+
not_existing_letters = []
|
82
|
+
posish = {
|
83
|
+
0 => nil,
|
84
|
+
1 => nil,
|
85
|
+
2 => nil,
|
86
|
+
3 => nil,
|
87
|
+
4 => nil,
|
88
|
+
}
|
89
|
+
history = ask_and_list_words(INITIAL_POSITIONED_LETTER_MESSAGE, INITIAL_EXISTING_LETTER_MESSAGE, INITIAL_NOT_EXISTING_MESSAGE, existing_letters, not_existing_letters, posish)
|
90
|
+
puts "have you found it ? (y/n)"
|
91
|
+
answer = gets.chomp
|
92
|
+
existing_letters = history[0]
|
93
|
+
not_existing_letters = history[1]
|
94
|
+
puts "existing letters"
|
95
|
+
puts existing_letters.join(" - ")
|
96
|
+
puts "not existing letters"
|
97
|
+
puts not_existing_letters.join(" - ")
|
98
|
+
return [existing_letters, not_existing_letters, posish]
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
def iterating_run(existing_letters, not_existing_letters, posish)
|
103
|
+
answer = nil
|
104
|
+
until answer == 'y'
|
105
|
+
existing_letters, not_existing_letters, posish = ask_and_list_words(POSITIONED_LETTER_MESSAGE, EXISTING_LETTER_MESSAGE, NOT_EXISTING_MESSAGE, existing_letters, not_existing_letters, posish)
|
106
|
+
puts "have you found it ? (y/n)"
|
107
|
+
answer = gets.chomp
|
108
|
+
end
|
109
|
+
puts 'you found it!'
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Generated by juwelier
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: wordl-solver 0.1.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "wordl-solver".freeze
|
9
|
+
s.version = "0.1.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["george kosmopoulos".freeze]
|
14
|
+
s.date = "2022-03-24"
|
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
|
+
s.email = "gkosmo1@hotmail.com".freeze
|
17
|
+
s.executables = ["wordl-solver".freeze]
|
18
|
+
s.extra_rdoc_files = [
|
19
|
+
"LICENSE.txt",
|
20
|
+
"README.rdoc"
|
21
|
+
]
|
22
|
+
s.files = [
|
23
|
+
".document",
|
24
|
+
"Gemfile",
|
25
|
+
"Gemfile.lock",
|
26
|
+
"LICENSE.txt",
|
27
|
+
"README.rdoc",
|
28
|
+
"Rakefile",
|
29
|
+
"VERSION",
|
30
|
+
"bin/wordl-solver",
|
31
|
+
"lib/5_words.csv",
|
32
|
+
"lib/wordl-solver.rb",
|
33
|
+
"wordl-solver.gemspec"
|
34
|
+
]
|
35
|
+
s.homepage = "http://github.com/gkosmo/wordl-solver".freeze
|
36
|
+
s.licenses = ["MIT".freeze]
|
37
|
+
s.rubygems_version = "3.3.10".freeze
|
38
|
+
s.summary = "This gem solves wordl puzzles.".freeze
|
39
|
+
|
40
|
+
if s.respond_to? :specification_version then
|
41
|
+
s.specification_version = 4
|
42
|
+
end
|
43
|
+
|
44
|
+
if s.respond_to? :add_runtime_dependency then
|
45
|
+
s.add_development_dependency(%q<shoulda>.freeze, [">= 0"])
|
46
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
47
|
+
s.add_development_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
48
|
+
s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
|
49
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
50
|
+
else
|
51
|
+
s.add_dependency(%q<shoulda>.freeze, [">= 0"])
|
52
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
53
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
54
|
+
s.add_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
|
55
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wordl-solver
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- george kosmopoulos
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-03-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: shoulda
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rdoc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.12'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.12'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: juwelier
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.1.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: This gem helps you solve wordl puzzles. It does so by asking you for
|
84
|
+
the letters position you know, the letters you know exists and the ones you know
|
85
|
+
don't exists. It then proposes words depending on how good they are by weighting
|
86
|
+
the letters by their frequency in the english language.
|
87
|
+
email: gkosmo1@hotmail.com
|
88
|
+
executables:
|
89
|
+
- wordl-solver
|
90
|
+
extensions: []
|
91
|
+
extra_rdoc_files:
|
92
|
+
- LICENSE.txt
|
93
|
+
- README.rdoc
|
94
|
+
files:
|
95
|
+
- ".document"
|
96
|
+
- Gemfile
|
97
|
+
- Gemfile.lock
|
98
|
+
- LICENSE.txt
|
99
|
+
- README.rdoc
|
100
|
+
- Rakefile
|
101
|
+
- VERSION
|
102
|
+
- bin/wordl-solver
|
103
|
+
- lib/5_words.csv
|
104
|
+
- lib/wordl-solver.rb
|
105
|
+
- wordl-solver.gemspec
|
106
|
+
homepage: http://github.com/gkosmo/wordl-solver
|
107
|
+
licenses:
|
108
|
+
- MIT
|
109
|
+
metadata: {}
|
110
|
+
post_install_message:
|
111
|
+
rdoc_options: []
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
requirements: []
|
125
|
+
rubygems_version: 3.3.10
|
126
|
+
signing_key:
|
127
|
+
specification_version: 4
|
128
|
+
summary: This gem solves wordl puzzles.
|
129
|
+
test_files: []
|