wordl-solver 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []