Class: Guessword

Inherits:
Object
  • Object
show all
Defined in:
lib/guessword.rb

Class Method Summary collapse

Class Method Details

.guess(pattern_str, letters_str) ⇒ Object

Guess words by using patter and letters.

Example:

 >> Guessword.guess("****o","hell")
 or 
 Using excute command
 >> guessword ****o hell

 output: hello

Arguments:
  pattern_str: (String)
  letters_str: (String)
Return:
  words: (Array)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/guessword.rb', line 20

def self.guess(pattern_str, letters_str)
   dict = Hash.new(false)
   File.open(File.join(File.dirname(__FILE__),'wordlist.txt'),'r').each_line do |word|
     dict[word.chop.upcase] = true
   end
	pattern  =  pattern_str.upcase.split('').to_a
	length = 0
	pattern_flag = false
	pattern.each do |x|
	  if x == '*'
	    length = length + 1
	  else
	    pattern_flag = true
	  end
	end
	letters = letters_str.upcase.split('').to_a
	size = letters.length
	total = size.downto(size - length + 1).inject(1) { |r,e| r * e }
	
	puts "Input:"
	puts "Pattern = #{pattern}"
	puts "Length  = #{length}"
	puts "Letters = #{letters.join}"
	puts "Size    = #{size}"
	puts "Total   = #{total}"
	
	puts
	puts "Output:"
	words = []
	letters.permutation(length).entries.each do |y|
	    if pattern_flag
	      aword = []
	      pattern.each do |x|
	        if x == '*'
	          aword.push y.shift
	        else
	          aword.push x
	        end
	      end
	      word = aword.join
	    else
	      word = y.join
	    end
	    if not words.include?(word) and dict[word.upcase]
	      puts word
	      words << word 
	    end
	end
	
	puts "Total: #{words.length}/#{total}"
	words
end