module AtCoderFriends::Parser::Binary

detect binary problem

Public Instance Methods

exp_values(pbm) click to toggle source
# File lib/at_coder_friends/parser/binary.rb, line 26
def exp_values(pbm)
  pbm
    .samples
    .select { |smp| smp.ext == :exp }
    .map { |smp| smp.txt.chomp }
    .uniq
end
output_format(pbm) click to toggle source
# File lib/at_coder_friends/parser/binary.rb, line 34
def output_format(pbm)
  pbm.sections[Problem::SECTION_OUT_FMT]&.content || ''
end
process(pbm) click to toggle source
# File lib/at_coder_friends/parser/binary.rb, line 9
def process(pbm)
  vs = exp_values(pbm)
  return unless vs.size == 2
  return if vs.any? { |v| v.include?("\n") }
  return if vs.any? { |v| v =~ /\A[0-9\s]*\z/ }

  out_fmt = output_format(pbm)
  re1, re2 = vs.map { |v| Regexp.escape(v) }

  pbm.options.binary_values =
    if out_fmt =~ /#{re1}.+#{re2}/m
      vs
    elsif out_fmt =~ /#{re2}.+#{re1}/m
      vs.reverse
    end
end