class AtCoderFriends::Parser::InputFormatMatcher

holds regular expressions and matches it with input format string

Attributes

container[R]
delim[R]
gen_names[R]
gen_pat2[R]
item[R]
ix0[R]
names[R]
pat[R]
pat2[R]
size[R]

Public Class Methods

new( container: nil, item: nil, pat: nil, gen_names: nil, gen_pat2: nil ) click to toggle source
# File lib/at_coder_friends/parser/input_format.rb, line 154
def initialize(
  container: nil, item: nil,
  pat: nil, gen_names: nil, gen_pat2: nil
)
  @container = container
  @item = item
  @pat = pat
  @gen_names = gen_names
  @gen_pat2 = gen_pat2
end

Public Instance Methods

match(str) click to toggle source
# File lib/at_coder_friends/parser/input_format.rb, line 165
def match(str)
  str, dlm = extract_delim(str)
  return false unless (m1 = pat.match(str))

  @names = gen_names.call(m1)
  @pat2 = gen_pat2&.call(names)
  @size = m1.names.include?('sz') && m1['sz'] || ''
  @ix0 = m1.names.include?('ix0') && m1['ix0'] || size
  @delim = dlm
  true
end
match2(str) click to toggle source
# File lib/at_coder_friends/parser/input_format.rb, line 177
def match2(str)
  return false unless pat2

  str, _dlm = extract_delim(str)
  return true if /\A\.+\z/ =~ str
  return false unless (m2 = pat2.match(str))

  m2.names.include?('sz') && @size = m2['sz']
  true
end
to_inpdef() click to toggle source
# File lib/at_coder_friends/parser/input_format.rb, line 188
def to_inpdef
  Problem::InputFormat.new(
    container: container, item: item,
    names: normalize_names(names),
    size: normalize_size(container, size, ix0),
    delim: delim
  )
end