atcoder_greedy 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 02ce08f02c28c663958ba6d89dcac332515dce41
4
- data.tar.gz: e685ca727b9bddf4d8ba65172b2ec56e8ccd3d36
3
+ metadata.gz: d42b0f9fe076b3670cff6cdfad10dfba4616024d
4
+ data.tar.gz: ed0416f152662e1090ffb8afebe4e9132c9b6fa1
5
5
  SHA512:
6
- metadata.gz: 18d4b206ee22ea32e6d91f31d2c276d6b4f186714856b33b9a9980461eb8efa7beead044d553a1970bd97111aa645b9469dc1868dc3c2ff3a851240c5144e765
7
- data.tar.gz: dccb6400815a5ed90d6da2c5bc4140c39c1e5998d4b888bbc43b20e8ea86fb129c31bb5f22aed638eff3987284d1fdb5cd5345b00ce7769215c69c669034e1aa
6
+ metadata.gz: 5d94fb94d0aa72a7a62df97872b83ebebc080984b2876a1e5356d5a3940f4360e5b1d5ad6d21325dcc0c84e47cc13ea5d65f8828b3226f581e9b8ceaef037028
7
+ data.tar.gz: 78f2729640bcbd2ba18e9abbc9d5e006a68b81d7a0e87a2b4e9b12692cd2ca0b3e71bebf780f6da8aad4cc372b93ace0765de88c2e9b527002b81f9045c6e5fe
data/README.md CHANGED
@@ -1,22 +1,33 @@
1
1
  # AtcoderGreedy
2
- 楽にatcoderを使いたい
2
+ 楽にatcoderを使いたい.
3
+ 毎回サンプルインプットをコピペするのめんどくさくないですか?
3
4
 
4
5
  ## Installation
5
6
 
6
7
  $ gem install atcoder_greedy
7
8
 
9
+ ## 初期設定
10
+
11
+ configコマンドを使用してデフォルト言語の設定をしてください。
12
+ ```
13
+ $ atcoder_greedy config
14
+ Choose default language from: ["rb", "cpp"]
15
+ Input languages: cpp
16
+ Update Your default language to [cpp].
17
+ $
18
+ ```
19
+
8
20
  ## Usage
9
21
 
10
22
  ### テンプレートファイルの作成
11
23
  ```
12
- # create contest templates
13
24
  $ atcoder_greedy create CONTESTNAME
14
25
  ```
15
26
 
16
27
  ### テストの実行
17
28
  ```
18
29
  $ cd CONTESTNAME
19
- $ atcoder_greedy test PROBLEMNAME
30
+ $ atcoder_greedy test PROBLEM_FILE_NAME
20
31
  ```
21
32
 
22
33
  ## 使用例
@@ -52,16 +63,22 @@ $ atcoder_greedy test A.rb
52
63
  とすると、以下のようにテスト結果が表示される。
53
64
 
54
65
  ```
55
- Running a test for problem A...
56
- Testcase #0 ... PASSED! Time: 0.04137948894640431s
57
- Testcase #1 ... FAILED! Time: 0.051738745998591185s
66
+ Running a test for problem A.rb...
67
+ -------------------- Compile Done --------------------
68
+ -------------------- Testcase #0 -------------------- FAILED! Time: 0.00727s
58
69
  Your Output:
59
- 3
70
+ 5
71
+ Correct Answer:
72
+ 1
73
+
74
+ -------------------- Testcase #1 -------------------- PASSED! Time: 0.04882s
60
75
 
76
+ -------------------- Testcase #2 -------------------- FAILED! Time: 0.00614s
77
+ Your Output:
78
+ 3
61
79
  Correct Answer:
62
- 2
80
+ 1
63
81
 
64
- Testcase #2 ... PASSED! Time: 0.05054747499525547s
65
82
  Test done.
66
83
  ```
67
84
 
@@ -69,12 +86,13 @@ Test done.
69
86
  - 解答ファイルのテンプレート生成
70
87
  - サンプルインプット、アウトプットを用いたテストファイルの生成
71
88
  - テスト実行コマンド
89
+ - ruby, c++ に対応
72
90
 
73
91
 
74
92
  ## TODO,実装したい機能
75
93
  - 問題を指定してその問題のみ生成
76
94
  - 提出機能
77
- - 多言語もテンプレートから生成したい
95
+ - 言語対応の拡大
78
96
 
79
97
  ## Development
80
98
 
@@ -0,0 +1,34 @@
1
+ require 'atcoder_greedy'
2
+ require 'atcoder_greedy/command'
3
+ require 'atcoder_greedy/lib/languages'
4
+ module AtcoderGreedy
5
+ class Command < Thor
6
+ desc 'config', 'change settings'
7
+
8
+ def config
9
+ languages = Languages::ALL_LANGUAGES
10
+ config_path = Dir.home + '/.atcoder_greedy'
11
+ if Dir.exists?(config_path)
12
+ puts "Your current language is [#{AtcoderGreedy.config[:language]}]."
13
+ else
14
+ Dir.mkdir(config_path)
15
+ File.new(config_path + '/settings.yml', 'w')
16
+ end
17
+ puts "Choose default language from: #{languages}"
18
+ print "Input languages: "
19
+ loop do
20
+ s = $stdin.gets.chomp!
21
+ if languages.include?(s)
22
+ AtcoderGreedy.configure(language: s)
23
+ break
24
+ elsif s.size == 0
25
+ break
26
+ elsif puts "Invalid language. please try again:"
27
+ end
28
+ end
29
+
30
+ AtcoderGreedy.save_config
31
+ puts "Update Your default language to [#{AtcoderGreedy.config[:language]}]."
32
+ end
33
+ end
34
+ end
@@ -1,91 +1,13 @@
1
1
  require 'atcoder_greedy'
2
2
  require 'atcoder_greedy/command'
3
+ require 'atcoder_greedy/lib/contest'
3
4
 
4
5
  module AtcoderGreedy
5
6
  class Command < Thor
6
- desc 'create CONTESTNAME', 'create contest templates for CONTESTNAME'
7
+ desc 'create [CONTESTNAME]', 'create contest templates for [CONTESTNAME]'
7
8
 
8
9
  def create(contest_name)
9
10
  Contest.new(contest_name.downcase)
10
11
  end
11
12
  end
12
-
13
- TEMPLATE_PATH = File.join(File.dirname(__dir__), '/templates')
14
- SOLVE_TEMPLATE = open(TEMPLATE_PATH + '/ruby/solve.rb', &:read)
15
- PROBLEM_NAMES = %w(A B C D)
16
-
17
- class Contest
18
- attr_accessor :name, :url
19
-
20
- def initialize(name)
21
- @name = name
22
- puts "Create #{name} contest files"
23
- @base_url = create_contest_url(name)
24
- puts "Contest url is #{@base_url}"
25
- @problem_urls = create_contest_problem_urls(name)
26
- puts 'Create directories'
27
- create_directories
28
- create_templates
29
- puts 'Set up done.'
30
- end
31
-
32
- def create_contest_url(contest_name)
33
- 'http://' + contest_name + '.contest.atcoder.jp'
34
- end
35
-
36
- def create_contest_problem_urls(contest_name)
37
- urls = []
38
- if (contest_name.include?('abc') && contest_name[3..5].to_i > 19) ||
39
- (contest_name.include?('arc') && contest_name[3..5].to_i > 34)
40
- task_num = %w(a b c d)
41
- else
42
- task_num = %w(1 2 3 4)
43
- end
44
-
45
- 4.times do |i|
46
- urls.push(name: "#{PROBLEM_NAMES[i]}", path: @base_url + "/tasks/#{contest_name}_#{task_num[i]}")
47
- end
48
- urls
49
- end
50
-
51
- def create_templates
52
- @problem_urls.each_with_index do |url, pro_i|
53
- problem_dir = "./#{@name}"
54
- # urlからインプット、アウトプットパラメータをとってきてファイルにしまう
55
- charset = nil
56
- html = open(url[:path]) do |f|
57
- charset = f.charset
58
- f.read
59
- end
60
- doc = Nokogiri::HTML.parse(html, nil, charset)
61
- in_file = File.new(problem_dir + "/input_#{PROBLEM_NAMES[pro_i]}.txt", 'w')
62
-
63
- params = doc.xpath('//pre')
64
- params.shift
65
- params.each_with_index do |p, i|
66
- if i % 2 == 0
67
- in_file.puts "-- Example #{i/2}"
68
- in_file.puts "#{p.text.gsub(/\r\n?/, "\n").strip}"
69
- else
70
- in_file.puts "-- Answer #{(i-1)/2}"
71
- in_file.puts "#{p.text.gsub(/\r\n?/, "\n").strip}"
72
- end
73
- end
74
-
75
- in_file.close
76
-
77
- solve_file_content = SOLVE_TEMPLATE.clone
78
- solve_file_content.gsub!(/CONTEST/, @name.upcase)
79
- solve_file_content.gsub!(/PROBLEM/, url[:name].upcase)
80
- solve_file = File.new(problem_dir + "/#{url[:name]}.rb", 'w')
81
- solve_file.print solve_file_content
82
- solve_file.close
83
- end
84
- end
85
-
86
- def create_directories
87
- # コンテストディレクトリ作成
88
- FileUtils.mkdir(@name)
89
- end
90
- end
91
13
  end
@@ -0,0 +1,20 @@
1
+ require 'atcoder_greedy'
2
+ require 'atcoder_greedy/command'
3
+
4
+ module AtcoderGreedy
5
+ class Command < Thor
6
+ desc 'destroy [CONTESTNAME]', 'destroy contest templates for [CONTESTNAME]'
7
+
8
+ def destroy(contest_name)
9
+ puts "Destroy ./#{contest_name} [y/n]?"
10
+ s = $stdin.gets
11
+ if s == 'y' || s == 'yes'
12
+ if system("rm -r ./#{contest_name}")
13
+ puts 'deleted.'
14
+ else
15
+ raise 'Runtime Error'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,84 +1,14 @@
1
1
  require 'atcoder_greedy'
2
2
  require 'atcoder_greedy/command'
3
- require 'diff/lcs'
4
- require 'tempfile'
5
- require 'benchmark'
6
-
3
+ require 'atcoder_greedy/lib/test_case'
7
4
 
8
5
  module AtcoderGreedy
9
6
  class Command < Thor
10
- desc 'test PROBLEMNAME', 'test your solution'
7
+ desc 'test [PROBLEM_FILE_NAME]', 'test your solution'
11
8
 
12
9
  def test(problem_name)
13
- name = File.basename(problem_name, '.*')
14
- puts "Running a test for problem #{name}..."
15
- TestCase.new(name).validate
16
- puts "Test done."
17
- end
18
- end
19
-
20
- class TestCase
21
- def initialize(problem_name)
22
- @input_file = File.open("./input_#{problem_name}.txt", 'r')
23
- @exec_file = "./#{problem_name}.rb"
24
- get_in_out
25
- end
26
-
27
- def get_in_out
28
- i = 0
29
- @input = []
30
- @output = []
31
- now = nil
32
- while (t = @input_file.gets) != nil
33
- example_string = "-- Example #{i}"
34
- answer_string = "-- Answer #{i}"
35
-
36
- if t.chomp == example_string
37
- now.close(false) unless now.nil?
38
- now = Tempfile.new(['in', '.txt'], './')
39
- @input.push(now)
40
- now.open
41
- elsif t.chomp == answer_string
42
- now.close(false) unless now.nil?
43
- now = Tempfile.new(['out', '.txt'], './')
44
- @output.push(now)
45
- now.open
46
- i += 1
47
- else
48
- now.puts t
49
- end
50
- end
51
- @input[-1].close(false)
52
- @output[-1].close(false)
53
- end
54
-
55
- def validate
56
- @input.size.times do |j|
57
- myout_file = Tempfile.new(['myout', '.txt'], './')
58
- myout_file.open
59
- result = Benchmark.realtime do
60
- pid = Process.fork do
61
- exec "ruby #{@exec_file} < #{@input[j].path} > #{myout_file.path}"
62
- @input[j].close
63
- myout_file.close(false)
64
- end
65
- Process.waitpid pid
66
- end
67
-
68
- myout = myout_file.open.read
69
- myout_file.close
70
- correct = File.open("#{@output[j].path}").read
71
- diffs = Diff::LCS.diff(myout, correct)
72
- if diffs.size == 0
73
- puts "Testcase ##{j} ... PASSED! Time: #{result}s"
74
- else
75
- puts "Testcase ##{j} ... FAILED! Time: #{result}s"
76
- puts "Your Output:"
77
- puts "#{myout}\n"
78
- puts "Correct Answer:"
79
- puts "#{correct}\n"
80
- end
81
- end
10
+ TestCase.new(problem_name).validate
82
11
  end
83
12
  end
84
13
  end
14
+
@@ -1,7 +1,9 @@
1
1
  require 'atcoder_greedy'
2
2
  require 'thor'
3
3
  require 'atcoder_greedy/command/create'
4
+ require 'atcoder_greedy/command/destroy'
4
5
  require 'atcoder_greedy/command/test'
6
+ require 'atcoder_greedy/command/config'
5
7
 
6
8
  module AtcoderGreedy
7
9
  class Command < Thor
@@ -0,0 +1,79 @@
1
+ class Contest
2
+ attr_accessor :name, :url
3
+
4
+ def initialize(name)
5
+ @language = AtcoderGreedy.config[:language]
6
+ template_path = File.join(File.dirname(__dir__), '/templates')
7
+ @solve_template = open(template_path + "/#{@language}/solve.#{@language}", &:read)
8
+ @problem_names = %w(A B C D)
9
+ @name = name
10
+ puts "Create #{name} contest files"
11
+ @base_url = create_contest_url(name)
12
+ puts "Contest url is #{@base_url}"
13
+ @problem_urls = create_contest_problem_urls(name)
14
+ puts 'Create directories'
15
+ create_directories
16
+ create_templates
17
+ puts 'Set up done.'
18
+ end
19
+
20
+ def create_contest_url(contest_name)
21
+ 'http://' + contest_name + '.contest.atcoder.jp'
22
+ end
23
+
24
+ def create_contest_problem_urls(contest_name)
25
+ urls = []
26
+ if (contest_name.include?('abc') && contest_name[3..5].to_i > 19) ||
27
+ (contest_name.include?('arc') && contest_name[3..5].to_i > 34)
28
+ task_num = %w(a b c d)
29
+ else
30
+ task_num = %w(1 2 3 4)
31
+ end
32
+
33
+ 4.times do |i|
34
+ urls.push(name: "#{@problem_names[i]}", path: @base_url + "/tasks/#{contest_name}_#{task_num[i]}")
35
+ end
36
+ urls
37
+ end
38
+
39
+ def create_templates
40
+ @problem_urls.each_with_index do |url, pro_i|
41
+ problem_dir = "./#{@name}"
42
+ # urlからインプット、アウトプットパラメータをとってきてファイルにしまう
43
+ charset = nil
44
+ html = open(url[:path]) do |f|
45
+ charset = f.charset
46
+ f.read
47
+ end
48
+ doc = Nokogiri::HTML.parse(html, nil, charset)
49
+ in_file = File.new(problem_dir + "/input_#{@problem_names[pro_i]}.txt", 'w')
50
+
51
+ params = doc.xpath('//pre')
52
+ params.shift
53
+ params.each_with_index do |p, i|
54
+ if i % 2 == 0
55
+ in_file.puts "-- Example #{i/2}"
56
+ in_file.puts "#{p.text.gsub(/\r\n?/, "\n").strip}"
57
+ else
58
+ in_file.puts "-- Answer #{(i-1)/2}"
59
+ in_file.puts "#{p.text.gsub(/\r\n?/, "\n").strip}"
60
+ end
61
+ end
62
+
63
+ in_file.close
64
+
65
+ solve_file_content = @solve_template.clone
66
+ solve_file_content.gsub!(/DATE/, Time.now.strftime('%F'))
67
+ solve_file_content.gsub!(/CONTEST/, @name.upcase)
68
+ solve_file_content.gsub!(/PROBLEM/, url[:name].upcase)
69
+ solve_file = File.new(problem_dir + "/#{url[:name]}.#{@language}", 'w')
70
+ solve_file.print solve_file_content
71
+ solve_file.close
72
+ end
73
+ end
74
+
75
+ def create_directories
76
+ # コンテストディレクトリ作成
77
+ FileUtils.mkdir(@name)
78
+ end
79
+ end
@@ -0,0 +1,35 @@
1
+ class Languages
2
+ ALL_LANGUAGES = %w(rb cpp)
3
+ def initialize(solve_file)
4
+ @solve_file = solve_file
5
+ end
6
+
7
+ def compile(problem_name)
8
+ raise 'Error: Not Implemented'
9
+ end
10
+
11
+ def execute(input_path, output_path)
12
+ raise 'Error: Not Implemented'
13
+ end
14
+ end
15
+
16
+ class Rb < Languages
17
+ def compile(problem_name)
18
+ true
19
+ end
20
+
21
+ def execute(input_path, output_path)
22
+ system "ruby #{@solve_file} < #{input_path} > #{output_path}"
23
+ end
24
+ end
25
+
26
+ class Cpp < Languages
27
+ def compile(problem_name)
28
+ @exec_file = "#{problem_name}.out"
29
+ system "g++ #{@solve_file} -o #{problem_name}.out"
30
+ end
31
+
32
+ def execute(input_path, output_path)
33
+ system "./#{@exec_file} < #{input_path} > #{output_path}"
34
+ end
35
+ end
@@ -0,0 +1,99 @@
1
+ require 'diff/lcs'
2
+ require 'tempfile'
3
+ require 'benchmark'
4
+ require 'atcoder_greedy/lib/languages'
5
+ class TestCase
6
+ def initialize(problem_name)
7
+ language = File.extname(problem_name)
8
+ if language.size == 0
9
+ language = '.' + AtcoderGreedy.config[:language]
10
+ problem_name = problem_name + language
11
+ end
12
+ puts "Running a test for problem #{problem_name}..."
13
+
14
+ @problem_name = File.basename(problem_name, '.*')
15
+ @input_file = File.open("./input_#{@problem_name}.txt", 'r')
16
+ @exec_file = "./#{@problem_name}#{language}"
17
+ get_in_out
18
+ end
19
+
20
+ def get_in_out
21
+ i = 0
22
+ @input = []
23
+ @output = []
24
+ now = nil
25
+ while (t = @input_file.gets) != nil
26
+ example_string = "-- Example #{i}"
27
+ answer_string = "-- Answer #{i}"
28
+
29
+ if t.chomp == example_string
30
+ now.close(false) unless now.nil?
31
+ now = Tempfile.new(['in', '.txt'], './')
32
+ @input.push(now)
33
+ now.open
34
+ elsif t.chomp == answer_string
35
+ now.close(false) unless now.nil?
36
+ now = Tempfile.new(['out', '.txt'], './')
37
+ @output.push(now)
38
+ now.open
39
+ i += 1
40
+ else
41
+ now.puts t
42
+ end
43
+ end
44
+ @input[-1].close(false)
45
+ @output[-1].close(false)
46
+ end
47
+
48
+ def validate
49
+ my_solve = get_solve(@exec_file)
50
+ begin
51
+ if my_solve.compile(@problem_name)
52
+ puts '-------------------- Compile Done --------------------'
53
+ else
54
+ raise 'Compile Error'
55
+ end
56
+
57
+ @input.size.times do |j|
58
+ myout_file = Tempfile.new(['myout', '.txt'], './')
59
+ myout_file.open
60
+ result = Benchmark.realtime do
61
+ unless my_solve.execute(@input[j].path, myout_file.path)
62
+ raise "Runtime Error"
63
+ end
64
+ @input[j].close
65
+ myout_file.close(false)
66
+ end
67
+
68
+ myout = myout_file.open.read
69
+ myout_file.close
70
+ correct = File.open("#{@output[j].path}").read
71
+ diffs = Diff::LCS.diff(myout, correct)
72
+ if diffs.size == 0
73
+ puts "-------------------- Testcase ##{j} -------------------- PASSED! Time: #{sprintf("%.5f", result)}s"
74
+ else
75
+ puts "-------------------- Testcase ##{j} -------------------- FAILED! Time: #{sprintf("%.5f", result)}s"
76
+ puts "Your Output:"
77
+ puts "#{myout}\n"
78
+ puts "Correct Answer:"
79
+ puts "#{correct}\n"
80
+ end
81
+ end
82
+ puts "Test done."
83
+ rescue => e
84
+ puts e
85
+ end
86
+ end
87
+
88
+ # HACK: move to Languages
89
+ def get_solve(solve_file)
90
+ case File.extname(solve_file)
91
+ when '.rb'
92
+ Rb.new(solve_file)
93
+ when '.cpp'
94
+ Cpp.new(solve_file)
95
+ else
96
+ raise 'Unknown Lanugage'
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,3 @@
1
+ user_id: ''
2
+ password: ''
3
+ language: 'rb'
@@ -0,0 +1,17 @@
1
+ /*
2
+ * Generated by AtcoderGreedy on DATE
3
+ * CONTEST PROBLEM
4
+ */
5
+
6
+ #include <cstdio>
7
+
8
+ using namespace std;
9
+
10
+ void solve() {
11
+ // Your code here
12
+ }
13
+
14
+ int main(void) {
15
+ solve();
16
+ return 0;
17
+ }
@@ -0,0 +1,3 @@
1
+ # Generated by AtcoderGreedy on DATE
2
+ # CONTEST PROBLEM
3
+ # Your code here
@@ -1,3 +1,3 @@
1
1
  module AtcoderGreedy
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -1,9 +1,61 @@
1
1
  require 'open-uri'
2
2
  require 'nokogiri'
3
3
  require 'fileutils'
4
+ require 'yaml'
5
+ require 'psych'
4
6
 
5
7
  require "atcoder_greedy/version"
6
8
  require 'atcoder_greedy/command'
7
9
 
8
10
  module AtcoderGreedy
11
+ # Configuration defaults
12
+ @config = {
13
+ user_id: '',
14
+ password: '',
15
+ language: 'rb'
16
+ }
17
+
18
+ @valid_config_keys = @config.keys
19
+
20
+ # Configure through hash
21
+ def self.configure(opts = {})
22
+ opts.each { |k, v| @config[k.to_sym] = v if @valid_config_keys.include? k.to_sym }
23
+ end
24
+
25
+ # Configure through yaml file
26
+ def self.configure_with(path_to_yaml_file)
27
+ begin
28
+ config = YAML::load(IO.read(path_to_yaml_file))
29
+ rescue Errno::ENOENT
30
+ puts "YAML configuration file couldn't be found. Using defaults."; return
31
+ rescue Psych::SyntaxError
32
+ puts "YAML configuration file contains invalid syntax. Using defaults."; return
33
+ end
34
+
35
+ configure(config)
36
+ end
37
+
38
+ def self.get_config_path
39
+ config_path = Dir.home + '/.atcoder_greedy'
40
+ if Dir.exists?(config_path)
41
+ # use user settings
42
+ config_path
43
+ else
44
+ # use default settings
45
+ File.join(File.dirname(__dir__), '/lib/atcoder_greedy')
46
+ end
47
+ end
48
+
49
+ def self.config
50
+ yml_path = get_config_path + '/settings.yml'
51
+ configure_with(yml_path)
52
+ @config
53
+ end
54
+
55
+ def self.save_config
56
+ yml_path = get_config_path + '/settings.yml'
57
+ f = File.open(yml_path, 'w')
58
+ f.print(@config.to_yaml)
59
+ f.close
60
+ end
9
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atcoder_greedy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - keigo-brook
@@ -103,9 +103,16 @@ files:
103
103
  - bin/setup
104
104
  - lib/atcoder_greedy.rb
105
105
  - lib/atcoder_greedy/command.rb
106
+ - lib/atcoder_greedy/command/config.rb
106
107
  - lib/atcoder_greedy/command/create.rb
108
+ - lib/atcoder_greedy/command/destroy.rb
107
109
  - lib/atcoder_greedy/command/test.rb
108
- - lib/atcoder_greedy/templates/ruby/solve.rb
110
+ - lib/atcoder_greedy/lib/contest.rb
111
+ - lib/atcoder_greedy/lib/languages.rb
112
+ - lib/atcoder_greedy/lib/test_case.rb
113
+ - lib/atcoder_greedy/settings.yml
114
+ - lib/atcoder_greedy/templates/cpp/solve.cpp
115
+ - lib/atcoder_greedy/templates/rb/solve.rb
109
116
  - lib/atcoder_greedy/version.rb
110
117
  homepage: https://github.com/keigo-brook/atcoder_greedy
111
118
  licenses:
@@ -1,2 +0,0 @@
1
- # CONTEST PROBLEM
2
- # Your code here