Module: AtCoderFriends::Parser::InputFormatConstants

Included in:
InputFormat
Defined in:
lib/at_coder_friends/parser/input_format.rb

Constant Summary collapse

SECTIONS =
[
  Problem::SECTION_IN_FMT,
  Problem::SECTION_IO_FMT
].freeze
PARSERS =
[
  {
    container: :harray,
    item: :number,
    pat: /^(?<v>[a-z]+)[01](\s+\k<v>.)*(\s+\.+)?(\s+\k<v>.)+$/i,
    names: ->(m) { [m[:v]] },
    pat2: ->(_) { nil },
    size: ->(f) { [f[-1]] }
  },
  {
    container: :harray,
    item: :char,
    pat: /^(?<v>[a-z]+)[01](\k<v>.)*(\s*\.+\s*)?(\k<v>.)+$/i,
    names: ->(m) { [m[:v]] },
    pat2: ->(_) { nil },
    size: ->(f) { [f[-1]] }
  },
  {
    container: :matrix,
    item: :number,
    pat: /^(?<v>[a-z]+)[01][01](\s+\k<v>..)*(\s+\.+)?(\s+\k<v>..)+$/i,
    names: ->(m) { [m[:v]] },
    pat2: ->(v) { /(^#{v}..(\s+#{v}..)*(\s+\.+)?(\s+#{v}..)+|\.+)$/ },
    size: ->(f) { f[-2..-1].chars.to_a }
  },
  {
    container: :matrix,
    item: :char,
    pat: /^(?<v>[a-z]+)[01][01](\k<v>..)*(\s*\.+\s*)?(\k<v>..)+$/i,
    names: ->(m) { [m[:v]] },
    pat2: ->(v) { /(^#{v}..(#{v}..)*(\s*\.+\s*)?(#{v}..)+|\.+)$/ },
    size: ->(f) { f[-2..-1].chars.to_a }
  },
  {
    container: :varray,
    item: :number,
    pat: /^[a-z]+(?<i>[0-9])(\s+[a-z]+\k<i>)*$/i,
    names: ->(m) { m[0].split.map { |w| w[0..-2] } },
    pat2: lambda { |vs|
      pat = vs.map { |v| v + '.+' }.join('\s+')
      /^(#{pat}|\.+)$/
    },
    size: ->(f) { /(?<sz>\d+)$/ =~ f ? [sz] : [f[-1]] }
  },
  {
    container: :single,
    item: :number,
    pat: /^[a-z]+(\s+[a-z]+)*$/i,
    names: ->(m) { m[0].split },
    pat2: ->(_) { nil },
    size: ->(_) { [] }
  }
].freeze