gettc 1.8.1 → 1.8.2

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: b8f0620456e7f47a3b78dac16f5340db69b2708e
4
- data.tar.gz: 9d58a132c8a69a0ead8997ba48fea763bff87d4f
3
+ metadata.gz: 248e85dd98ec679999209b8148373b71ca96b70c
4
+ data.tar.gz: e9cd8061bf69f561a8f2945f8fa47de2a48b53b0
5
5
  SHA512:
6
- metadata.gz: 5a93b2e574f63014b36b17c9d26386f36294db624833d9b88cd47549c3376b7739b0caf98698ba948bc2ab79bcfb10bef6babb8a715aaaf4150fe66b4603bec9
7
- data.tar.gz: 6d2316fc246ac269ead57fa88448f3a8a8a1013cef1bb9c5c033ced8c414507859f136d55a1ad56c66b7825f0f7a767ad831cf6cf6fc3c1b10c174ed804e5e64
6
+ metadata.gz: 97383359ec7189209c3d88be0de62d2ba73106e6abdb75eb164d3d17a4b68e020eccdb2d7e9c800fe57bc5f51f4e533482cf550da59dfaa219c448da3a97fe4d
7
+ data.tar.gz: 134603c5baca851d3248b55a16014625ce74c52569187adb383c589d5f762e5d7484aaf091c3a2156355a8136944f3b1d56aea950a53af6d292905cc93dc69fe
data/core/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gettc
2
- VERSION = "1.8.1"
2
+ VERSION = "1.8.2"
3
3
  end
data/dist/config.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  username: gettc
2
2
  password: algorithm
3
- version: 1.8.1
3
+ version: 1.8.2
@@ -1,178 +1,184 @@
1
- require "fileutils"
2
- require "logger"
3
-
4
- class SysUtil
5
- def self.with_dir dir
6
- saved = FileUtils.pwd
7
- FileUtils.chdir dir
8
- yield
9
- FileUtils.chdir saved
10
- end
11
- end
12
-
13
- class StopWatch
14
- def self.measure
15
- before = Time.now
16
- yield
17
- after = Time.now
18
- return ((after - before) * 1000).round
19
- end
20
- end
21
-
22
- class GettcRunner
23
- def initialize mode, solver, data_d, output_d
24
- @verbose = (mode == "verbose")
25
- @solver = solver
26
- @data_d = data_d
27
- @output_d = output_d
28
-
29
- @dir = File.dirname __FILE__
30
-
31
- FileUtils.mkdir_p @output_d
32
-
33
- @log = Logger.new STDOUT
34
- @log.formatter = proc do |severity, datetime, progname, message|
35
- message
36
- end
37
- @log.level = Logger::INFO
38
- if @verbose
39
- @log.level = Logger::DEBUG
40
- end
41
- end
42
-
43
- def compile_checker
44
- puts "[gettc] Compile checker"
45
- @checker = File.join @dir, "../build/check"
46
- unless File.exists? @checker
47
- checker_src = File.join @dir, "../util/check"
48
- SysUtil::with_dir checker_src do
49
- system "make"
50
- end
51
- end
52
- end
53
-
54
- def populate_filenames n
55
- input = File.join @data_d, "#{n}.in"
56
- expected = File.join @data_d, "#{n}.out"
57
- received = File.join @output_d, "#{n}.out"
58
- return input, expected, received
59
- end
60
-
61
- def print_file_content label, filename
62
- print " #{label}: <"
63
- print File.read(filename)
64
- puts ">"
65
- end
66
-
67
- def print_case n
68
- input, expected, received = populate_filenames n
69
- print_file_content "Input", input
70
- print_file_content "Expected", expected
71
- print_file_content "Received", received
72
- end
73
-
74
- def run_case n
75
- input, expected, received = populate_filenames n
76
-
77
- @log.debug "Case #{n} ... "
78
- ret = true
79
-
80
- elapsed = StopWatch::measure do
81
- ret = system "#{@solver} #{input} #{received}"
82
- end
83
- @elapsed << elapsed
84
- @log.debug "#{elapsed}ms "
85
-
86
- if ret != true
87
- @errors << n
88
- @log.debug "Error (cannot execute solver)\n"
89
- else
90
- ret = system "#{@checker} #{expected} #{received}"
91
- if ret != true
92
- @errors << n
93
- @log.debug "Error (cannot execute checker)\n"
94
- else
95
- ret = $?.exitstatus
96
- case ret
97
- when 0
98
- @log.debug "Passed\n"
99
- when 1
100
- @log.debug "Failed\n"
101
- @failures << n
102
- print_case n if @verbose
103
- when 2
104
- @log.debug "Error (checker reported error)\n"
105
- @errors << n
106
- end
107
- end
108
- end
109
- end
110
-
111
- def run_all_cases
112
- puts "[gettc] Run test cases"
113
-
114
- inputs = Dir.glob "#{@data_d}/*.in"
115
-
116
- @total = inputs.size
117
- @elapsed = Array.new
118
- @failures = Array.new
119
- @errors = Array.new
120
-
121
- @total.times do |n|
122
- run_case n
123
- end
124
- end
125
-
126
- def print_array label, arr
127
- if arr.size > 0
128
- print "#{label}: "
129
- puts arr.join(", ")
130
- end
131
- end
132
-
133
- def summarize
134
- puts "[gettc] Summary"
135
- puts "#{@total} cases checked, #{@failures.size} failures, #{@errors.size} errors"
136
- print_array "Failures", @failures
137
- print_array "Errors", @errors
138
-
139
- if @total > 0
140
- sum = @elapsed.inject 0, :+
141
- avg = sum / @elapsed.size
142
- puts " Total time taken: #{sum} ms"
143
- puts " Average time taken: #{avg} ms"
144
-
145
- i, j = 0, 0
146
- @elapsed.size.times do |k|
147
- if @elapsed[k] > j
148
- i, j = k, @elapsed[k]
149
- end
150
- end
151
- puts " Slowest running case: #{j} ms (case #{i})"
152
- end
153
- end
154
-
155
- def print_failures
156
- if @failures.empty? || @verbose
157
- return
158
- end
159
- puts "Here are a few failed case for your debugging purposes"
160
-
161
- n = [5, @failures.size].min
162
- n.times do |i|
163
- j = @failures[i]
164
- puts "Case #{j}:"
165
- print_case j
166
- end
167
- end
168
-
169
- def run
170
- compile_checker
171
- run_all_cases
172
- print_failures
173
- summarize
174
- end
175
- end
176
-
177
- runner = GettcRunner.new ARGV[0], ARGV[1], ARGV[2], ARGV[3]
178
- runner.run
1
+ require "fileutils"
2
+ require "logger"
3
+ require "pathname"
4
+
5
+ class SysUtil
6
+ def self.with_dir dir
7
+ saved = FileUtils.pwd
8
+ FileUtils.chdir dir
9
+ yield
10
+ FileUtils.chdir saved
11
+ end
12
+ end
13
+
14
+ class StopWatch
15
+ def self.measure
16
+ before = Time.now
17
+ yield
18
+ after = Time.now
19
+ return ((after - before) * 1000).round
20
+ end
21
+ end
22
+
23
+ class GettcRunner
24
+ def initialize mode, solver, data_d, output_d
25
+ @verbose = (mode == "verbose")
26
+ @solver = solver
27
+ @data_d = data_d
28
+ @output_d = output_d
29
+
30
+ @dir = File.dirname __FILE__
31
+
32
+ FileUtils.mkdir_p @output_d
33
+
34
+ @log = Logger.new STDOUT
35
+ @log.formatter = proc do |severity, datetime, progname, message|
36
+ message
37
+ end
38
+ @log.level = Logger::INFO
39
+ if @verbose
40
+ @log.level = Logger::DEBUG
41
+ end
42
+ end
43
+
44
+ def compile_checker
45
+ puts "[gettc] Compile checker"
46
+ @checker = File.join @dir, "../build/check"
47
+ unless File.exists? @checker
48
+ checker_src = File.join @dir, "../util/check"
49
+ SysUtil::with_dir checker_src do
50
+ system "make"
51
+ end
52
+ end
53
+ end
54
+
55
+ def populate_filenames n
56
+ input = File.join @data_d, "#{n}.in"
57
+ expected = File.join @data_d, "#{n}.out"
58
+ received = File.join @output_d, "#{n}.out"
59
+ return input, expected, received
60
+ end
61
+
62
+ def print_file_content label, filename
63
+ print " #{label}: <"
64
+ print File.read(filename)
65
+ puts ">"
66
+ end
67
+
68
+ def print_case n
69
+ input, expected, received = populate_filenames n
70
+ print_file_content "Input", input
71
+ print_file_content "Expected", expected
72
+ print_file_content "Received", received
73
+ end
74
+
75
+ def run_case n
76
+ input, expected, received = populate_filenames n
77
+
78
+ @log.debug "Case #{n} ... "
79
+ ret = true
80
+
81
+ elapsed = StopWatch::measure do
82
+ ret = system "#{@solver} #{input} #{received}"
83
+ end
84
+ @elapsed[n] = elapsed
85
+ @log.debug "#{elapsed}ms "
86
+
87
+ if ret != true
88
+ @errors << n
89
+ @log.debug "Error (cannot execute solver)\n"
90
+ else
91
+ system "#{@checker} #{expected} #{received}"
92
+ ret = $?.exitstatus
93
+ case ret
94
+ when 0
95
+ @log.debug "Passed\n"
96
+ when 1
97
+ @log.debug "Failed\n"
98
+ @failures << n
99
+ print_case n if @verbose
100
+ when 2
101
+ @log.debug "Error (checker reported error)\n"
102
+ @errors << n
103
+ else
104
+ @log.debug "Error (error executing checker)\n"
105
+ @errors << n
106
+ end
107
+ end
108
+ end
109
+
110
+ def run_all_cases
111
+ puts "[gettc] Run test cases"
112
+
113
+ inputs = Dir.glob "#{@data_d}/*.in"
114
+ inputs.sort!
115
+
116
+ @total = inputs.size
117
+ @elapsed = Hash.new
118
+ @failures = Array.new
119
+ @errors = Array.new
120
+
121
+ inputs.each do |input|
122
+ basename = Pathname.new(input).basename.to_s
123
+ run_case basename[0..-4]
124
+ end
125
+ end
126
+
127
+ def print_array label, arr
128
+ if arr.size > 0
129
+ print "#{label}: "
130
+ puts arr.join(", ")
131
+ end
132
+ end
133
+
134
+ def summarize
135
+ puts "[gettc] Summary"
136
+ puts "#{@total} cases checked, #{@failures.size} failures, #{@errors.size} errors"
137
+ print_array "Failures", @failures
138
+ print_array "Errors", @errors
139
+
140
+ if @total > 0
141
+ sum = 0
142
+ maxv = 0
143
+ maxk = nil
144
+ @elapsed.each do |key, value|
145
+ sum += value
146
+ if value > maxv
147
+ maxv = value
148
+ maxk = key
149
+ end
150
+ end
151
+ avg = sum / @total
152
+
153
+ puts " Total time taken: #{sum} ms"
154
+ puts " Average time taken: #{avg} ms"
155
+ puts " Slowest running case: #{maxv} ms (case #{maxk})"
156
+ end
157
+ end
158
+
159
+ def print_failures
160
+ if @failures.empty? || @verbose
161
+ return
162
+ end
163
+ n = @failures.size
164
+ if n > 5
165
+ puts "Here are a few failed case for your debugging purposes"
166
+ n = 5
167
+ end
168
+ n.times do |i|
169
+ j = @failures[i]
170
+ puts "Case #{j}:"
171
+ print_case j
172
+ end
173
+ end
174
+
175
+ def run
176
+ compile_checker
177
+ run_all_cases
178
+ print_failures
179
+ summarize
180
+ end
181
+ end
182
+
183
+ runner = GettcRunner.new ARGV[0], ARGV[1], ARGV[2], ARGV[3]
184
+ runner.run
@@ -0,0 +1,40 @@
1
+ run = \
2
+ @if [ -n "$(case)" ] ; then \
3
+ if [ ! -f "$(DATA_D)/$2/$(case).in" ] ; then \
4
+ echo "Error: Your test case $(case) does not exist" ; \
5
+ exit ; \
6
+ fi ; \
7
+ mv $(DATA_D)/$2 $(DATA_D)/$2_backup ; \
8
+ mkdir $(DATA_D)/$2 ; \
9
+ cp $(DATA_D)/$2_backup/$(case).* $(DATA_D)/$2 ; \
10
+ $(RUNNER) $1 $(SOLVER) $(DATA_D)/$2 $(OUTPUT_D)/$2 ; \
11
+ rm -rf $(DATA_D)/$2 ; \
12
+ mv $(DATA_D)/$2_backup $(DATA_D)/$2 ; \
13
+ else \
14
+ $(RUNNER) $1 $(SOLVER) $(DATA_D)/$2 $(OUTPUT_D)/$2 ; \
15
+ fi
16
+
17
+ GETTC_HOME ?= $(HOME)/.gettc
18
+ DATA_D = ../../data
19
+ RUNNER = sh ../../bin/runner.sh
20
+
21
+ default : usage
22
+
23
+ usage :
24
+ @cat $(GETTC_HOME)/usage
25
+
26
+ setup :
27
+ @if [ ! -d $(OUTPUT_D) ]; then mkdir -p $(OUTPUT_D); fi
28
+ @echo "[gettc] Compile solver"
29
+
30
+ demo : main
31
+ $(call run,verbose,demo)
32
+
33
+ sys : main
34
+ $(call run,quiet,sys)
35
+
36
+ sysv : main
37
+ $(call run,verbose,sys)
38
+
39
+ clean :
40
+ @rm -rf $(OUTPUT_D)
@@ -1,33 +1,10 @@
1
- GETTC_HOME ?= $(HOME)/.gettc
1
+ include ../Makefile.common
2
+
2
3
  OUTPUT_D =../../build/cpp
3
- DATA_D = ../../data
4
+ SOLVER = $(OUTPUT_D)/<%= prob.name %>Solver
4
5
  COMPILER = g++ -std=gnu++0x -I$(GETTC_HOME)/include/cpp
5
- RUNNER = sh ../../bin/runner.sh
6
-
7
- run = @$(RUNNER) $1 $(OUTPUT_D)/<%= prob.name %>Runner $(DATA_D)/$2 $(OUTPUT_D)/$2
8
-
9
- default : usage
10
-
11
- usage :
12
- @cat $(GETTC_HOME)/usage
13
-
14
- setup :
15
- @if [ ! -d $(OUTPUT_D) ]; then mkdir -p $(OUTPUT_D); fi
16
- @echo "[gettc] Compile solver"
17
-
18
- $(OUTPUT_D)/<%= prob.name %>Runner: <%= prob.name %>Runner.cpp <%= prob.name %>.cpp
19
- $(COMPILER) -o $(OUTPUT_D)/<%= prob.name %>Runner $<
20
-
21
- main: setup $(OUTPUT_D)/<%= prob.name %>Runner
22
-
23
- demo : main
24
- $(call run,verbose,demo)
25
-
26
- sys : main
27
- $(call run,quiet,sys)
28
6
 
29
- sysv : main
30
- $(call run,verbose,sys)
7
+ $(SOLVER): <%= prob.name %>Solver.cpp <%= prob.name %>.cpp
8
+ $(COMPILER) -o $(SOLVER) $<
31
9
 
32
- clean :
33
- @rm -rf $(OUTPUT_D)
10
+ main: setup $(SOLVER)
@@ -1,32 +1,10 @@
1
- GETTC_HOME ?= <%= File.expand_path "~/.gettc" %>
2
- OUTPUT_D =../../build/go
3
- DATA_D = ../../data
4
- RUNNER = sh ../../bin/runner.sh
5
-
6
- run = @$(RUNNER) $1 $(OUTPUT_D)/<%= prob.name %>Runner $(DATA_D)/$2 $(OUTPUT_D)/$2
7
-
8
- default : usage
9
-
10
- usage :
11
- @cat $(GETTC_HOME)/usage
12
-
13
- setup :
14
- @if [ ! -d $(OUTPUT_D) ]; then mkdir -p $(OUTPUT_D); fi
15
- @echo "[gettc] Compile solver"
1
+ include ../Makefile.common
16
2
 
17
- $(OUTPUT_D)/<%= prob.name %>Runner: <%= prob.name %>Runner.go <%= prob.name %>/<%= prob.name %>.go
18
- export GOPATH="$$GOPATH<%= File::PATH_SEPARATOR %>$(GETTC_HOME)/include/go" && go build -o $(OUTPUT_D)/<%= prob.name %>Runner <%= prob.name %>Runner.go
19
-
20
- main: setup $(OUTPUT_D)/<%= prob.name %>Runner
21
-
22
- demo : main
23
- $(call run,verbose,demo)
24
-
25
- sys : main
26
- $(call run,quiet,sys)
3
+ OUTPUT_D =../../build/go
4
+ SOLVER = $(OUTPUT_D)/<%= prob.name %>Solver
27
5
 
28
- sysv : main
29
- $(call run,verbose,sys)
6
+ $(SOLVER): <%= prob.name %>Solver.go <%= prob.name %>/<%= prob.name %>.go
7
+ export GOPATH="$$GOPATH<%= File::PATH_SEPARATOR %>$(GETTC_HOME)/include/go" \
8
+ && go build -o $(SOLVER) <%= prob.name %>Solver.go
30
9
 
31
- clean :
32
- @rm -rf $(OUTPUT_D)
10
+ main: setup $(SOLVER)
@@ -1,33 +1,11 @@
1
- GETTC_HOME ?= $(HOME)/.gettc
1
+ include ../Makefile.common
2
+
2
3
  OUTPUT_D = ../../build/haskell
3
- DATA_D = ../../data
4
+ SOLVER = $(OUTPUT_D)/<%= prob.name %>Solver
4
5
  COMPILER = ghc -i$(GETTC_HOME)/include/haskell -outputdir $(OUTPUT_D)
5
- RUNNER = sh ../../bin/runner.sh
6
-
7
- run = @$(RUNNER) $1 $(OUTPUT_D)/<%= prob.name %>Runner $(DATA_D)/$2 $(OUTPUT_D)/$2
8
-
9
- default : usage
10
-
11
- usage :
12
- @cat $(GETTC_HOME)/usage
13
-
14
- setup :
15
- @if [ ! -d $(OUTPUT_D) ]; then mkdir -p $(OUTPUT_D); fi
16
- @echo "[gettc] Compile solver"
17
-
18
- $(OUTPUT_D)/<%= prob.name %>Runner: <%= prob.name %>Runner.hs <%= prob.name %>.hs
19
- $(COMPILER) -o $(OUTPUT_D)/<%= prob.name %>Runner $<
20
-
21
- main: setup $(OUTPUT_D)/<%= prob.name %>Runner
22
-
23
- demo : main
24
- $(call run,verbose,demo)
25
6
 
26
- sys : main
27
- $(call run,quiet,sys)
7
+ $(SOLVER): <%= prob.name %>Solver.hs <%= prob.name %>.hs
8
+ $(COMPILER) -o $(SOLVER) $<
28
9
 
29
- sysv : main
30
- $(call run,verbose,sys)
10
+ main: setup $(SOLVER)
31
11
 
32
- clean :
33
- @rm -rf $(OUTPUT_D)
@@ -18,7 +18,7 @@
18
18
 
19
19
  <target name="runner">
20
20
  <echo file="${java.sh}" append="no">#! /bin/sh
21
- java -cp "`dirname $0`${path.separator}${lib}" <%= prob.name %>Runner $$*
21
+ java -cp "`dirname $0`${path.separator}${lib}" <%= prob.name %>Solver $$*
22
22
  </echo>
23
23
  <chmod file="${java.sh}" perm="+x"/>
24
24
  </target>
@@ -26,7 +26,7 @@ java -cp "`dirname $0`${path.separator}${lib}" <%= prob.name %>Runner $$*
26
26
  <target name="compile-main">
27
27
  <mkdir dir="${output.dir}"/>
28
28
  <javac srcdir="." destdir="${output.dir}"
29
- includes="<%= prob.name %>.java,<%= prob.name %>Runner.java"
29
+ includes="<%= prob.name %>.java,<%= prob.name %>Solver.java"
30
30
  includeantruntime="no">
31
31
  <classpath refid="classpath"/>
32
32
  </javac>
@@ -63,4 +63,4 @@ java -cp "`dirname $0`${path.separator}${lib}" <%= prob.name %>Runner $$*
63
63
  <target name="clean">
64
64
  <delete dir="${output.dir}"/>
65
65
  </target>
66
- </project>
66
+ </project>
@@ -10,7 +10,7 @@ import org.topcoder.TypeRef;
10
10
  <%
11
11
  engine = JavaEngine.new func, vars
12
12
  %>
13
- public class <%= prob.name %>Runner {
13
+ public class <%= prob.name %>Solver {
14
14
  public static void main(String[] args) {
15
15
  try {
16
16
  TopcoderReader reader = new TopcoderReader(new FileReader(args[0]));
@@ -29,4 +29,4 @@ public class <%= prob.name %>Runner {
29
29
  err.printStackTrace(System.err);
30
30
  }
31
31
  }
32
- }
32
+ }
@@ -1,27 +1,8 @@
1
- GETTC_HOME ?= $(HOME)/.gettc
2
- OUTPUT_D = ../../build/python
3
- DATA_D = ../../data
4
- RUNNER = sh ../../bin/runner.sh
5
-
6
- run = @$(RUNNER) $1 ./<%= prob.name %>Runner.py $(DATA_D)/$2 $(OUTPUT_D)/$2
7
-
8
- default : usage
9
-
10
- setup :
11
- @if [ ! -d $(OUTPUT_D) ]; then mkdir -p $(OUTPUT_D); fi
12
- @chmod +x <%= prob.name %>Runner.py
1
+ include ../Makefile.common
13
2
 
14
- usage :
15
- @cat $(GETTC_HOME)/usage
16
-
17
- demo : setup
18
- $(call run,verbose,demo)
19
-
20
- sys : setup
21
- $(call run,quiet,sys)
3
+ OUTPUT_D = ../../build/python
4
+ SOLVER = ./<%= prob.name %>Solver.py
22
5
 
23
- sysv : setup
24
- $(call run,verbose,sys)
6
+ main: setup
7
+ chmod +x $(SOLVER)
25
8
 
26
- clean :
27
- @rm -rf $(OUTPUT_D)
data/dist/usage CHANGED
@@ -3,3 +3,4 @@ Hello from gettc! The following commands are available:
3
3
  make sys: Run the solution against the system tests
4
4
  make sysv: Like make sys but in verbose mode to debug
5
5
  make clean: Delete all temporary files
6
+ To run a single case, use something like: make sys case=99
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gettc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.1
4
+ version: 1.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-08 00:00:00.000000000 Z
11
+ date: 2015-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hpricot
@@ -92,22 +92,23 @@ files:
92
92
  - dist/template/prob/images/{images_d}
93
93
  - dist/template/prob/{name}.html
94
94
  - dist/template/prob/{name}.md
95
+ - dist/template/solve/Makefile.common
95
96
  - dist/template/solve/cpp/Makefile
96
97
  - dist/template/solve/cpp/{name}.cpp
97
- - dist/template/solve/cpp/{name}Runner.cpp
98
+ - dist/template/solve/cpp/{name}Solver.cpp
98
99
  - dist/template/solve/go/Makefile
99
100
  - dist/template/solve/go/{name}/{name}.go
100
- - dist/template/solve/go/{name}Runner.go
101
+ - dist/template/solve/go/{name}Solver.go
101
102
  - dist/template/solve/haskell/Makefile
102
103
  - dist/template/solve/haskell/{name}.hs
103
- - dist/template/solve/haskell/{name}Runner.hs
104
+ - dist/template/solve/haskell/{name}Solver.hs
104
105
  - dist/template/solve/java/Makefile
105
106
  - dist/template/solve/java/build.xml
106
107
  - dist/template/solve/java/{name}.java
107
- - dist/template/solve/java/{name}Runner.java
108
+ - dist/template/solve/java/{name}Solver.java
108
109
  - dist/template/solve/python/Makefile
109
110
  - dist/template/solve/python/{name}.py
110
- - dist/template/solve/python/{name}Runner.py
111
+ - dist/template/solve/python/{name}Solver.py
111
112
  - dist/template/util/check/Makefile
112
113
  - dist/template/util/check/check.cpp
113
114
  - dist/usage