Class: OpeningTree
- Inherits:
-
Object
- Object
- OpeningTree
- Defined in:
- lib/eco_classifier/opening_tree.rb
Defined Under Namespace
Classes: Node
Constant Summary collapse
- DATA_FILE =
File.join(File.dirname(__FILE__), '../../data/scid.eco')
Instance Attribute Summary collapse
-
#root ⇒ Object
Returns the value of attribute root.
-
#size ⇒ Object
Returns the value of attribute size.
Instance Method Summary collapse
- #build_tree(openings) ⇒ Object
- #generate! ⇒ Object
- #get_opening(move_list) ⇒ Object
- #get_opening_from_pgn(pgn) ⇒ Object
-
#initialize ⇒ OpeningTree
constructor
A new instance of OpeningTree.
- #inspect ⇒ Object
- #search_for_opening(move_list) ⇒ Object
Constructor Details
#initialize ⇒ OpeningTree
Returns a new instance of OpeningTree.
40 41 42 43 |
# File 'lib/eco_classifier/opening_tree.rb', line 40 def initialize @root = Node.new @size = 0 end |
Instance Attribute Details
#root ⇒ Object
Returns the value of attribute root.
38 39 40 |
# File 'lib/eco_classifier/opening_tree.rb', line 38 def root @root end |
#size ⇒ Object
Returns the value of attribute size.
38 39 40 |
# File 'lib/eco_classifier/opening_tree.rb', line 38 def size @size end |
Instance Method Details
#build_tree(openings) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/eco_classifier/opening_tree.rb', line 45 def build_tree(openings) openings.each do |opening| current = @root moves = opening.move_list while (move = moves.shift) if !current.children[move] current.children[move] = Node.new end current = current.children[move] end current.set_opening opening @size += 1 end end |
#generate! ⇒ Object
60 61 62 63 |
# File 'lib/eco_classifier/opening_tree.rb', line 60 def generate! openings = EcoDataFileParser.new(DATA_FILE).scan_into_openings build_tree(openings) end |
#get_opening(move_list) ⇒ Object
79 80 81 |
# File 'lib/eco_classifier/opening_tree.rb', line 79 def get_opening(move_list) search_for_opening(move_list)[:opening] end |
#get_opening_from_pgn(pgn) ⇒ Object
83 84 85 |
# File 'lib/eco_classifier/opening_tree.rb', line 83 def get_opening_from_pgn(pgn) get_opening pgn.gsub(/\d+\./, '').gsub(/\*/, '').strip.split(/\s+/) end |
#inspect ⇒ Object
87 88 89 |
# File 'lib/eco_classifier/opening_tree.rb', line 87 def inspect %(<OpeningTree @size=#{@size}>) end |
#search_for_opening(move_list) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/eco_classifier/opening_tree.rb', line 65 def search_for_opening(move_list) current = @root last_opening = nil while (move = move_list.shift) break unless current.children[move] current = current.children[move] last_opening = current.opening if current.opening end { opening: last_opening, search_done: current.is_leaf? || move_list.length > 0 } end |