atcoder_greedy 0.5.0 → 0.6.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
  SHA1:
3
- metadata.gz: 928824c14d381c4389a42fb8ae036233b3069fe0
4
- data.tar.gz: 4e3c5477494c91ed4baba3ce6be5bbdd8926b8ce
3
+ metadata.gz: e09653f0be96028ec4cd5ee9bf3a7f32a74ed693
4
+ data.tar.gz: f8bcde8eb0d2026e27e352b735ca04952c83c990
5
5
  SHA512:
6
- metadata.gz: 7f5dca1b5d28dfe2808f37b1126b12c293e9b09246a98910988dbe59c39d5714e6115a7959f93c1e8ae76dbd4f93fc47e404dc6ca249100163979d8c56976e1b
7
- data.tar.gz: 428b4d2a9e8e72be9d18f2e1679749a917d0248c5b321ec872b3835d791751fc6e042c3efadac89a5fbc88b393d2af96a4ec620a8d9c34e0f2e9b0dc9c9e703d
6
+ metadata.gz: f823286cf447b8879613b6123314c4ddb5aaf2074dfbab2b12f6aea22b451a22f0ade78da0db34d489095b85498a5a1ace76d8c70c85f02e0dc8d3ac6d557685
7
+ data.tar.gz: fa16ae8899355334b68d08f0a2ee91fc96658078cfd589222c268963b73fbe350f2b0fd888138c95213019fbeec5b6eac69948e4e7aa1a107a4608eea44f9922
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -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 "minitest", "~> 5.0"
32
+ spec.add_development_dependency "rspec"
33
33
 
34
34
  spec.add_dependency 'nokogiri'
35
35
  spec.add_dependency 'thor'
@@ -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
- File.open("#{contest.dir}/.contest_info.yml", 'w') do |f|
31
- info = {
32
- name: contest.name,
33
- url: contest.url,
34
- task: {}
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
- contest.problems.each do |p|
37
- info[:task][:"#{p[:name]}"] = {
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
- case extname
7
- when '.rb'
8
- 2010
9
- when '.cpp'
10
- 2003
11
- when '.c'
12
- 2001
13
- else
14
- raise "Unknown extname: #{extname}"
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
- f.field_with(name: "language_id_#{task_id}").value = get_language_id(File.extname(submit_file))
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
@@ -6,6 +6,7 @@ module AtcoderGreedy
6
6
  class Command < Thor
7
7
  desc 'test [PROBLEM_FILE_NAME]', 'test your solution'
8
8
 
9
+ map 't' => 'test'
9
10
  def test(problem_name)
10
11
  TestCase.new(problem_name).validate
11
12
  end
@@ -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 user default or system default template
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,4 +1,3 @@
1
- # require 'FileUtils'
2
1
  require 'atcoder_greedy'
3
2
 
4
3
  class GreedyTemplate
@@ -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
@@ -0,0 +1,4 @@
1
+ -- Your function here
2
+
3
+ main :: IO ()
4
+ main = do
File without changes
@@ -1,3 +1,3 @@
1
1
  module AtcoderGreedy
2
- VERSION = '0.5.0'
2
+ VERSION = '0.6.0'
3
3
  end
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.5.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-01-24 00:00:00.000000000 Z
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: minitest
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
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: '5.0'
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.4.5
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.