atcoder_greedy 0.5.0 → 0.6.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/.rspec +2 -0
- data/atcoder_greedy.gemspec +1 -1
- data/lib/atcoder_greedy.rb +3 -2
- data/lib/atcoder_greedy/command/create.rb +12 -11
- data/lib/atcoder_greedy/command/submit.rb +67 -11
- data/lib/atcoder_greedy/command/test.rb +1 -0
- data/lib/atcoder_greedy/lib/contest.rb +8 -7
- data/lib/atcoder_greedy/lib/greedy_template.rb +0 -1
- data/lib/atcoder_greedy/lib/languages.rb +12 -1
- data/lib/atcoder_greedy/lib/test_case.rb +4 -2
- data/lib/atcoder_greedy/templates/hs/solve.hs +4 -0
- data/lib/atcoder_greedy/templates/py/solve.py +0 -0
- data/lib/atcoder_greedy/version.rb +1 -1
- metadata +11 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e09653f0be96028ec4cd5ee9bf3a7f32a74ed693
|
4
|
+
data.tar.gz: f8bcde8eb0d2026e27e352b735ca04952c83c990
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f823286cf447b8879613b6123314c4ddb5aaf2074dfbab2b12f6aea22b451a22f0ade78da0db34d489095b85498a5a1ace76d8c70c85f02e0dc8d3ac6d557685
|
7
|
+
data.tar.gz: fa16ae8899355334b68d08f0a2ee91fc96658078cfd589222c268963b73fbe350f2b0fd888138c95213019fbeec5b6eac69948e4e7aa1a107a4608eea44f9922
|
data/.rspec
ADDED
data/atcoder_greedy.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
|
30
30
|
spec.add_development_dependency "bundler", "~> 1.11"
|
31
31
|
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
-
spec.add_development_dependency "
|
32
|
+
spec.add_development_dependency "rspec"
|
33
33
|
|
34
34
|
spec.add_dependency 'nokogiri'
|
35
35
|
spec.add_dependency 'thor'
|
data/lib/atcoder_greedy.rb
CHANGED
@@ -18,11 +18,12 @@ module AtcoderGreedy
|
|
18
18
|
rb: '',
|
19
19
|
cpp: '',
|
20
20
|
c: '',
|
21
|
-
py: ''
|
21
|
+
py: '',
|
22
|
+
hs: ''
|
22
23
|
}
|
23
24
|
}
|
24
25
|
|
25
|
-
@valid_languages = %w(rb cpp c py)
|
26
|
+
@valid_languages = %w(rb cpp c py hs)
|
26
27
|
@valid_config_keys = @config.keys
|
27
28
|
|
28
29
|
# Configure through hash
|
@@ -11,6 +11,7 @@ module AtcoderGreedy
|
|
11
11
|
option :select_directory, aliases: '-d', default: '', desc: 'select target directory'
|
12
12
|
option :select_language, aliases: '-l', default: '', desc: 'select language'
|
13
13
|
option :select_template, aliases: '-t', default: '', desc: 'select generate template'
|
14
|
+
map 'c' => 'create'
|
14
15
|
|
15
16
|
def create(contest_url)
|
16
17
|
user_options = {
|
@@ -27,18 +28,18 @@ module AtcoderGreedy
|
|
27
28
|
|
28
29
|
contest = Contest.new(contest_url, user_options)
|
29
30
|
# TODO: contest_infoが存在したときの処理
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
info = {
|
32
|
+
name: contest.name,
|
33
|
+
date: contest.date,
|
34
|
+
url: contest.url,
|
35
|
+
task: {}
|
36
|
+
}
|
37
|
+
contest.problems.each do |p|
|
38
|
+
info[:task][:"#{p[:name]}"] = {
|
39
|
+
id: p[:task_id]
|
35
40
|
}
|
36
|
-
|
37
|
-
|
38
|
-
id: p[:task_id]
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
41
|
+
end
|
42
|
+
File.open("#{contest.dir}/.contest_info.yml", 'w') do |f|
|
42
43
|
f.puts info.to_yaml
|
43
44
|
end
|
44
45
|
end
|
@@ -2,16 +2,62 @@ require 'atcoder_greedy'
|
|
2
2
|
require 'atcoder_greedy/command'
|
3
3
|
require 'atcoder_greedy/lib/atcoder'
|
4
4
|
|
5
|
-
def get_language_id(extname)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
5
|
+
def get_language_id(extname, contest_date)
|
6
|
+
# TODO: 日付の検証
|
7
|
+
if contest_date < Date.new(2015, 3, 1)
|
8
|
+
# ABC001 ~ ABC019
|
9
|
+
case extname
|
10
|
+
when '.rb'
|
11
|
+
# Ruby (1.9.3)
|
12
|
+
9
|
13
|
+
when '.cpp'
|
14
|
+
# C++11 (GCC 4.8.1)
|
15
|
+
10
|
16
|
+
when '.c'
|
17
|
+
# C (GCC 4.6.4)
|
18
|
+
13
|
19
|
+
when '.hs'
|
20
|
+
# Haskell (GHC 7.4.1)
|
21
|
+
11
|
22
|
+
else
|
23
|
+
raise "Unknown extname: #{extname}"
|
24
|
+
end
|
25
|
+
elsif contest_date < Date.new(2016, 3, 20)
|
26
|
+
# ABC020 ~ ABC 034
|
27
|
+
case extname
|
28
|
+
when '.rb'
|
29
|
+
# Ruby (2.1.5p273)
|
30
|
+
2010
|
31
|
+
when '.cpp'
|
32
|
+
# C++11 (GCC 4.9.2)
|
33
|
+
2003
|
34
|
+
when '.c'
|
35
|
+
# C (GCC 4.9.2)
|
36
|
+
2001
|
37
|
+
when '.hs'
|
38
|
+
# Haskell (Haskell Platform 2014.2.0.0)
|
39
|
+
2033
|
40
|
+
else
|
41
|
+
raise "Unknown extname: #{extname}"
|
42
|
+
end
|
43
|
+
else
|
44
|
+
# ABC035~
|
45
|
+
case extname
|
46
|
+
when '.rb'
|
47
|
+
# Ruby (2.3.0)
|
48
|
+
3024
|
49
|
+
when '.cpp'
|
50
|
+
# C++14 (GCC 5.3.0)
|
51
|
+
3003
|
52
|
+
when '.c'
|
53
|
+
# C (GCC 5.3.0)
|
54
|
+
3002
|
55
|
+
when '.hs'
|
56
|
+
# Haskell (GHC 7.10)
|
57
|
+
3014
|
58
|
+
else
|
59
|
+
raise "Unknown extname: #{extname}"
|
60
|
+
end
|
15
61
|
end
|
16
62
|
end
|
17
63
|
|
@@ -20,6 +66,7 @@ module AtcoderGreedy
|
|
20
66
|
desc 'submit [SUBMIT_FILE]', 'submit your solution'
|
21
67
|
|
22
68
|
# TODO: 提出言語のオプション
|
69
|
+
map 's' => 'submit'
|
23
70
|
def submit(submit_file)
|
24
71
|
print "Submit [#{submit_file}] ... "
|
25
72
|
contest_info = YAML.load_file("./.contest_info.yml")
|
@@ -38,7 +85,16 @@ module AtcoderGreedy
|
|
38
85
|
p = page.form_with(action: "/submit?task_id=#{task_id}") do |f|
|
39
86
|
f.field_with(name: 'source_code').value = File.open(submit_file).read
|
40
87
|
f.field_with(name: 'task_id').value = task_id
|
41
|
-
|
88
|
+
|
89
|
+
# 日付情報が書いていなかった場合取得する
|
90
|
+
if contest_info[:date].nil?
|
91
|
+
contest_info[:date] = Date.parse(page.xpath('//time').first.text)
|
92
|
+
File.open("./.contest_info.yml", 'w') do |f|
|
93
|
+
f.puts contest_info.to_yaml
|
94
|
+
end
|
95
|
+
end
|
96
|
+
f.field_with(name: "language_id_#{task_id}").value =
|
97
|
+
get_language_id(File.extname(submit_file), contest_info[:date])
|
42
98
|
end.submit
|
43
99
|
puts 'Done!'
|
44
100
|
Launchy.open p.uri
|
@@ -5,7 +5,7 @@ require 'atcoder_greedy'
|
|
5
5
|
require 'atcoder_greedy/lib/greedy_template'
|
6
6
|
|
7
7
|
class Contest
|
8
|
-
attr_accessor :name, :url, :dir, :problems
|
8
|
+
attr_accessor :name, :url, :dir, :problems, :date
|
9
9
|
|
10
10
|
def initialize(url, **options)
|
11
11
|
if options[:language] != ''
|
@@ -36,6 +36,7 @@ class Contest
|
|
36
36
|
@name = URI.parse(@url).host.split('.').first
|
37
37
|
html = @agent.get(@url + '/assignments').content.toutf8
|
38
38
|
doc = Nokogiri::HTML.parse(html, nil, 'utf8')
|
39
|
+
@date = Date.parse(doc.xpath('//time').first.text)
|
39
40
|
|
40
41
|
all_problems = []
|
41
42
|
task_ids = []
|
@@ -91,12 +92,12 @@ class Contest
|
|
91
92
|
|
92
93
|
def create_templates(option_template)
|
93
94
|
print 'Create Templates ... '
|
94
|
-
if option_template == ''
|
95
|
-
# use
|
96
|
-
if AtcoderGreedy.config[:default_template][:"#{@language}"]
|
97
|
-
solve_template = open(AtcoderGreedy.config[:default_template][:"#{@language}"], &:read)
|
98
|
-
else
|
95
|
+
if option_template.to_s == ''
|
96
|
+
# use system default or user default template
|
97
|
+
if AtcoderGreedy.config[:default_template][:"#{@language}"].nil? || AtcoderGreedy.config[:default_template][:"#{@language}"].to_s == ''
|
99
98
|
solve_template = open(File.dirname(__dir__) + '/templates' + "/#{@language}/solve.#{@language}", &:read)
|
99
|
+
else
|
100
|
+
solve_template = open(AtcoderGreedy.config[:default_template][:"#{@language}"], &:read)
|
100
101
|
end
|
101
102
|
else
|
102
103
|
# use option_template
|
@@ -122,7 +123,7 @@ class Contest
|
|
122
123
|
|
123
124
|
def set_directories(directory)
|
124
125
|
print 'Set contest directory ... '
|
125
|
-
if directory == ''
|
126
|
+
if directory.to_s == ''
|
126
127
|
FileUtils.mkdir(@name)
|
127
128
|
@dir = "./#{@name}"
|
128
129
|
else
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Languages
|
2
|
-
ALL_LANGUAGES = %w(rb cpp c)
|
2
|
+
ALL_LANGUAGES = %w(rb cpp c hs)
|
3
3
|
def initialize(solve_file)
|
4
4
|
@solve_file = solve_file
|
5
5
|
end
|
@@ -40,6 +40,17 @@ class C < Languages
|
|
40
40
|
system "gcc #{@solve_file} -o #{problem_name}.out"
|
41
41
|
end
|
42
42
|
|
43
|
+
def execute(input_path, output_path)
|
44
|
+
system "./#{@exec_file} < #{input_path} > #{output_path}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Hs < Languages
|
49
|
+
def compile(problem_name)
|
50
|
+
@exec_file = "#{problem_name}.out"
|
51
|
+
system "ghc #{@solve_file} -o #{problem_name}.out"
|
52
|
+
end
|
53
|
+
|
43
54
|
def execute(input_path, output_path)
|
44
55
|
system "./#{@exec_file} < #{input_path} > #{output_path}"
|
45
56
|
end
|
@@ -73,9 +73,9 @@ class TestCase
|
|
73
73
|
diffs = Diff::LCS.diff(myout, correct)
|
74
74
|
if diffs.size == 0
|
75
75
|
passed += 1
|
76
|
-
puts "-------------------- Testcase ##{j} -------------------- PASSED! Time: #{sprintf("%.5f", result)}s"
|
76
|
+
puts "-------------------- Testcase ##{j + 1} -------------------- PASSED! Time: #{sprintf("%.5f", result)}s"
|
77
77
|
else
|
78
|
-
puts "-------------------- Testcase ##{j} -------------------- FAILED! Time: #{sprintf("%.5f", result)}s"
|
78
|
+
puts "-------------------- Testcase ##{j + 1} -------------------- FAILED! Time: #{sprintf("%.5f", result)}s"
|
79
79
|
puts 'Your Output:'
|
80
80
|
puts "#{myout}\n"
|
81
81
|
puts 'Correct Answer:'
|
@@ -97,6 +97,8 @@ class TestCase
|
|
97
97
|
Cpp.new(solve_file)
|
98
98
|
when '.c'
|
99
99
|
C.new(solve_file)
|
100
|
+
when '.hs'
|
101
|
+
Hs.new(solve_file)
|
100
102
|
else
|
101
103
|
raise 'Unknown Language'
|
102
104
|
end
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atcoder_greedy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- keigo-brook
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: nokogiri
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,6 +117,7 @@ extensions: []
|
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
119
|
- ".gitignore"
|
120
|
+
- ".rspec"
|
120
121
|
- ".travis.yml"
|
121
122
|
- CODE_OF_CONDUCT.md
|
122
123
|
- Gemfile
|
@@ -143,6 +144,8 @@ files:
|
|
143
144
|
- lib/atcoder_greedy/settings.yml
|
144
145
|
- lib/atcoder_greedy/templates/c/solve.c
|
145
146
|
- lib/atcoder_greedy/templates/cpp/solve.cpp
|
147
|
+
- lib/atcoder_greedy/templates/hs/solve.hs
|
148
|
+
- lib/atcoder_greedy/templates/py/solve.py
|
146
149
|
- lib/atcoder_greedy/templates/rb/solve.rb
|
147
150
|
- lib/atcoder_greedy/version.rb
|
148
151
|
homepage: https://github.com/keigo-brook/atcoder_greedy
|
@@ -166,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
169
|
version: '0'
|
167
170
|
requirements: []
|
168
171
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
172
|
+
rubygems_version: 2.5.1
|
170
173
|
signing_key:
|
171
174
|
specification_version: 4
|
172
175
|
summary: This gem is very useful atcoder plugin.
|