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 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.