class FEEN::Parser::Square
The square class.
@example Parse a Shogi problem board and return an array
Board.new("3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9").to_a # => [ # nil, nil, nil, "s", "k", "s", nil, nil, nil, # nil, nil, nil, nil, nil, nil, nil, nil, nil, # nil, nil, nil, nil, "+P", nil, nil, nil, nil, # nil, nil, nil, nil, nil, nil, nil, nil, nil, # nil, nil, nil, nil, nil, nil, nil, "+B", nil, # nil, nil, nil, nil, nil, nil, nil, nil, nil, # nil, nil, nil, nil, nil, nil, nil, nil, nil, # nil, nil, nil, nil, nil, nil, nil, nil, nil, # nil, nil, nil, nil, nil, nil, nil, nil, nil # ]
@example Parse a Shogi problem board and return a hash
Board.new("3,s,k,s,3/9/4,+P,4/9/7,+B,1/9/9/9/9").to_h # => { # 3 => "s", # 4 => "k", # 5 => "s", # 22 => "+P", # 43 => "+B" # }
Public Class Methods
new(board)
click to toggle source
@param board [String] The flatten board.
# File lib/feen/parser/square.rb, line 32 def initialize(board) @board = board end
Public Instance Methods
to_a()
click to toggle source
@return [Array] The list of squares on the board.
# File lib/feen/parser/square.rb, line 37 def to_a @board .split(%r{[/,]+}) .flat_map { |str| row(str) } end
to_h()
click to toggle source
@return [Hash] The index of each piece on the board.
# File lib/feen/parser/square.rb, line 44 def to_h to_a .each_with_index .inject({}) do |h, (v, i)| next h if v.nil? h.merge(i => v) end end
Private Instance Methods
row(string)
click to toggle source
# File lib/feen/parser/square.rb, line 56 def row(string) string.match?(/[0-9]+/) ? ::Array.new(Integer(string)) : string end