Module: AtCoderFriends::Parser::Binary

Defined in:
lib/at_coder_friends/parser/binary.rb

Overview

detect binary problem

Class Method Summary collapse

Class Method Details

.exp_values(pbm) ⇒ Object



26
27
28
29
30
31
32
# 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) ⇒ Object



34
35
36
# File 'lib/at_coder_friends/parser/binary.rb', line 34

def output_format(pbm)
  pbm.sections[Problem::SECTION_OUT_FMT]&.content || ''
end

.process(pbm) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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