at_coder_friends 0.6.8 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitattributes +1 -0
- data/.github/workflows/codeql-analysis.yml +70 -0
- data/.github/workflows/ruby.yml +38 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +8 -1
- data/CHANGELOG.md +23 -4
- data/Gemfile.lock +43 -43
- data/README.md +15 -92
- data/at_coder_friends.gemspec +4 -3
- data/lib/at_coder_friends/cli.rb +13 -28
- data/lib/at_coder_friends/config_loader.rb +2 -4
- data/lib/at_coder_friends/generator/any_builtin.rb +22 -0
- data/lib/at_coder_friends/generator/base.rb +55 -6
- data/lib/at_coder_friends/generator/c_builtin.rb +22 -0
- data/lib/at_coder_friends/generator/cxx_builtin.rb +9 -241
- data/lib/at_coder_friends/generator/fragment.rb +106 -0
- data/lib/at_coder_friends/generator/main.rb +20 -14
- data/lib/at_coder_friends/generator/ruby_builtin.rb +13 -166
- data/lib/at_coder_friends/parser/binary.rb +12 -5
- data/lib/at_coder_friends/parser/constraints.rb +8 -8
- data/lib/at_coder_friends/parser/input_format.rb +19 -15
- data/lib/at_coder_friends/parser/modulo.rb +5 -7
- data/lib/at_coder_friends/parser/section_wrapper.rb +3 -5
- data/lib/at_coder_friends/parser/sections.rb +2 -2
- data/lib/at_coder_friends/path_util.rb +1 -1
- data/lib/at_coder_friends/problem.rb +5 -5
- data/lib/at_coder_friends/scraping/agent.rb +1 -1
- data/lib/at_coder_friends/scraping/authentication.rb +3 -3
- data/lib/at_coder_friends/scraping/session.rb +1 -1
- data/lib/at_coder_friends/scraping/tasks.rb +6 -8
- data/lib/at_coder_friends/test_runner/base.rb +1 -2
- data/lib/at_coder_friends/test_runner/judge.rb +3 -3
- data/lib/at_coder_friends/version.rb +1 -1
- data/lib/at_coder_friends.rb +3 -0
- data/templates/any_builtin.md.erb +30 -0
- data/templates/any_builtin_fragments.yml +5 -0
- data/templates/c_builtin.c.erb +36 -0
- data/templates/c_builtin_fragments.yml +127 -0
- data/templates/csharp_sample.cs.erb +29 -0
- data/templates/csharp_sample_fragments.yml +159 -0
- data/templates/java_sample.java.erb +25 -0
- data/templates/java_sample_fragments.yml +98 -0
- data/templates/ruby_builtin_fragments.yml +93 -0
- metadata +26 -6
- data/.travis.yml +0 -16
- data/docs/CONFIGURATION.md +0 -421
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            // <%= pbm.url %>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            #include <stdio.h>
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            #define REP(i,n)   for(int i=0; i<(int)(n); i++)
         | 
| 6 | 
            +
            #define FOR(i,b,e) for(int i=(b); i<=(int)(e); i++)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            <% gen_consts.each do |line| -%>
         | 
| 9 | 
            +
            <%= line %>
         | 
| 10 | 
            +
            <% end -%>
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            <% gen_decls.each do |line| -%>
         | 
| 13 | 
            +
            <%= line %>
         | 
| 14 | 
            +
            <% end -%>
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            void solve() {
         | 
| 17 | 
            +
            <% if (vs = pbm.options.binary_values) -%>
         | 
| 18 | 
            +
              int cond = 0;
         | 
| 19 | 
            +
              puts(cond ? "<%= vs[0] %>" : "<%= vs[1] %>");
         | 
| 20 | 
            +
            <% else -%>
         | 
| 21 | 
            +
              int ans = 0;
         | 
| 22 | 
            +
              printf("%d\n", ans);
         | 
| 23 | 
            +
            <% end -%>
         | 
| 24 | 
            +
            }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            void input() {
         | 
| 27 | 
            +
            <% gen_inputs.each do |line| -%>
         | 
| 28 | 
            +
              <%= line %>
         | 
| 29 | 
            +
            <% end -%>
         | 
| 30 | 
            +
            }
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            int main() {
         | 
| 33 | 
            +
              input();
         | 
| 34 | 
            +
              solve();
         | 
| 35 | 
            +
              return 0;
         | 
| 36 | 
            +
            }
         | 
| @@ -0,0 +1,127 @@ | |
| 1 | 
            +
            constant:
         | 
| 2 | 
            +
              value_print: <%= value.sub(/\b10\^/, '(int)1e').sub(/\b2\^/, '1<<').gsub(',', '') %>
         | 
| 3 | 
            +
              max: '#define <%= name.upcase %>_MAX <%= value_print %>'
         | 
| 4 | 
            +
              mod: '#define MOD <%= value_print %>'
         | 
| 5 | 
            +
            cxx_constant:
         | 
| 6 | 
            +
              value_print: <%= value.sub(/\b10\^/, '1e').sub(/\b2\^/, '1<<').gsub(',', "'") %>
         | 
| 7 | 
            +
              max: const int <%= name.upcase %>_MAX = <%= value_print %>;
         | 
| 8 | 
            +
              mod: const int MOD = <%= value_print %>;
         | 
| 9 | 
            +
            declaration:
         | 
| 10 | 
            +
              type:
         | 
| 11 | 
            +
                __key: [item]
         | 
| 12 | 
            +
                number: int
         | 
| 13 | 
            +
                decimal: double
         | 
| 14 | 
            +
                string: char
         | 
| 15 | 
            +
                char: char
         | 
| 16 | 
            +
              horizontal_type: |
         | 
| 17 | 
            +
                <%
         | 
| 18 | 
            +
                  case container
         | 
| 19 | 
            +
                  when :single
         | 
| 20 | 
            +
                    items = vars.map(&:item)
         | 
| 21 | 
            +
                    if items.uniq.size == 1 && items[0] != :string
         | 
| 22 | 
            +
                      %>multi<%
         | 
| 23 | 
            +
                    else
         | 
| 24 | 
            +
                      %>single<%
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  when :harray, :varray
         | 
| 27 | 
            +
                    %>array<%
         | 
| 28 | 
            +
                  else # :matrix, :vmatrix, :hmatrix
         | 
| 29 | 
            +
                    %>matrix<%
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                -%>
         | 
| 32 | 
            +
              arr_sz1: <%= sz1.gsub(/([a-z][a-z0-9_]*)/i, '\1_MAX').upcase%>
         | 
| 33 | 
            +
              arr_sz2: <%= sz2.gsub(/([a-z][a-z0-9_]*)/i, '\1_MAX').upcase%>
         | 
| 34 | 
            +
              arr_sz: <%= arr_sz1 %>
         | 
| 35 | 
            +
              null_alloc: <% if item == :char %> + 1<% end %>
         | 
| 36 | 
            +
              string_alloc: <% if item == :string %>[<%= v.upcase %>_MAX + 1]<% end %>
         | 
| 37 | 
            +
              line:
         | 
| 38 | 
            +
                __key: [horizontal_type]
         | 
| 39 | 
            +
                single: <%= type %> <%= v %><%= string_alloc %>;
         | 
| 40 | 
            +
                multi: <%= type(vars[0].item) %> <%= vs.join(', ') %>;
         | 
| 41 | 
            +
                array: <%= type %> <%= v %>[<%= arr_sz %><%= null_alloc %>]<%= string_alloc %>;
         | 
| 42 | 
            +
                matrix: <%= type %> <%= v %>[<%= arr_sz1 %>][<%= arr_sz2 %><%= null_alloc %>]<%= string_alloc %>;
         | 
| 43 | 
            +
              vertical_type: |
         | 
| 44 | 
            +
                <%
         | 
| 45 | 
            +
                  if components
         | 
| 46 | 
            +
                    %>combi<%
         | 
| 47 | 
            +
                  else
         | 
| 48 | 
            +
                    case container
         | 
| 49 | 
            +
                      when :single
         | 
| 50 | 
            +
                        items = vars.map(&:item)
         | 
| 51 | 
            +
                        if items.uniq.size == 1 && items[0] != :string
         | 
| 52 | 
            +
                          %>single<%
         | 
| 53 | 
            +
                        else
         | 
| 54 | 
            +
                          %>multi<%
         | 
| 55 | 
            +
                        end
         | 
| 56 | 
            +
                      when :harray
         | 
| 57 | 
            +
                        %>single<%
         | 
| 58 | 
            +
                      else # :varray. :matrix, :vmatrix, :hmatrix
         | 
| 59 | 
            +
                        %>multi<%
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                -%>
         | 
| 63 | 
            +
              main:
         | 
| 64 | 
            +
                __key: [vertical_type]
         | 
| 65 | 
            +
                single: <%= line %>
         | 
| 66 | 
            +
                multi: |
         | 
| 67 | 
            +
                  <% vars.each do |var| -%>
         | 
| 68 | 
            +
                  <%= var.line %>
         | 
| 69 | 
            +
                  <% end -%>
         | 
| 70 | 
            +
                combi: <% components.each do |cmp| %><%= cmp.main %><% end %>
         | 
| 71 | 
            +
            input:
         | 
| 72 | 
            +
              item_format:
         | 
| 73 | 
            +
                __key: [item]
         | 
| 74 | 
            +
                number: '%d'
         | 
| 75 | 
            +
                decimal: '%lf'
         | 
| 76 | 
            +
                string: '%s'
         | 
| 77 | 
            +
                char: '%s'
         | 
| 78 | 
            +
              line_format: <%= vars.map { |var| var.item_format }.join %>
         | 
| 79 | 
            +
              address_type: <%= ['single', 'array', 'matrix'][size.size] %>
         | 
| 80 | 
            +
              item_address:
         | 
| 81 | 
            +
                __key: [address_type, item]
         | 
| 82 | 
            +
                single:
         | 
| 83 | 
            +
                  number: '&<%= v %>'
         | 
| 84 | 
            +
                  decimal: '&<%= v %>'
         | 
| 85 | 
            +
                  string: <%= v %>
         | 
| 86 | 
            +
                array:
         | 
| 87 | 
            +
                  number: <%= v %> + i
         | 
| 88 | 
            +
                  decimal: <%= v %> + i
         | 
| 89 | 
            +
                  string: <%= v %>[i]
         | 
| 90 | 
            +
                  char: <%= v %>
         | 
| 91 | 
            +
                matrix:
         | 
| 92 | 
            +
                  number: '&<%= v %>[i][j]'
         | 
| 93 | 
            +
                  decimal: '&<%= v %>[i][j]'
         | 
| 94 | 
            +
                  string: <%= v %>[i][j]
         | 
| 95 | 
            +
                  char: <%= v %>[i]
         | 
| 96 | 
            +
              line_address: <%= vars.map { |var| var.item_address }.join(', ') %>
         | 
| 97 | 
            +
              input_type: <% if components %><%= container.to_s %><% else %>plain<% end %>
         | 
| 98 | 
            +
              dim_type: '<%= size.size - (item == :char ? 1 : 0) %>_dim'
         | 
| 99 | 
            +
              sz2_body: <%= sz2.split('_')[0] %>
         | 
| 100 | 
            +
              main:
         | 
| 101 | 
            +
                __key: [input_type, dim_type]
         | 
| 102 | 
            +
                plain:
         | 
| 103 | 
            +
                  0_dim: scanf("<%= line_format %>", <%= line_address %>);
         | 
| 104 | 
            +
                  1_dim: REP(i, <%= sz1 %>) scanf("<%= line_format %>", <%= line_address %>);
         | 
| 105 | 
            +
                  2_dim: REP(i, <%= sz1 %>) REP(j, <%= sz2 %>) scanf("<%= line_format %>", <%= line_address %>);
         | 
| 106 | 
            +
                varray_matrix:
         | 
| 107 | 
            +
                  1_dim: |
         | 
| 108 | 
            +
                    REP(i, <%= sz1 %>) {
         | 
| 109 | 
            +
                      scanf("<%= components[0].line_format %>", <%= components[0].line_address %>);
         | 
| 110 | 
            +
                      scanf("<%= components[1].line_format %>", <%= components[1].line_address %>);
         | 
| 111 | 
            +
                    }
         | 
| 112 | 
            +
                  2_dim: |
         | 
| 113 | 
            +
                    REP(i, <%= sz1 %>) {
         | 
| 114 | 
            +
                      scanf("<%= components[0].line_format %>", <%= components[0].line_address %>);
         | 
| 115 | 
            +
                      REP(j, <%= sz2_body %>[i]) scanf("<%= components[1].line_format %>", <%= components[1].line_address %>);
         | 
| 116 | 
            +
                    }
         | 
| 117 | 
            +
                matrix_varray:
         | 
| 118 | 
            +
                  1_dim: |
         | 
| 119 | 
            +
                    REP(i, <%= sz1 %>) {
         | 
| 120 | 
            +
                      scanf("<%= components[0].line_format %>", <%= components[0].line_address %>);
         | 
| 121 | 
            +
                      scanf("<%= components[1].line_format %>", <%= components[1].line_address %>);
         | 
| 122 | 
            +
                    }
         | 
| 123 | 
            +
                  2_dim: |
         | 
| 124 | 
            +
                    REP(i, <%= sz1 %>) {
         | 
| 125 | 
            +
                      REP(j, <%= sz2_body %>) scanf("<%= components[0].line_format %>", <%= components[0].line_address %>);
         | 
| 126 | 
            +
                      scanf("<%= components[1].line_format %>", <%= components[1].line_address %>);
         | 
| 127 | 
            +
                    }
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            // <%= pbm.url %>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            using System;
         | 
| 4 | 
            +
            using System.Collections;
         | 
| 5 | 
            +
            using System.Collections.Generic;
         | 
| 6 | 
            +
            using System.Linq;
         | 
| 7 | 
            +
            using System.Text;
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            class Program
         | 
| 10 | 
            +
            {
         | 
| 11 | 
            +
                static void Main(string[] args)
         | 
| 12 | 
            +
                {
         | 
| 13 | 
            +
            <% gen_consts.each do |line| -%>
         | 
| 14 | 
            +
                    <%= line %>
         | 
| 15 | 
            +
            <% end -%>
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            <% gen_decls.each do |line| -%>
         | 
| 18 | 
            +
                    <%= line %>
         | 
| 19 | 
            +
            <% end -%>
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            <% if (vs = pbm.options.binary_values) -%>
         | 
| 22 | 
            +
                    bool cond = false;
         | 
| 23 | 
            +
                    Console.WriteLine(cond ? "<%= vs[0] %>" : "<%= vs[1] %>");
         | 
| 24 | 
            +
            <% else -%>
         | 
| 25 | 
            +
                    int ans = 0;
         | 
| 26 | 
            +
                    Console.WriteLine(ans);
         | 
| 27 | 
            +
            <% end -%>
         | 
| 28 | 
            +
                }
         | 
| 29 | 
            +
            }
         | 
| @@ -0,0 +1,159 @@ | |
| 1 | 
            +
            constant:
         | 
| 2 | 
            +
              value_print: <%= value.sub(/\b10\^/, '(int)1e').sub(/\b2\^/, '1<<').gsub(',', '_') %>
         | 
| 3 | 
            +
              max: const int <%= name.upcase %>_MAX = <%= value_print %>;
         | 
| 4 | 
            +
              mod: const int MOD = <%= value_print %>;
         | 
| 5 | 
            +
            declaration:
         | 
| 6 | 
            +
              read: Console.ReadLine()<% delims.each do |d| %>.Replace('<%= d %>', ' ')<% end %>
         | 
| 7 | 
            +
              multiplicity: |
         | 
| 8 | 
            +
                <%
         | 
| 9 | 
            +
                  case container
         | 
| 10 | 
            +
                  when :single, :varray
         | 
| 11 | 
            +
                    if vs.size > 1 && item != :char
         | 
| 12 | 
            +
                      %>multi<%
         | 
| 13 | 
            +
                    else
         | 
| 14 | 
            +
                      %>single<%
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  when :harray, :matrix
         | 
| 17 | 
            +
                    if item != :char
         | 
| 18 | 
            +
                      %>multi<%
         | 
| 19 | 
            +
                    else
         | 
| 20 | 
            +
                      %>single<%
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  else
         | 
| 23 | 
            +
                    %>multi<%
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                -%>
         | 
| 26 | 
            +
              input:
         | 
| 27 | 
            +
                __key: [item, multiplicity]
         | 
| 28 | 
            +
                number:
         | 
| 29 | 
            +
                  single: int.Parse(<%= read %>)
         | 
| 30 | 
            +
                  multi: <%= read %>.Split().Select(int.Parse).ToArray()
         | 
| 31 | 
            +
                decimal:
         | 
| 32 | 
            +
                  single: double.Parse(<%= read %>)
         | 
| 33 | 
            +
                  multi: <%= read %>.Split().Select(double.Parse).ToArray()
         | 
| 34 | 
            +
                string:
         | 
| 35 | 
            +
                  single: <%= read %>
         | 
| 36 | 
            +
                  multi: <%= read %>.Split()
         | 
| 37 | 
            +
                char:
         | 
| 38 | 
            +
                  single: <%= read %>
         | 
| 39 | 
            +
                  multi: <%= read %>.Split()
         | 
| 40 | 
            +
              decl_type: |
         | 
| 41 | 
            +
                <%
         | 
| 42 | 
            +
                  case container
         | 
| 43 | 
            +
                  when :single
         | 
| 44 | 
            +
                    if vs.size > 1 %>single_n<% else %>single_1<% end
         | 
| 45 | 
            +
                  when :varray
         | 
| 46 | 
            +
                    if vs.size > 1 %>varray_n<% else %>varray_1<% end
         | 
| 47 | 
            +
                  when :varray_matrix
         | 
| 48 | 
            +
                    if item == :char %>varray_matrix_1<% else %>varray_matrix_2<% end
         | 
| 49 | 
            +
                  else
         | 
| 50 | 
            +
                    %><%= container.to_s %><%
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                -%>
         | 
| 53 | 
            +
              type_name:
         | 
| 54 | 
            +
                __key: [item]
         | 
| 55 | 
            +
                number: int
         | 
| 56 | 
            +
                decimal: double
         | 
| 57 | 
            +
                string: string
         | 
| 58 | 
            +
                char: string
         | 
| 59 | 
            +
              dim_type: '<%= size.size - (item == :char ? 1 : 0) %>_dim'
         | 
| 60 | 
            +
              type_dim:
         | 
| 61 | 
            +
                __key: [dim_type]
         | 
| 62 | 
            +
                0_dim: ''
         | 
| 63 | 
            +
                1_dim: '[]'
         | 
| 64 | 
            +
                2_dim: '[][]'
         | 
| 65 | 
            +
              type: <%= type_name %><%= type_dim %>
         | 
| 66 | 
            +
              line_buf: <%= vs.join() %>
         | 
| 67 | 
            +
              arr_cnt: <%= vs.size - 1 %>
         | 
| 68 | 
            +
              main:
         | 
| 69 | 
            +
                __key: [decl_type]
         | 
| 70 | 
            +
                single_1: <%= type %> <%= v %> = <%= input %>;
         | 
| 71 | 
            +
                single_n: |
         | 
| 72 | 
            +
                  <%= type_name %>[] <%= line_buf %> = <%= input %>;
         | 
| 73 | 
            +
                  <% vs.each.with_index do |v, k| -%>
         | 
| 74 | 
            +
                  <%= type %> <%= v %> = <%= line_buf %>[<%= k %>];
         | 
| 75 | 
            +
                  <% end -%>
         | 
| 76 | 
            +
                harray: <%= type %> <%= v %> = <%= input %>;
         | 
| 77 | 
            +
                varray_1: <%= type %> <%= v %> = Enumerable.Range(0, <%= sz %>).Select(_ => <%= input %>).ToArray();
         | 
| 78 | 
            +
                varray_n: |
         | 
| 79 | 
            +
                  <% vs.each do |v| -%>
         | 
| 80 | 
            +
                  <%= type %> <%= v %> = new <%= type_name %>[<%= sz %>];
         | 
| 81 | 
            +
                  <% end -%>
         | 
| 82 | 
            +
                  for (int i = 0; i < <%= sz %>; i++)
         | 
| 83 | 
            +
                  {
         | 
| 84 | 
            +
                      <%= type_name %>[] <%= line_buf %> = <%= input %>;
         | 
| 85 | 
            +
                  <% vs.each.with_index do |v, k| -%>
         | 
| 86 | 
            +
                      <%= v %>[i] = <%= line_buf %>[<%= k %>];
         | 
| 87 | 
            +
                  <% end -%>
         | 
| 88 | 
            +
                  }
         | 
| 89 | 
            +
                matrix: |
         | 
| 90 | 
            +
                  <%= type %> <%= v %> = Enumerable.Range(0, <%= sz %>).Select(_ =>
         | 
| 91 | 
            +
                      <%= input %>
         | 
| 92 | 
            +
                  ).ToArray();
         | 
| 93 | 
            +
                varray_matrix_1: |
         | 
| 94 | 
            +
                  <% vs[0..-2].each do |v| -%>
         | 
| 95 | 
            +
                  <%= type_name %>[] <%= v %> = new <%= type_name %>[<%= sz %>];
         | 
| 96 | 
            +
                  <% end -%>
         | 
| 97 | 
            +
                  <%= type_name %>[] <%= vs[-1] %> = new <%= type_name %>[<%= sz %>];
         | 
| 98 | 
            +
                  for (int i = 0; i < <%= sz %>; i++)
         | 
| 99 | 
            +
                  {
         | 
| 100 | 
            +
                      <%= type_name %>[] <%= line_buf %> = <%= input %>;
         | 
| 101 | 
            +
                  <% vs[0..-2].each.with_index do |v, k| -%>
         | 
| 102 | 
            +
                      <%= v %>[i] = <%= line_buf %>[<%= k %>];
         | 
| 103 | 
            +
                  <% end -%>
         | 
| 104 | 
            +
                      <%= vs[-1] %>[i] = <%= line_buf %>.Last();
         | 
| 105 | 
            +
                  }
         | 
| 106 | 
            +
                varray_matrix_2: |
         | 
| 107 | 
            +
                  <% vs[0..-2].each do |v| -%>
         | 
| 108 | 
            +
                  <%= type_name %>[] <%= v %> = new <%= type_name %>[<%= sz %>];
         | 
| 109 | 
            +
                  <% end -%>
         | 
| 110 | 
            +
                  <%= type_name %>[][] <%= vs[-1] %> = new <%= type_name %>[<%= sz %>][];
         | 
| 111 | 
            +
                  for (int i = 0; i < <%= sz %>; i++)
         | 
| 112 | 
            +
                  {
         | 
| 113 | 
            +
                      <%= type_name %>[] <%= line_buf %> = <%= input %>;
         | 
| 114 | 
            +
                  <% vs[0..-2].each.with_index do |v, k| -%>
         | 
| 115 | 
            +
                      <%= v %>[i] = <%= line_buf %>[<%= k %>];
         | 
| 116 | 
            +
                  <% end -%>
         | 
| 117 | 
            +
                      <%= vs[-1] %>[i] = <%= line_buf %>.Skip(<%= arr_cnt %>).ToArray();
         | 
| 118 | 
            +
                  }
         | 
| 119 | 
            +
                matrix_varray: |
         | 
| 120 | 
            +
                  <%= type_name %>[][] <%= vs[0] %> = new <%= type_name %>[<%= sz %>][];
         | 
| 121 | 
            +
                  <% vs[1..].each do |v| -%>
         | 
| 122 | 
            +
                  <%= type_name %>[] <%= v %> = new <%= type_name %>[<%= sz %>];
         | 
| 123 | 
            +
                  <% end -%>
         | 
| 124 | 
            +
                  for (int i = 0; i < <%= sz %>; i++)
         | 
| 125 | 
            +
                  {
         | 
| 126 | 
            +
                      <%= type_name %>[] <%= line_buf %> = <%= input %>;
         | 
| 127 | 
            +
                      <%= vs[0] %>[i] = <%= line_buf %>.Take(<%= line_buf %>.Count - <%= arr_cnt %>).ToArray();
         | 
| 128 | 
            +
                  <% vs[1..].each.with_index do |v, k| -%>
         | 
| 129 | 
            +
                      <%= v %>[i] = <%= line_buf %>[<%= line_buf %>.Count - <%= arr_cnt.to_i - k %>];
         | 
| 130 | 
            +
                  <% end -%>
         | 
| 131 | 
            +
                  }
         | 
| 132 | 
            +
                vmatrix: |
         | 
| 133 | 
            +
                  <% vs.each do |v| -%>
         | 
| 134 | 
            +
                  <%= type %> <%= v %> = new <%= type_name %>[<%= sz1 %>][<%= sz2 %>];
         | 
| 135 | 
            +
                  <% end -%>
         | 
| 136 | 
            +
                  for (int i = 0; i < <%= sz1 %>; i++)
         | 
| 137 | 
            +
                  {
         | 
| 138 | 
            +
                      for (int j = 0; j < <%= sz2 %>; j++)
         | 
| 139 | 
            +
                      {
         | 
| 140 | 
            +
                          <%= type_name %>[] <%= line_buf %> = <%= input %>;
         | 
| 141 | 
            +
                  <% vs.each.with_index do |v, k| -%>
         | 
| 142 | 
            +
                          <%= v %>[i][j] = <%= line_buf %>[<%= k %>];
         | 
| 143 | 
            +
                  <% end -%>
         | 
| 144 | 
            +
                      }
         | 
| 145 | 
            +
                  }
         | 
| 146 | 
            +
                hmatrix: |
         | 
| 147 | 
            +
                  <% vs.each do |v| -%>
         | 
| 148 | 
            +
                  <%= type %> <%= v %> = new <%= type_name %>[<%= sz1 %>][<%= sz2 %>];
         | 
| 149 | 
            +
                  <% end -%>
         | 
| 150 | 
            +
                  for (int i = 0; i < <%= sz1 %>; i++)
         | 
| 151 | 
            +
                  {
         | 
| 152 | 
            +
                      <%= type_name %>[] <%= line_buf %> = <%= input %>;
         | 
| 153 | 
            +
                      for (int j = 0; j < <%= sz2 %>; j++)
         | 
| 154 | 
            +
                      {
         | 
| 155 | 
            +
                  <% vs.each.with_index do |v, k| -%>
         | 
| 156 | 
            +
                          <%= v %>[i][j] = <%= line_buf %>[j * <%= vs.size %> + <%= k %>];
         | 
| 157 | 
            +
                  <% end -%>
         | 
| 158 | 
            +
                      }
         | 
| 159 | 
            +
                  }
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            // <%= pbm.url %>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            import java.util.*;
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            public class Main {
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            <% gen_consts.each do |line| -%>
         | 
| 8 | 
            +
                <%= line %>
         | 
| 9 | 
            +
            <% end -%>
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                public static void main(String[] args) {
         | 
| 12 | 
            +
                    Scanner sc = new Scanner(System.in);
         | 
| 13 | 
            +
            <% gen_decls.each do |line| -%>
         | 
| 14 | 
            +
                    <%= line %>
         | 
| 15 | 
            +
            <% end -%>
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            <% if (vs = pbm.options.binary_values) -%>
         | 
| 18 | 
            +
                    boolean cond = false;
         | 
| 19 | 
            +
                    System.out.println(cond ? "<%= vs[0] %>" : "<%= vs[1] %>");
         | 
| 20 | 
            +
            <% else -%>
         | 
| 21 | 
            +
                    int ans = 0;
         | 
| 22 | 
            +
                    System.out.println(ans);
         | 
| 23 | 
            +
            <% end -%>
         | 
| 24 | 
            +
                }
         | 
| 25 | 
            +
            }
         | 
| @@ -0,0 +1,98 @@ | |
| 1 | 
            +
            constant:
         | 
| 2 | 
            +
              value_print: <%= value.sub(/\b10\^/, '(int)1e').sub(/\b2\^/, '1<<').gsub(',', '_') %>
         | 
| 3 | 
            +
              max: 'public static final int <%= name.upcase %>_MAX = <%= value_print %>;'
         | 
| 4 | 
            +
              mod: 'public static final int MOD = <%= value_print %>;'
         | 
| 5 | 
            +
            declaration:
         | 
| 6 | 
            +
              type_name:
         | 
| 7 | 
            +
                __key: [item]
         | 
| 8 | 
            +
                number: int
         | 
| 9 | 
            +
                decimal: double
         | 
| 10 | 
            +
                string: String
         | 
| 11 | 
            +
                char: char
         | 
| 12 | 
            +
              type_dim: <% if item == :char %>[]<% else %><% end %>
         | 
| 13 | 
            +
              type: <%= type_name %><%= type_dim %>
         | 
| 14 | 
            +
              read:
         | 
| 15 | 
            +
                __key: [item]
         | 
| 16 | 
            +
                number: sc.nextInt()
         | 
| 17 | 
            +
                decimal: sc.nextDouble()
         | 
| 18 | 
            +
                string: sc.next()
         | 
| 19 | 
            +
                char: sc.next().toCharArray()
         | 
| 20 | 
            +
              dim_type: '<%= size.size - (item == :char ? 1 : 0) %>_dim'
         | 
| 21 | 
            +
              decl_line:
         | 
| 22 | 
            +
                __key: [dim_type]
         | 
| 23 | 
            +
                0_dim: <%= type %> <%= v %> = <%= read %>;
         | 
| 24 | 
            +
                1_dim: <%= type %>[] <%= v %> = new <%= type_name %>[<%= sz %>]<%= type_dim %>;
         | 
| 25 | 
            +
                2_dim: <%= type %>[][] <%= v %> = new <%= type %>[<%= sz1 %>][<%= sz2 %>];
         | 
| 26 | 
            +
              jagged_array_decl: <%= type_name %>[][] <%= v %> = new <%= type_name %>[<%= sz1 %>][];
         | 
| 27 | 
            +
              input_line:
         | 
| 28 | 
            +
                __key: [dim_type]
         | 
| 29 | 
            +
                1_dim: <%= v %>[i] = <%= read %>;
         | 
| 30 | 
            +
                2_dim: <%= v %>[i][j] = <%= read %>;
         | 
| 31 | 
            +
              decl_type: <% if components %><%= container.to_s %><% else %>plain<% end %>
         | 
| 32 | 
            +
              decl_block:
         | 
| 33 | 
            +
                __key: [decl_type]
         | 
| 34 | 
            +
                plain: |
         | 
| 35 | 
            +
                  <% vars.each do |var| -%>
         | 
| 36 | 
            +
                  <%= var.decl_line %>
         | 
| 37 | 
            +
                  <% end -%>
         | 
| 38 | 
            +
                varray_matrix: |
         | 
| 39 | 
            +
                  <%= components[0].decl_block -%>
         | 
| 40 | 
            +
                  <%= components[1].jagged_array_decl %>
         | 
| 41 | 
            +
                matrix_varray: <% components.each do |cmp| %><%= cmp.decl_block %><% end %>
         | 
| 42 | 
            +
              input_type: <% if components %><%= container.to_s %><% else %>plain<% end %>
         | 
| 43 | 
            +
              input_block:
         | 
| 44 | 
            +
                __key: [input_type, dim_type]
         | 
| 45 | 
            +
                plain:
         | 
| 46 | 
            +
                  0_dim: ''
         | 
| 47 | 
            +
                  1_dim: |
         | 
| 48 | 
            +
                    for (int i = 0; i < <%= sz %>; i++) {
         | 
| 49 | 
            +
                    <% vars.each do |var| -%>
         | 
| 50 | 
            +
                        <%= var.input_line %>
         | 
| 51 | 
            +
                    <% end -%>
         | 
| 52 | 
            +
                    }
         | 
| 53 | 
            +
                  2_dim: |
         | 
| 54 | 
            +
                    for (int i = 0; i < <%= sz1 %>; i++) {
         | 
| 55 | 
            +
                        for (int j = 0; j < <%= sz2 %>; j++) {
         | 
| 56 | 
            +
                    <% vars.each do |var| -%>
         | 
| 57 | 
            +
                            <%= var.input_line %>
         | 
| 58 | 
            +
                    <% end -%>
         | 
| 59 | 
            +
                        }
         | 
| 60 | 
            +
                    }
         | 
| 61 | 
            +
                varray_matrix:
         | 
| 62 | 
            +
                  1_dim: |
         | 
| 63 | 
            +
                    for (int i = 0; i < <%= sz %>; i++) {
         | 
| 64 | 
            +
                    <% components[0].vars.each do |var| -%>
         | 
| 65 | 
            +
                        <%= var.input_line %>
         | 
| 66 | 
            +
                    <% end -%>
         | 
| 67 | 
            +
                        <%= components[1].input_line %>
         | 
| 68 | 
            +
                    }
         | 
| 69 | 
            +
                  2_dim: |
         | 
| 70 | 
            +
                    for (int i = 0; i < <%= sz1 %>; i++) {
         | 
| 71 | 
            +
                    <% components[0].vars.each do |var| -%>
         | 
| 72 | 
            +
                        <%= var.input_line %>
         | 
| 73 | 
            +
                    <% end -%>
         | 
| 74 | 
            +
                    <% components[1].tap do |cmp| -%>
         | 
| 75 | 
            +
                        <%= cmp.v %>[i] = new <%= cmp.type %>[<%= v %>[i]];
         | 
| 76 | 
            +
                    <% end -%>
         | 
| 77 | 
            +
                        for (int j = 0; j < <%= v %>[i]; j++) {
         | 
| 78 | 
            +
                            <%= components[1].input_line %>
         | 
| 79 | 
            +
                        }
         | 
| 80 | 
            +
                    }
         | 
| 81 | 
            +
                matrix_varray:
         | 
| 82 | 
            +
                  1_dim: |
         | 
| 83 | 
            +
                    for (int i = 0; i < <%= sz %>; i++) {
         | 
| 84 | 
            +
                        <%= components[0].input_line %>
         | 
| 85 | 
            +
                    <% components[1].vars.each do |var| -%>
         | 
| 86 | 
            +
                        <%= var.input_line %>
         | 
| 87 | 
            +
                    <% end -%>
         | 
| 88 | 
            +
                    }
         | 
| 89 | 
            +
                  2_dim: |
         | 
| 90 | 
            +
                    for (int i = 0; i < <%= sz1 %>; i++) {
         | 
| 91 | 
            +
                        for (int j = 0; j < <%= sz2 %>; j++) {
         | 
| 92 | 
            +
                            <%= components[0].input_line %>
         | 
| 93 | 
            +
                        }
         | 
| 94 | 
            +
                    <% components[1].vars.each do |var| -%>
         | 
| 95 | 
            +
                        <%= var.input_line %>
         | 
| 96 | 
            +
                    <% end -%>
         | 
| 97 | 
            +
                    }
         | 
| 98 | 
            +
              main: <%= decl_block %><%= input_block %>
         | 
| @@ -0,0 +1,93 @@ | |
| 1 | 
            +
            constant:
         | 
| 2 | 
            +
              value_print: <%= value.gsub('^', '**').gsub(',', '_') %>
         | 
| 3 | 
            +
              mod: MOD = <%= value_print %>
         | 
| 4 | 
            +
            declaration:
         | 
| 5 | 
            +
              read: gets<% delims.each do |d| %>.gsub('<%= d %>', ' ')<% end %>
         | 
| 6 | 
            +
              multiplicity: |
         | 
| 7 | 
            +
                <%
         | 
| 8 | 
            +
                  case container
         | 
| 9 | 
            +
                  when :single, :varray
         | 
| 10 | 
            +
                    if vs.size > 1 && item != :char
         | 
| 11 | 
            +
                      %>multi<%
         | 
| 12 | 
            +
                    else
         | 
| 13 | 
            +
                      %>single<%
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                  when :harray, :matrix
         | 
| 16 | 
            +
                    if item != :char
         | 
| 17 | 
            +
                      %>multi<%
         | 
| 18 | 
            +
                    else
         | 
| 19 | 
            +
                      %>single<%
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  else
         | 
| 22 | 
            +
                    %>multi<%
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                -%>
         | 
| 25 | 
            +
              input:
         | 
| 26 | 
            +
                __key: [item, multiplicity]
         | 
| 27 | 
            +
                number:
         | 
| 28 | 
            +
                  single: <%= read %>.to_i
         | 
| 29 | 
            +
                  multi: <%= read %>.split.map(&:to_i)
         | 
| 30 | 
            +
                decimal:
         | 
| 31 | 
            +
                  single: <%= read %>.to_f
         | 
| 32 | 
            +
                  multi: <%= read %>.split.map(&:to_f)
         | 
| 33 | 
            +
                string:
         | 
| 34 | 
            +
                  single: <%= read %>.chomp
         | 
| 35 | 
            +
                  multi: <%= read %>.chomp.split
         | 
| 36 | 
            +
                char:
         | 
| 37 | 
            +
                  single: <%= read %>.chomp
         | 
| 38 | 
            +
                  multi: <%= read %>.chomp.split
         | 
| 39 | 
            +
              decl_type: |
         | 
| 40 | 
            +
                <%
         | 
| 41 | 
            +
                  case container
         | 
| 42 | 
            +
                  when :varray
         | 
| 43 | 
            +
                    if vs.size > 1 %>varray_n<% else %>varray_1<% end
         | 
| 44 | 
            +
                  else
         | 
| 45 | 
            +
                    %><%= container.to_s %><%
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                -%>
         | 
| 48 | 
            +
              splat: <% unless item == :char %>*<% end %>
         | 
| 49 | 
            +
              main:
         | 
| 50 | 
            +
                __key: [decl_type]
         | 
| 51 | 
            +
                single: <%= vs.join(', ') %> = <%= input %>
         | 
| 52 | 
            +
                harray: <%= v %>s = <%= input %>
         | 
| 53 | 
            +
                varray_1: <%= v %>s = Array.new(<%= sz %>) { <%= input %> }
         | 
| 54 | 
            +
                varray_n: |
         | 
| 55 | 
            +
                  <% vs.each do |v| -%>
         | 
| 56 | 
            +
                  <%= v %>s = Array.new(<%= sz %>)
         | 
| 57 | 
            +
                  <% end -%>
         | 
| 58 | 
            +
                  <%= sz %>.times do |i|
         | 
| 59 | 
            +
                    <%= vs.map { |v| "#{v}s[i]" }.join(', ') %> = <%= input %>
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
                matrix: <%= v %>ss = Array.new(<%= sz %>) { <%= input %> }
         | 
| 62 | 
            +
                varray_matrix: |
         | 
| 63 | 
            +
                  <% vs[0..-2].each do |v| -%>
         | 
| 64 | 
            +
                  <%= v %>s = Array.new(<%= sz %>)
         | 
| 65 | 
            +
                  <% end -%>
         | 
| 66 | 
            +
                  <%= vs[-1] %>ss = Array.new(<%= sz %>)
         | 
| 67 | 
            +
                  <%= sz %>.times do |i|
         | 
| 68 | 
            +
                    <%= vs[0..-2].map { |v| "#{v}s[i]" }.join(', ') %>, <%= splat %><%= vs[-1] %>ss[i] = <%= input %>
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
                matrix_varray: |
         | 
| 71 | 
            +
                  <%= vs[0] %>ss = Array.new(<%= sz %>)
         | 
| 72 | 
            +
                  <% vs[1..].each do |v| -%>
         | 
| 73 | 
            +
                  <%= v %>s = Array.new(<%= sz %>)
         | 
| 74 | 
            +
                  <% end -%>
         | 
| 75 | 
            +
                  <%= sz %>.times do |i|
         | 
| 76 | 
            +
                    <%= splat %><%= vs[0] %>ss[i], <%= vs[1..].map { |v| "#{v}s[i]" }.join(', ') %> = <%= input %>
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
                vmatrix: |
         | 
| 79 | 
            +
                  <% vs.each do |v| -%>
         | 
| 80 | 
            +
                  <%= v %>ss = Array.new(<%= sz1 %>) { Array.new(<%= sz2 %>) }
         | 
| 81 | 
            +
                  <% end -%>
         | 
| 82 | 
            +
                  <%= sz1 %>.times do |i|
         | 
| 83 | 
            +
                    <%= sz2 %>.times do |j|
         | 
| 84 | 
            +
                      <%= vs.map { |v| "#{v}ss[i][j]" }.join(', ') %> = <%= input %>
         | 
| 85 | 
            +
                    end
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                hmatrix: |
         | 
| 88 | 
            +
                  <% vs.each do |v| -%>
         | 
| 89 | 
            +
                  <%= v %>ss = Array.new(<%= sz %>)
         | 
| 90 | 
            +
                  <% end -%>
         | 
| 91 | 
            +
                  <%= sz %>.times do |i|
         | 
| 92 | 
            +
                    <%= vs.map { |v| "#{v}ss[i]" }.join(', ') %> = <%= input %>.each_slice(<%= vs.size %>).to_a.transpose
         | 
| 93 | 
            +
                  end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: at_coder_friends
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.7.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - nejiko96
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2023-05-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: colorize
         | 
| @@ -101,6 +101,9 @@ dependencies: | |
| 101 101 | 
             
                - - "~>"
         | 
| 102 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 103 103 | 
             
                    version: '0.10'
         | 
| 104 | 
            +
                - - "<"
         | 
| 105 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 106 | 
            +
                    version: '0.18'
         | 
| 104 107 | 
             
              type: :development
         | 
| 105 108 | 
             
              prerelease: false
         | 
| 106 109 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -108,6 +111,9 @@ dependencies: | |
| 108 111 | 
             
                - - "~>"
         | 
| 109 112 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 113 | 
             
                    version: '0.10'
         | 
| 114 | 
            +
                - - "<"
         | 
| 115 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 116 | 
            +
                    version: '0.18'
         | 
| 111 117 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 118 | 
             
              name: webmock
         | 
| 113 119 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -135,11 +141,13 @@ executables: | |
| 135 141 | 
             
            extensions: []
         | 
| 136 142 | 
             
            extra_rdoc_files: []
         | 
| 137 143 | 
             
            files:
         | 
| 144 | 
            +
            - ".gitattributes"
         | 
| 145 | 
            +
            - ".github/workflows/codeql-analysis.yml"
         | 
| 146 | 
            +
            - ".github/workflows/ruby.yml"
         | 
| 138 147 | 
             
            - ".gitignore"
         | 
| 139 148 | 
             
            - ".rspec"
         | 
| 140 149 | 
             
            - ".rubocop.yml"
         | 
| 141 150 | 
             
            - ".rubocop_todo.yml"
         | 
| 142 | 
            -
            - ".travis.yml"
         | 
| 143 151 | 
             
            - CHANGELOG.md
         | 
| 144 152 | 
             
            - CODE_OF_CONDUCT.md
         | 
| 145 153 | 
             
            - Gemfile
         | 
| @@ -151,7 +159,6 @@ files: | |
| 151 159 | 
             
            - bin/console
         | 
| 152 160 | 
             
            - bin/setup
         | 
| 153 161 | 
             
            - config/default.yml
         | 
| 154 | 
            -
            - docs/CONFIGURATION.md
         | 
| 155 162 | 
             
            - exe/at_coder_friends
         | 
| 156 163 | 
             
            - lib/at_coder_friends.rb
         | 
| 157 164 | 
             
            - lib/at_coder_friends/cli.rb
         | 
| @@ -159,8 +166,11 @@ files: | |
| 159 166 | 
             
            - lib/at_coder_friends/context.rb
         | 
| 160 167 | 
             
            - lib/at_coder_friends/emitter.rb
         | 
| 161 168 | 
             
            - lib/at_coder_friends/errors.rb
         | 
| 169 | 
            +
            - lib/at_coder_friends/generator/any_builtin.rb
         | 
| 162 170 | 
             
            - lib/at_coder_friends/generator/base.rb
         | 
| 171 | 
            +
            - lib/at_coder_friends/generator/c_builtin.rb
         | 
| 163 172 | 
             
            - lib/at_coder_friends/generator/cxx_builtin.rb
         | 
| 173 | 
            +
            - lib/at_coder_friends/generator/fragment.rb
         | 
| 164 174 | 
             
            - lib/at_coder_friends/generator/main.rb
         | 
| 165 175 | 
             
            - lib/at_coder_friends/generator/ruby_builtin.rb
         | 
| 166 176 | 
             
            - lib/at_coder_friends/parser/binary.rb
         | 
| @@ -188,8 +198,17 @@ files: | |
| 188 198 | 
             
            - lib/at_coder_friends/test_runner/sample.rb
         | 
| 189 199 | 
             
            - lib/at_coder_friends/verifier.rb
         | 
| 190 200 | 
             
            - lib/at_coder_friends/version.rb
         | 
| 201 | 
            +
            - templates/any_builtin.md.erb
         | 
| 202 | 
            +
            - templates/any_builtin_fragments.yml
         | 
| 203 | 
            +
            - templates/c_builtin.c.erb
         | 
| 204 | 
            +
            - templates/c_builtin_fragments.yml
         | 
| 205 | 
            +
            - templates/csharp_sample.cs.erb
         | 
| 206 | 
            +
            - templates/csharp_sample_fragments.yml
         | 
| 191 207 | 
             
            - templates/cxx_builtin.cxx.erb
         | 
| 208 | 
            +
            - templates/java_sample.java.erb
         | 
| 209 | 
            +
            - templates/java_sample_fragments.yml
         | 
| 192 210 | 
             
            - templates/ruby_builtin.rb.erb
         | 
| 211 | 
            +
            - templates/ruby_builtin_fragments.yml
         | 
| 193 212 | 
             
            homepage: https://github.com/nejiko96/at_coder_friends
         | 
| 194 213 | 
             
            licenses:
         | 
| 195 214 | 
             
            - MIT
         | 
| @@ -197,6 +216,7 @@ metadata: | |
| 197 216 | 
             
              homepage_uri: https://github.com/nejiko96/at_coder_friends
         | 
| 198 217 | 
             
              source_code_uri: https://github.com/nejiko96/at_coder_friends
         | 
| 199 218 | 
             
              changelog_uri: https://github.com/nejiko96/at_coder_friends/blob/master/CHANGELOG.md
         | 
| 219 | 
            +
              rubygems_mfa_required: 'true'
         | 
| 200 220 | 
             
            post_install_message: 
         | 
| 201 221 | 
             
            rdoc_options: []
         | 
| 202 222 | 
             
            require_paths:
         | 
| @@ -205,14 +225,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 205 225 | 
             
              requirements:
         | 
| 206 226 | 
             
              - - ">="
         | 
| 207 227 | 
             
                - !ruby/object:Gem::Version
         | 
| 208 | 
            -
                  version: 2. | 
| 228 | 
            +
                  version: 2.7.0
         | 
| 209 229 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 210 230 | 
             
              requirements:
         | 
| 211 231 | 
             
              - - ">="
         | 
| 212 232 | 
             
                - !ruby/object:Gem::Version
         | 
| 213 233 | 
             
                  version: '0'
         | 
| 214 234 | 
             
            requirements: []
         | 
| 215 | 
            -
            rubygems_version: 3. | 
| 235 | 
            +
            rubygems_version: 3.4.12
         | 
| 216 236 | 
             
            signing_key: 
         | 
| 217 237 | 
             
            specification_version: 4
         | 
| 218 238 | 
             
            summary: AtCoder support tool
         |