module AtCoderFriends::Generator::CxxBuiltinInputGen
generates C++ input source
Constants
- ADDR_FMTS
- ARRAY_ADDR_FMTS
- FMT_FMTS
- MATRIX_ADDR_FMTS
- SCANF_FMTS
- SCANF_FMTS_CMB
- SINGLE_ADDR_FMTS
Public Instance Methods
gen_cmb_input(inpdef)
click to toggle source
# File lib/at_coder_friends/generator/cxx_builtin.rb, line 191 def gen_cmb_input(inpdef) scanf = SCANF_FMTS_CMB.dig( inpdef.container, inpdef.item == :char ? 0 : 1 ) sz1 = inpdef.size[0] sz2 = inpdef.size[1].split('_')[0] fmt1, addr1, fmt2, addr2 = inpdef.components.map { |cmp| scanf_params(cmp) }.flatten format( scanf, sz1: sz1, sz2: sz2, fmt1: fmt1, addr1: addr1, fmt2: fmt2, addr2: addr2 ).split("\n") end
gen_input(inpdef)
click to toggle source
# File lib/at_coder_friends/generator/cxx_builtin.rb, line 176 def gen_input(inpdef) if inpdef.components gen_cmb_input(inpdef) else gen_plain_input(inpdef) end end
gen_plain_input(inpdef)
click to toggle source
# File lib/at_coder_friends/generator/cxx_builtin.rb, line 184 def gen_plain_input(inpdef) scanf = SCANF_FMTS[inpdef.size.size - (inpdef.item == :char ? 1 : 0)] sz1, sz2 = inpdef.size fmt, addr = scanf_params(inpdef) format(scanf, sz1: sz1, sz2: sz2, fmt: fmt, addr: addr) end
scanf_addr(inpdef)
click to toggle source
# File lib/at_coder_friends/generator/cxx_builtin.rb, line 215 def scanf_addr(inpdef) inpdef.vars.map do |(v, item)| addr_fmt = ADDR_FMTS.dig(inpdef.container, item) format(addr_fmt, v: v) end.join(', ') end
scanf_fmt(inpdef)
click to toggle source
# File lib/at_coder_friends/generator/cxx_builtin.rb, line 211 def scanf_fmt(inpdef) inpdef.vars.map { |(_v, item)| FMT_FMTS[item] }.join end
scanf_params(inpdef)
click to toggle source
# File lib/at_coder_friends/generator/cxx_builtin.rb, line 207 def scanf_params(inpdef) [scanf_fmt(inpdef), scanf_addr(inpdef)] end