at_coder_friends-generator-cxx_iostream 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 047c42a92a24182e753fbbc86535f4a278c4fe9ef5a2ea5c4b70c100a0b5ed4e
4
- data.tar.gz: 419ff3d84a8b874a21882b1b3edfad0869f1dc0cd268bf00bdf497f66055f659
3
+ metadata.gz: c8300534c6fd3824766cb8b321e8a269f5fae7eba3d9322ef8f5088c98e066f8
4
+ data.tar.gz: de5e89167a6dc69e2c8c8c41d8b72812476afbf917ecc648f7b3eed0afb39912
5
5
  SHA512:
6
- metadata.gz: d05ead223a420c073bef5c5247a961cce280a7924476758692eb4e131f5f2940a52bd13ccef32b282f98eff3a22561e9a003fcc929818d8be2c182e6f36e0ad3
7
- data.tar.gz: 9d7c2c3047cc47f8651e86863998acb6df7b2b37e330162f092a88f2972c3d5ef6dbb5e55219098cab16ef8d672c33da187226890c0c0930a23d183969505493
6
+ metadata.gz: 1fa31685f559bafa72028e410789068a5f657fa4c6aa50283f4a50b6e1e34e903c510c46591cfec7af1fa186124bd3660d3e08d9d8c0a85cce2c7fd0b04ddd41
7
+ data.tar.gz: cbe1704175eccb398738d56cb93c65924a2d749c79197176ca30d60c46885d498edabe93bc3e75f4f2c0c63cb60652b337029b822b38a9e735b71a0aed1c2bf7
@@ -19,7 +19,7 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  strategy:
21
21
  matrix:
22
- ruby-version: ['2.5', '2.7']
22
+ ruby-version: ['2.7', '3.0', '3.2']
23
23
 
24
24
  steps:
25
25
  - uses: actions/checkout@v2
data/.gitignore CHANGED
@@ -12,3 +12,6 @@
12
12
 
13
13
  # rvm
14
14
  .ruby-version
15
+
16
+ # Visual Studio Code local settings
17
+ .vscode/
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.5
4
+ TargetRubyVersion: 2.7
5
5
  NewCops: enable
6
6
 
7
7
  Metrics/BlockLength:
data/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.2.0 (2023-05-12)
6
+ ### Added
7
+ - add Ruby3.2 to target version.
8
+ ### Changed
9
+ - add ACL header to template
10
+ - externalize code fragments to YAML
11
+ ### Deleted
12
+ - drop Ruby2.5 from target version.
13
+
5
14
  ## 0.1.2 (2021-12-25)
6
15
  ### Deleted
7
16
  - drop Ruby2.4 from target version.
data/Gemfile.lock CHANGED
@@ -1,29 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- at_coder_friends-generator-cxx_iostream (0.1.2)
5
- at_coder_friends (~> 0.6.8)
4
+ at_coder_friends-generator-cxx_iostream (0.2.0)
5
+ at_coder_friends (~> 0.7.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- addressable (2.8.0)
11
- public_suffix (>= 2.0.2, < 5.0)
12
- at_coder_friends (0.6.8)
10
+ addressable (2.8.4)
11
+ public_suffix (>= 2.0.2, < 6.0)
12
+ at_coder_friends (0.7.0)
13
13
  colorize (~> 0.8.1)
14
14
  launchy (>= 2.4.3)
15
15
  mechanize (~> 2.0)
16
16
  colorize (0.8.1)
17
- connection_pool (2.2.5)
17
+ connection_pool (2.4.0)
18
18
  diff-lcs (1.5.0)
19
19
  docile (1.4.0)
20
20
  domain_name (0.5.20190701)
21
21
  unf (>= 0.0.5, < 1.0.0)
22
- http-cookie (1.0.4)
22
+ http-cookie (1.0.5)
23
23
  domain_name (~> 0.5)
24
- launchy (2.5.0)
25
- addressable (~> 2.7)
26
- mechanize (2.8.3)
24
+ launchy (2.5.2)
25
+ addressable (~> 2.8)
26
+ mechanize (2.9.1)
27
27
  addressable (~> 2.8)
28
28
  domain_name (~> 0.5, >= 0.5.20190701)
29
29
  http-cookie (~> 1.0, >= 1.0.3)
@@ -36,45 +36,46 @@ GEM
36
36
  webrobots (~> 0.1.2)
37
37
  mime-types (3.4.1)
38
38
  mime-types-data (~> 3.2015)
39
- mime-types-data (3.2021.1115)
40
- mini_portile2 (2.6.1)
39
+ mime-types-data (3.2023.0218.1)
41
40
  net-http-digest_auth (1.4.1)
42
- net-http-persistent (4.0.1)
41
+ net-http-persistent (4.0.2)
43
42
  connection_pool (~> 2.2)
44
- nokogiri (1.12.5)
45
- mini_portile2 (~> 2.6.1)
43
+ nokogiri (1.14.3-arm64-darwin)
44
+ racc (~> 1.4)
45
+ nokogiri (1.14.3-x86_64-linux)
46
46
  racc (~> 1.4)
47
- public_suffix (4.0.6)
48
- racc (1.6.0)
47
+ public_suffix (5.0.1)
48
+ racc (1.6.2)
49
49
  rake (13.0.6)
50
- rspec (3.10.0)
51
- rspec-core (~> 3.10.0)
52
- rspec-expectations (~> 3.10.0)
53
- rspec-mocks (~> 3.10.0)
54
- rspec-core (3.10.1)
55
- rspec-support (~> 3.10.0)
56
- rspec-expectations (3.10.1)
50
+ rspec (3.12.0)
51
+ rspec-core (~> 3.12.0)
52
+ rspec-expectations (~> 3.12.0)
53
+ rspec-mocks (~> 3.12.0)
54
+ rspec-core (3.12.2)
55
+ rspec-support (~> 3.12.0)
56
+ rspec-expectations (3.12.3)
57
57
  diff-lcs (>= 1.2.0, < 2.0)
58
- rspec-support (~> 3.10.0)
59
- rspec-mocks (3.10.2)
58
+ rspec-support (~> 3.12.0)
59
+ rspec-mocks (3.12.5)
60
60
  diff-lcs (>= 1.2.0, < 2.0)
61
- rspec-support (~> 3.10.0)
62
- rspec-support (3.10.3)
61
+ rspec-support (~> 3.12.0)
62
+ rspec-support (3.12.0)
63
63
  rubyntlm (0.6.3)
64
- simplecov (0.21.2)
64
+ simplecov (0.22.0)
65
65
  docile (~> 1.1)
66
66
  simplecov-html (~> 0.11)
67
67
  simplecov_json_formatter (~> 0.1)
68
68
  simplecov-html (0.12.3)
69
- simplecov_json_formatter (0.1.3)
69
+ simplecov_json_formatter (0.1.4)
70
70
  unf (0.1.4)
71
71
  unf_ext
72
- unf_ext (0.0.8)
73
- webrick (1.7.0)
72
+ unf_ext (0.0.8.2)
73
+ webrick (1.8.1)
74
74
  webrobots (0.1.2)
75
75
 
76
76
  PLATFORMS
77
- ruby
77
+ arm64-darwin-20
78
+ x86_64-linux
78
79
 
79
80
  DEPENDENCIES
80
81
  at_coder_friends-generator-cxx_iostream!
@@ -84,4 +85,4 @@ DEPENDENCIES
84
85
  simplecov (~> 0.10)
85
86
 
86
87
  BUNDLED WITH
87
- 2.1.4
88
+ 2.4.12
data/README.md CHANGED
@@ -26,25 +26,27 @@ Or install it yourself as:
26
26
 
27
27
  ## Configuration
28
28
 
29
- Add ```CxxIostream``` to ```generators``` setting in ```.at_coder_friends.yml```
29
+ Add `CxxIostream` to `generators` setting in `.at_coder_friends.yml`
30
30
 
31
31
  ## Generator Options
32
32
 
33
33
  Following options are available
34
- in ```generator_settings/CxxIostream``` section of ```.at_coder_friends.yml```:
34
+ in `generator_settings/CxxIostream` section of `.at_coder_friends.yml`:
35
35
 
36
- | Option | Description | Default |
37
- |---------|-------------|---------|
38
- |default_template|Source template file path|[/templates/cxx_iostream.cxx.erb](/templates/cxx_iostream.cxx.erb)|
39
- |use_global|if set to true, stores input data in global variables|nil|
36
+ | Option | Description | Default |
37
+ | ---------- | -------------- | ------- |
38
+ | file_ext | File extension | cxx |
39
+ | template<br>(formerly default_template) | Code template file path | [cxx_iostream.cxx.erb](/templates/cxx_iostream.cxx.erb) |
40
+ | fragments | Code fragments file path | [cxx_iostream_fragments.yml](/templates/cxx_iostream_fragments.yml) |
41
+ | use_global | if set to true, stores input data in global variables | nil |
40
42
 
41
- ## ```.at_coder_friends.yml``` example
43
+ ## `.at_coder_friends.yml` example
42
44
  ```YAML
43
45
  generators:
44
46
  - CxxIoStream
45
47
  generator_settings:
46
48
  CxxIoStream:
47
- default_template: /path/to/template
49
+ template: /path/to/template
48
50
  use_global: true
49
51
  ```
50
52
 
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ['lib']
29
29
 
30
- spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
30
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
31
31
 
32
32
  spec.metadata = {
33
33
  'homepage_uri' => spec.homepage,
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  'rubygems_mfa_required' => 'true'
37
37
  }
38
38
 
39
- spec.add_dependency 'at_coder_friends', '~> 0.6.8'
39
+ spec.add_dependency 'at_coder_friends', '~> 0.7.0'
40
40
 
41
41
  spec.add_development_dependency 'bundler', '~> 2.0'
42
42
  spec.add_development_dependency 'rake', '~> 13.0'
@@ -3,7 +3,7 @@
3
3
  module AtCoderFriends
4
4
  module Generator
5
5
  module CxxIostreamConstants
6
- VERSION = '0.1.2'
6
+ VERSION = '0.2.0'
7
7
  end
8
8
  end
9
9
  end
@@ -5,255 +5,69 @@ require 'at_coder_friends/generator/cxx_iostream/version'
5
5
 
6
6
  module AtCoderFriends
7
7
  module Generator
8
- ITEM_TBL = {
9
- number: { type: 'int' },
10
- decimal: { type: 'double' },
11
- string: { type: 'string' },
12
- char: { type: 'string', reduce: true }
13
- }.tap { |h| h.default = { type: 'int' } }
8
+ # C++ variable declaration generator
9
+ class CxxIostreamDeclFragment < InputFormatFragment
10
+ attr_accessor :root_container
14
11
 
15
- # generates C++ constants
16
- module CxxIostreamConstGen
17
- def gen_const(c)
18
- v = cnv_const_value(c.value)
19
- if c.type == :max
20
- "const int #{c.name.upcase}_MAX = #{v};"
21
- else
22
- "const int MOD = #{v};"
23
- end
24
- end
25
-
26
- def cnv_const_value(v)
27
- v
28
- .sub(/\b10\^/, '1e')
29
- .sub(/\b2\^/, '1<<')
30
- .gsub(',', "'")
12
+ def generate(func)
13
+ render(func)
31
14
  end
32
- end
33
15
 
34
- # generates C++ variable declarations
35
- module CxxIostreamDeclGen
36
- CxxDecl = Struct.new(:type, :name, :initializer) do
37
- def format(fnc)
38
- case fnc
39
- when :decl
40
- "#{type} #{name};"
41
- when :alloc
42
- initializer && "#{name} = #{type}#{initializer};"
43
- when :decl_alloc
44
- "#{type} #{name}#{initializer};"
16
+ def vars
17
+ @vars ||= super.map do |var|
18
+ var.tap do |var|
19
+ var.root_container = root_container
45
20
  end
46
21
  end
47
22
  end
48
23
 
49
- def gen_decl(inpdef, fnc)
50
- decls =
51
- (inpdef.components || [inpdef])
52
- .map { |cmp| gen_plain_decl(inpdef, cmp) }
53
- decls
54
- .push(get_delim_decl(inpdef))
55
- .flatten
56
- .map { |decl| decl&.format(fnc) }
57
- .compact
58
- end
59
-
60
- def gen_plain_decl(parent, inpdef)
61
- case inpdef.container
62
- when :single
63
- gen_single_decl(inpdef)
64
- when :harray
65
- gen_harray_decl(inpdef)
66
- when :varray
67
- gen_varray_decl(inpdef)
68
- when :matrix, :vmatrix, :hmatrix
69
- gen_matrix_decl(parent, inpdef)
70
- end
71
- end
72
-
73
- def gen_single_decl(inpdef)
74
- names, cols = inpdef.vars.transpose
75
- if cols.uniq.size == 1
76
- CxxDecl.new(ITEM_TBL[cols[0]][:type], names.join(', '), nil)
77
- else
78
- inpdef.vars.map do |name, item|
79
- CxxDecl.new(ITEM_TBL[item][:type], name, nil)
24
+ def components
25
+ @components ||= super&.map do |cmp|
26
+ cmp.tap do |c|
27
+ c.root_container = container
80
28
  end
81
29
  end
82
30
  end
83
-
84
- def gen_harray_decl(inpdef)
85
- type, reduce = ITEM_TBL[inpdef.item].values_at(:type, :reduce)
86
- name = inpdef.names[0]
87
- sz = inpdef.size[0]
88
- if reduce
89
- CxxDecl.new(type, name, nil)
90
- else
91
- CxxDecl.new("vector<#{type}>", name, "(#{sz})")
92
- end
93
- end
94
-
95
- def gen_varray_decl(inpdef)
96
- sz = inpdef.size[0]
97
- inpdef.vars.map do |name, item|
98
- type = ITEM_TBL[item][:type]
99
- CxxDecl.new("vector<#{type}>", name, "(#{sz})")
100
- end
101
- end
102
-
103
- def gen_matrix_decl(parent, inpdef)
104
- sz1, sz2 = inpdef.size
105
- inpdef.vars.map do |name, item|
106
- type, reduce = ITEM_TBL[item].values_at(:type, :reduce)
107
- ctype = reduce ? "vector<#{type}>" : "vector<vector<#{type}>>"
108
- initializer = (
109
- if reduce
110
- "(#{sz1})"
111
- elsif parent.container == :varray_matrix # jagged array
112
- "(#{sz1})"
113
- else
114
- "(#{sz1}, vector<#{type}>(#{sz2}))"
115
- end
116
- )
117
- CxxDecl.new(ctype, name, initializer)
118
- end
119
- end
120
-
121
- def get_delim_decl(inpdef)
122
- return nil if inpdef.delim.empty?
123
-
124
- CxxDecl.new('char', 'delim', nil)
125
- end
126
- end
127
-
128
- # generates C++(iostream) input source
129
- module CxxIostreamInputGen
130
- INPUT_FMTS = [
131
- ['cin >> %<addr>s;', '%<v>s'],
132
- ['REP(i, %<sz1>s) cin >> %<addr>s;', '%<v>s[i]'],
133
- ['REP(i, %<sz1>s) REP(j, %<sz2>s) cin >> %<addr>s;', '%<v>s[i][j]']
134
- ].freeze
135
-
136
- INPUT_FMTS_CMB = {
137
- varray_matrix:
138
- [
139
- [
140
- <<~TEXT,
141
- REP(i, %<sz1>s) {
142
- cin >> %<addr1>s;
143
- cin >> %<addr2>s;
144
- }
145
- TEXT
146
- '%<v>s[i]',
147
- '%<v>s[i]'
148
- ],
149
- [
150
- <<~TEXT,
151
- REP(i, %<sz1>s) {
152
- cin >> %<addr1>s;
153
- %<v2>s[i].resize(%<sz2>s[i]);
154
- REP(j, %<sz2>s[i]) cin >> %<addr2>s;
155
- }
156
- TEXT
157
- '%<v>s[i]',
158
- '%<v>s[i][j]'
159
- ]
160
- ],
161
- matrix_varray:
162
- [
163
- [
164
- <<~TEXT,
165
- REP(i, %<sz1>s) {
166
- cin >> %<addr1>s;
167
- cin >> %<addr2>s;
168
- }
169
- TEXT
170
- '%<v>s[i]',
171
- '%<v>s[i]'
172
- ],
173
- [
174
- <<~TEXT,
175
- REP(i, %<sz1>s) {
176
- REP(j, %<sz2>s) cin >> %<addr1>s;
177
- cin >> %<addr2>s;
178
- }
179
- TEXT
180
- '%<v>s[i][j]',
181
- '%<v>s[i]'
182
- ]
183
- ]
184
- }.tap { |h| h.default = h[:varray_matrix] }
185
-
186
- def gen_input(inpdef)
187
- (inpdef.components ? gen_cmb_input(inpdef) : gen_plain_input(inpdef))
188
- .split("\n")
189
- end
190
-
191
- def gen_plain_input(inpdef)
192
- dim = inpdef.size.size
193
- dim -= 1 if ITEM_TBL[inpdef.item][:reduce]
194
- inp_fmt, addr_fmt = INPUT_FMTS[dim] || INPUT_FMTS[0]
195
- sz1, sz2 = inpdef.size
196
- addr = edit_addr(inpdef, addr_fmt)
197
- format(inp_fmt, sz1: sz1, sz2: sz2, addr: addr)
198
- end
199
-
200
- def gen_cmb_input(inpdef)
201
- dim = ITEM_TBL[inpdef.item][:reduce] ? 0 : 1
202
- inp_fmt, *addr_fmts = INPUT_FMTS_CMB.dig(inpdef.container, dim)
203
- sz1, sz2 = inpdef.size
204
- addr1, addr2 = inpdef.components.zip(addr_fmts).map do |cmp, addr_fmt|
205
- edit_addr(cmp, addr_fmt)
206
- end
207
- format(
208
- inp_fmt,
209
- v2: inpdef.names[-1], # jagged array name
210
- sz1: sz1,
211
- sz2: sz2.split('_')[0],
212
- addr1: addr1,
213
- addr2: addr2
214
- )
215
- end
216
-
217
- def edit_addr(inpdef, addr_fmt)
218
- sep = inpdef.delim.empty? ? ' >> ' : ' >> delim >> '
219
- inpdef.names.map { |v| format(addr_fmt, v: v) }.join(sep)
220
- end
221
31
  end
222
32
 
223
33
  # generates C++(iostream) source from problem description
224
34
  class CxxIostream < Base
225
35
  include CxxIostreamConstants
226
- include CxxIostreamConstGen
227
- include CxxIostreamDeclGen
228
- include CxxIostreamInputGen
36
+ include ConstFragmentMixin
37
+ include InputFragmentMixin
229
38
 
230
39
  ACF_HOME = File.realpath(File.join(__dir__, '..', '..', '..'))
231
40
  TMPL_DIR = File.join(ACF_HOME, 'templates')
232
- DEFAULT_TMPL = File.join(TMPL_DIR, 'cxx_iostream.cxx.erb')
233
- ATTRS = Attributes.new(:cxx, DEFAULT_TMPL)
41
+ TEMPLATE = File.join(TMPL_DIR, 'cxx_iostream.cxx.erb')
42
+ FRAGMENTS = File.join(TMPL_DIR, 'cxx_iostream_fragments.yml')
43
+ ATTRS = Attributes.new(:cxx, TEMPLATE, FRAGMENTS)
234
44
 
235
45
  def attrs
236
46
  ATTRS
237
47
  end
238
48
 
239
- def gen_consts(constants = pbm.constants)
240
- constants.map { |c| gen_const(c) }
241
- end
242
-
243
49
  def gen_global_decls(inpdefs = pbm.formats)
244
- fnc = cfg['use_global'] ? :decl : nil
50
+ return [] unless cfg['use_global']
51
+
245
52
  inpdefs
246
- .map { |inpdef| (fnc && gen_decl(inpdef, fnc)) || [] }
53
+ .map do |inpdef|
54
+ gen_decl(inpdef, :decl).split("\n")
55
+ end
247
56
  .flatten
248
- .compact
249
57
  end
250
58
 
251
59
  def gen_local_decls(inpdefs = pbm.formats)
252
60
  fnc = cfg['use_global'] ? :alloc : :decl_alloc
253
61
  inpdefs
254
- .map { |inpdef| [gen_decl(inpdef, fnc), gen_input(inpdef)] }
62
+ .map do |inpdef|
63
+ gen_decl(inpdef, fnc).split("\n") +
64
+ gen_input(inpdef).split("\n")
65
+ end
255
66
  .flatten
256
- .compact
67
+ end
68
+
69
+ def gen_decl(inpdef, func)
70
+ CxxIostreamDeclFragment.new(inpdef, fragments['declaration']).generate(func)
257
71
  end
258
72
  end
259
73
  end
@@ -1,14 +1,23 @@
1
1
  // <%= pbm.url %>
2
2
 
3
- #define _GLIBCXX_DEBUG
4
3
  #include <bits/stdc++.h>
4
+ #include <atcoder/all>
5
5
  using namespace std;
6
+ using namespace atcoder;
6
7
 
7
8
  <% if pbm.options.interactive -%>
8
9
  #define DEBUG
9
10
  <% end -%>
10
11
  #define REP(i,n) for(int i=0; i<(int)(n); i++)
11
12
  #define FOR(i,b,e) for(int i=(b); i<=(int)(e); i++)
13
+ #if ONLINE_JUDGE
14
+ #define DUMP(a)
15
+ #define DUMP2D(b)
16
+ #else
17
+ #define _GLIBCXX_DEBUG
18
+ #define DUMP(a) REP(_i, a.size()) cout << a[_i] << (_i + 1 == a.size() ? "\n" : " ")
19
+ #define DUMP2D(b) REP(_j, b.size()) DUMP(b[_j]); cout << endl
20
+ #endif
12
21
 
13
22
  <% if pbm.options.interactive -%>
14
23
  //------------------------------------------------------------------------------
@@ -0,0 +1,148 @@
1
+ constant:
2
+ value_print: <%= value.sub(/\b10\^/, '1e').sub(/\b2\^/, '1<<').gsub(',', "'") %>
3
+ max: const int <%= name.upcase %>_MAX = <%= value_print %>;
4
+ mod: const int MOD = <%= value_print %>;
5
+ declaration:
6
+ type:
7
+ __key: [item]
8
+ number: int
9
+ decimal: double
10
+ string: string
11
+ char: string
12
+ delim_block: |
13
+ <% unless delim.empty? -%>
14
+ char delim;
15
+ <% end -%>
16
+ horizontal_type: |
17
+ <%
18
+ case container
19
+ when :single
20
+ if vars.map(&:item).uniq.size == 1
21
+ %>multi<%
22
+ else
23
+ %>single<%
24
+ end
25
+ when :harray
26
+ if item == :char
27
+ %>single<%
28
+ else
29
+ %>array<%
30
+ end
31
+ when :varray
32
+ %>array<%
33
+ else # :matrix, :vmatrix, :hmatrix
34
+ if item == :char
35
+ %>array<%
36
+ elsif root_container == :varray_matrix
37
+ %>jagged_array<%
38
+ else
39
+ %>matrix<%
40
+ end
41
+ end
42
+ -%>
43
+ vertical_type: |
44
+ <%
45
+ if components
46
+ %>combi<%
47
+ else
48
+ case container
49
+ when :single
50
+ if vars.map(&:item).uniq.size == 1
51
+ %>single<%
52
+ else
53
+ %>multi<%
54
+ end
55
+ when :harray
56
+ %>single<%
57
+ else # :varray. :matrix, :vmatrix, :hmatrix
58
+ %>multi<%
59
+ end
60
+ end
61
+ -%>
62
+ decl_line:
63
+ __key: [horizontal_type]
64
+ single: <%= type %> <%= v %>;
65
+ multi: <%= type %> <%= vs.join(', ') %>;
66
+ array: vector<<%= type %>> <%= v %>;
67
+ jagged_array: vector<vector<<%= type %>>> <%= v %>;
68
+ matrix: vector<vector<<%= type %>>> <%= v %>;
69
+ decl_block:
70
+ __key: [vertical_type]
71
+ single: <%= decl_line %>
72
+ multi: |
73
+ <% vars.each do |var| -%>
74
+ <%= var.decl_line %>
75
+ <% end -%>
76
+ combi: <% components.each do |cmp| %><%= cmp.decl_block %><% end %>
77
+ decl: <%= decl_block %><%= delim_block %>
78
+ alloc_line:
79
+ __key: [horizontal_type]
80
+ single: ''
81
+ multi: ''
82
+ array: <%= v %> = vector<<%= type %>>(<%= sz %>);
83
+ jagged_array: <%= v %> = vector<vector<<%= type %>>>(<%= sz1 %>);
84
+ matrix: <%= v %> = vector<vector<<%= type %>>>(<%= sz1 %>, vector<<%= type %>>(<%= sz2 %>));
85
+ alloc:
86
+ __key: [vertical_type]
87
+ single: <%= alloc_line %>
88
+ multi: |
89
+ <% vars.each do |var| -%>
90
+ <%= var.alloc_line %>
91
+ <% end -%>
92
+ combi: <% components.each do |cmp| %><%= cmp.alloc %><% end %>
93
+ decl_alloc_line:
94
+ __key: [horizontal_type]
95
+ single: <%= type %> <%= v %>;
96
+ multi: <%= type %> <%= vs.join(', ') %>;
97
+ array: vector<<%= type %>> <%= v %>(<%= sz %>);
98
+ jagged_array: vector<vector<<%= type %>>> <%= v %>(<%= sz1 %>);
99
+ matrix: vector<vector<<%= type %>>> <%= v %>(<%= sz1 %>, vector<<%= type %>>(<%= sz2 %>));
100
+ decl_alloc_block:
101
+ __key: [vertical_type]
102
+ single: <%= decl_alloc_line %>
103
+ multi: |
104
+ <% vars.each do |var| -%>
105
+ <%= var.decl_alloc_line %>
106
+ <% end -%>
107
+ combi: <% components.each do |cmp| %><%= cmp.decl_alloc_block %><% end %>
108
+ decl_alloc: <%= decl_alloc_block %><%= delim_block %>
109
+ input:
110
+ dim_type: '<%= size.size - (item == :char ? 1 : 0) %>_dim'
111
+ item_address:
112
+ __key: [dim_type]
113
+ 0_dim: <%= v %>
114
+ 1_dim: <%= v %>[i]
115
+ 2_dim: <%= v %>[i][j]
116
+ sep: <% if delim.empty? %> >> <% else %> >> delim >> <% end %>
117
+ line_address: <%= vars.map { |var| var.item_address }.join(sep) %>
118
+ input_type: <% if components %><%= container.to_s %><% else %>plain<% end %>
119
+ sz2_body: <%= sz2.split('_')[0] %>
120
+ main:
121
+ __key: [input_type, dim_type]
122
+ plain:
123
+ 0_dim: cin >> <%= line_address %>;
124
+ 1_dim: REP(i, <%= sz1 %>) cin >> <%= line_address %>;
125
+ 2_dim: REP(i, <%= sz1 %>) REP(j, <%= sz2 %>) cin >> <%= line_address %>;
126
+ varray_matrix:
127
+ 1_dim: |
128
+ REP(i, <%= sz1 %>) {
129
+ cin >> <%= components[0].line_address %>;
130
+ cin >> <%= components[1].line_address %>;
131
+ }
132
+ 2_dim: |
133
+ REP(i, <%= sz1 %>) {
134
+ cin >> <%= components[0].line_address %>;
135
+ <%= vs[-1] %>[i].resize(<%= sz2_body %>[i]);
136
+ REP(j, <%= sz2_body %>[i]) cin >> <%= components[1].line_address %>;
137
+ }
138
+ matrix_varray:
139
+ 1_dim: |
140
+ REP(i, <%= sz1 %>) {
141
+ cin >> <%= components[0].line_address %>;
142
+ cin >> <%= components[1].line_address %>;
143
+ }
144
+ 2_dim: |
145
+ REP(i, <%= sz1 %>) {
146
+ REP(j, <%= sz2_body %>) cin >> <%= components[0].line_address %>;
147
+ cin >> <%= components[1].line_address %>;
148
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: at_coder_friends-generator-cxx_iostream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nejiko96
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-24 00:00:00.000000000 Z
11
+ date: 2023-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: at_coder_friends
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.8
19
+ version: 0.7.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.6.8
26
+ version: 0.7.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -92,7 +92,6 @@ files:
92
92
  - ".rspec"
93
93
  - ".rubocop.yml"
94
94
  - ".rubocop_todo.yml"
95
- - ".travis.yml"
96
95
  - CHANGELOG.md
97
96
  - CODE_OF_CONDUCT.md
98
97
  - Gemfile
@@ -106,6 +105,7 @@ files:
106
105
  - lib/at_coder_friends/generator/cxx_iostream.rb
107
106
  - lib/at_coder_friends/generator/cxx_iostream/version.rb
108
107
  - templates/cxx_iostream.cxx.erb
108
+ - templates/cxx_iostream_fragments.yml
109
109
  homepage: https://github.com/nejiko96/at_coder_friends-generator-cxx_iostream
110
110
  licenses:
111
111
  - MIT
@@ -122,14 +122,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
- version: 2.5.0
125
+ version: 2.7.0
126
126
  required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - ">="
129
129
  - !ruby/object:Gem::Version
130
130
  version: '0'
131
131
  requirements: []
132
- rubygems_version: 3.1.6
132
+ rubygems_version: 3.4.12
133
133
  signing_key:
134
134
  specification_version: 4
135
135
  summary: C++(iostream) generator for AtCoderFriends
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.3.8
6
- before_install: gem install bundler -v 2.1.4