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