gettc 1.8.1 → 1.8.2

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