guessword 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +15 -0
  2. data/bin/guessword +13 -0
  3. data/lib/guessword.rb +72 -0
  4. metadata +66 -0
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MmQ4ZTEzNTYzZDIwODNmM2RiM2MxM2EyNzhjNWU1ZmQyMGMyZjJlMw==
5
+ data.tar.gz: !binary |-
6
+ NmM4MTNhYjVhYmJkM2VkNmFiZDY1MzdjMmRlOGY1MmZhZDNlNWI0Mg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OTRmOGM0NGVhOGQ5ZWUzODAzY2UxNjI5ZTg2OGJlZGIxZjQwMzlmYmEwNGZh
10
+ YTg5YmM3ODRhOWEyMmZlMDg4ZDdjMjhhZDg5MDZmZDczNjM3ZWIxZTM1MTEw
11
+ ODBiZjVhZmU1MjllNDZhZWU4NzE0YzRmYTRiZWFiZWFmMzE2ZmU=
12
+ data.tar.gz: !binary |-
13
+ YWMyOWE0MjZkMzYwYzQ0Y2Q3MWY4ODI5MmZlZDAwYTgwNmE2MTIwNzdhOTAw
14
+ MGE3ZmI1NmM0YTA2NjNjMDhlM2YwYzg0N2MwNTgzZTJkYTVkODZiOTMyZThj
15
+ OWM3MGQwMzFlY2U1OTZhM2IyNzA4OWJiNDNjNmMwNmVkNjRhYWY=
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'guessword'
4
+ if ARGV.length < 2
5
+ puts "Usage: guess.rb pattern ABCDE... (ex. guess.rb ****Y GERMARY) "
6
+ exit
7
+ end
8
+
9
+
10
+ args = ARGV.clone
11
+ pattern_str = args.shift
12
+ letters_str = args.shift
13
+ Guessword.guess(pattern_str,letters_str)
@@ -0,0 +1,72 @@
1
+ require 'ffi/aspell'
2
+
3
+
4
+ class Guessword
5
+ # Guess words by using patter and letters.
6
+ #
7
+ # Example:
8
+ # >> Guessword.guess("****o","hell")
9
+ # or
10
+ # Using excute command
11
+ # >> guessword ****o hell
12
+ #
13
+ # output: hello
14
+ #
15
+ # Arguments:
16
+ # pattern_str: (String)
17
+ # letters_str: (String)
18
+ # Return:
19
+ # words: (Array)
20
+ #
21
+ def self.guess(pattern_str, letters_str)
22
+ speller = FFI::Aspell::Speller.new('en_US')
23
+ pattern = pattern_str.upcase.split('').to_a
24
+ length = 0
25
+ pattern_flag = false
26
+ pattern.each do |x|
27
+ if x == '*'
28
+ length = length + 1
29
+ else
30
+ pattern_flag = true
31
+ end
32
+ end
33
+ letters = letters_str.upcase.split('').to_a
34
+ size = letters.length
35
+ total = size.downto(size - length + 1).inject(1) { |r,e| r * e }
36
+
37
+ puts "Input:"
38
+ puts "Pattern = #{pattern}"
39
+ puts "Length = #{length}"
40
+ puts "Letters = #{letters.join}"
41
+ puts "Size = #{size}"
42
+ puts "Total = #{total}"
43
+ puts "Expect time: #{total * 0.007} seconds"
44
+
45
+ puts
46
+ puts "Output:"
47
+ words = []
48
+ letters.permutation(length).entries.each do |y|
49
+ if pattern_flag
50
+ aword = []
51
+ pattern.each do |x|
52
+ if x == '*'
53
+ aword.push y.shift
54
+ else
55
+ aword.push x
56
+ end
57
+ end
58
+ word = aword.join
59
+ else
60
+ word = y.join
61
+ end
62
+ if not words.include?(word) and speller.correct?(word)
63
+ puts word
64
+ words << word
65
+ end
66
+ end
67
+
68
+ puts "Total: #{words.length}/#{total}"
69
+ words
70
+ end
71
+ end
72
+
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: guessword
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chienyuan Eric Feng
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi-aspell
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.0'
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 0.0.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.0'
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.0.3
33
+ description: A simple gem for search words
34
+ email: chienyuan.feng@gmail.com
35
+ executables:
36
+ - guessword
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - bin/guessword
41
+ - lib/guessword.rb
42
+ homepage: http://rubygems.org/gems/guessword
43
+ licenses:
44
+ - MIT
45
+ metadata: {}
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project:
62
+ rubygems_version: 2.2.0
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: Guess Word!
66
+ test_files: []