gettc 1.8 → 1.8.1
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/bin/gettc +1 -1
- data/core/lib/version.rb +1 -1
- data/dist/config.yml +1 -1
- data/dist/include/cpp/topcoder +5 -5
- data/dist/include/go/src/topcoder/errors.go +5 -1
- data/dist/include/go/src/topcoder/reader.go +10 -15
- data/dist/include/go/src/topcoder/reader_test.go +7 -5
- data/dist/include/haskell/TopCoder.hs +7 -3
- data/dist/include/java/TopCoder.jar +0 -0
- data/dist/include/python/topcoder/__init__.pyc +0 -0
- data/dist/include/python/topcoder/errors.pyc +0 -0
- data/dist/include/python/topcoder/reader.py +7 -3
- data/dist/include/python/topcoder/reader.pyc +0 -0
- data/dist/include/python/topcoder/writer.pyc +0 -0
- data/dist/template/bin/runner.rb +178 -173
- metadata +6 -6
- data/dist/include/python/topcoder/__pycache__/__init__.cpython-32.pyc +0 -0
- data/dist/include/python/topcoder/__pycache__/errors.cpython-32.pyc +0 -0
- data/dist/include/python/topcoder/__pycache__/reader.cpython-32.pyc +0 -0
- data/dist/include/python/topcoder/__pycache__/writer.cpython-32.pyc +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8f0620456e7f47a3b78dac16f5340db69b2708e
|
4
|
+
data.tar.gz: 9d58a132c8a69a0ead8997ba48fea763bff87d4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a93b2e574f63014b36b17c9d26386f36294db624833d9b88cd47549c3376b7739b0caf98698ba948bc2ab79bcfb10bef6babb8a715aaaf4150fe66b4603bec9
|
7
|
+
data.tar.gz: 6d2316fc246ac269ead57fa88448f3a8a8a1013cef1bb9c5c033ced8c414507859f136d55a1ad56c66b7825f0f7a767ad831cf6cf6fc3c1b10c174ed804e5e64
|
data/bin/gettc
CHANGED
@@ -75,7 +75,7 @@ gettc reset: Bring all settings to default state.
|
|
75
75
|
prob = parser.parse html
|
76
76
|
puts "Done"
|
77
77
|
|
78
|
-
print "Generating problem
|
78
|
+
print "Generating problem directory for #{prob.name} ... "
|
79
79
|
generator.generate prob
|
80
80
|
puts "Done"
|
81
81
|
rescue TemplateError => terr
|
data/core/lib/version.rb
CHANGED
data/dist/config.yml
CHANGED
data/dist/include/cpp/topcoder
CHANGED
@@ -108,12 +108,12 @@ namespace TopCoder {
|
|
108
108
|
}
|
109
109
|
|
110
110
|
void read(std::istream &is, char &c) {
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
c = 0;
|
115
|
-
} else {
|
111
|
+
_spaces(is); char ch; is.get(ch);
|
112
|
+
if (ch == '\'') {
|
113
|
+
is.get(c);
|
116
114
|
_expect(is, '\'');
|
115
|
+
} else {
|
116
|
+
c = ch;
|
117
117
|
}
|
118
118
|
}
|
119
119
|
|
@@ -1,3 +1,7 @@
|
|
1
|
+
// I hope to migrate this codebase to this style soon, to avoid the error
|
2
|
+
// checking madness: http://blog.golang.org/errors-are-values. However, it
|
3
|
+
// will break compatibility so I'll wait for a timely chance.
|
4
|
+
|
1
5
|
package topcoder
|
2
6
|
|
3
7
|
import (
|
@@ -38,4 +42,4 @@ func (me ErrExpect) Error() string {
|
|
38
42
|
|
39
43
|
func NewErrExpect(r io.Reader, what string) ErrExpect {
|
40
44
|
return ErrExpect(fmt.Sprintf("Expect %s at <%s>", what, rest(r)))
|
41
|
-
}
|
45
|
+
}
|
@@ -12,8 +12,6 @@ import (
|
|
12
12
|
func spaces(br *bufio.Reader) error {
|
13
13
|
for {
|
14
14
|
switch b, err := br.ReadByte(); {
|
15
|
-
case err == io.EOF:
|
16
|
-
return nil
|
17
15
|
case err != nil:
|
18
16
|
return err
|
19
17
|
case !unicode.IsSpace(rune(b)):
|
@@ -26,8 +24,6 @@ func spaces(br *bufio.Reader) error {
|
|
26
24
|
|
27
25
|
func genericExpect(br *bufio.Reader, what string, predicate func(byte) bool) error {
|
28
26
|
switch b, err := br.ReadByte(); {
|
29
|
-
case err == io.EOF:
|
30
|
-
return io.ErrUnexpectedEOF
|
31
27
|
case err != nil:
|
32
28
|
return err
|
33
29
|
case !predicate(b):
|
@@ -64,19 +60,20 @@ func readChar(br *bufio.Reader, pChar *byte) error {
|
|
64
60
|
if err = spaces(br); err != nil {
|
65
61
|
return err
|
66
62
|
}
|
67
|
-
if err = expect(br, '\''); err != nil {
|
68
|
-
return err
|
69
|
-
}
|
70
63
|
switch b, err = br.ReadByte(); {
|
71
|
-
case err == io.EOF:
|
72
|
-
return io.ErrUnexpectedEOF
|
73
64
|
case err != nil:
|
74
65
|
return err
|
66
|
+
case b == '\'':
|
67
|
+
switch ret, errInside := br.ReadByte(); {
|
68
|
+
case errInside != nil:
|
69
|
+
return errInside
|
70
|
+
default:
|
71
|
+
*pChar = ret
|
72
|
+
return expect(br, '\'')
|
73
|
+
}
|
74
|
+
default:
|
75
|
+
*pChar = b
|
75
76
|
}
|
76
|
-
if err = expect(br, '\''); err != nil {
|
77
|
-
return err
|
78
|
-
}
|
79
|
-
*pChar = b
|
80
77
|
return nil
|
81
78
|
}
|
82
79
|
|
@@ -124,8 +121,6 @@ func readString(br *bufio.Reader, pString *string) error {
|
|
124
121
|
w := bytes.NewBufferString("")
|
125
122
|
for {
|
126
123
|
switch b, err = br.ReadByte(); {
|
127
|
-
case err == io.EOF:
|
128
|
-
return io.ErrUnexpectedEOF
|
129
124
|
case err != nil:
|
130
125
|
return err
|
131
126
|
case b != '"':
|
@@ -157,8 +157,9 @@ func TestReadByte(t *testing.T) {
|
|
157
157
|
var (
|
158
158
|
xs = []aTest {
|
159
159
|
aTest{"'H'ello", 'H', true},
|
160
|
-
aTest{"\n\t '
|
161
|
-
aTest{"
|
160
|
+
aTest{"\n\t 'A'23", 'A', true},
|
161
|
+
aTest{"Bello", 'B', true},
|
162
|
+
aTest{"'C", 'C', false},
|
162
163
|
}
|
163
164
|
got byte
|
164
165
|
)
|
@@ -320,14 +321,15 @@ func TestReadAll(t *testing.T) {
|
|
320
321
|
age int
|
321
322
|
gender byte
|
322
323
|
average float32
|
324
|
+
grade byte
|
323
325
|
courses []string
|
324
326
|
grades [][]float64
|
325
327
|
)
|
326
|
-
in := "\"Joe\", 20, 'M', 7.5, [\"Math\", \"Computer \"Science\"\"], [[7, 8], []]"
|
328
|
+
in := "\"Joe\", 20, 'M', 7.5, C, [\"Math\", \"Computer \"Science\"\"], [[7, 8], []]"
|
327
329
|
br := newReader(in)
|
328
330
|
f := fmt.Sprintf("Read(%v)", in)
|
329
|
-
Read(br, &name, &age, &gender, &average, &courses, &grades)
|
330
|
-
if name != "Joe" || age != 20 || average != 7.5 || gender != 'M' ||
|
331
|
+
Read(br, &name, &age, &gender, &average, &grade, &courses, &grades)
|
332
|
+
if name != "Joe" || age != 20 || average != 7.5 || gender != 'M' || grade != 'C' ||
|
331
333
|
!reflect.DeepEqual(courses, []string{"Math", "Computer \"Science\""}) ||
|
332
334
|
!reflect.DeepEqual(grades, [][]float64{{7, 8}, {}}) {
|
333
335
|
t.Errorf(f + " produces (%q, %d, &q, %f, %v, %v)", name, age, gender, average, courses, grades)
|
@@ -25,13 +25,17 @@ next = do
|
|
25
25
|
return ()
|
26
26
|
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
parseQuotedChar :: Parser Char
|
29
|
+
parseQuotedChar = do
|
30
30
|
char '\''
|
31
31
|
ret <- anyChar
|
32
32
|
char '\''
|
33
33
|
return ret
|
34
34
|
|
35
|
+
parseChar :: Parser Char
|
36
|
+
parseChar = parseQuotedChar <|> anyChar
|
37
|
+
|
38
|
+
|
35
39
|
parseBool :: Parser Bool
|
36
40
|
parseBool = do
|
37
41
|
s <- many1 letter
|
@@ -97,4 +101,4 @@ parseList parser = do
|
|
97
101
|
spaces >> char '[' >> spaces
|
98
102
|
xs <- parseElems parser
|
99
103
|
spaces >> char ']'
|
100
|
-
return xs
|
104
|
+
return xs
|
Binary file
|
Binary file
|
Binary file
|
@@ -101,10 +101,14 @@ class ReaderInternal(object):
|
|
101
101
|
|
102
102
|
def next_char(self):
|
103
103
|
self.spaces()
|
104
|
-
self.expect("'")
|
105
104
|
c = self.token()
|
105
|
+
if c == "'":
|
106
|
+
self.pos += 1
|
107
|
+
ret = self.token()
|
108
|
+
self.pos += 1
|
109
|
+
self.expect("'")
|
110
|
+
return ret
|
106
111
|
self.pos += 1
|
107
|
-
self.expect("'")
|
108
112
|
return c
|
109
113
|
|
110
114
|
def next_boolean(self):
|
@@ -157,4 +161,4 @@ class ReaderInternal(object):
|
|
157
161
|
return result
|
158
162
|
result.append(self.next(elem_type))
|
159
163
|
self.next_elems(elem_type, result)
|
160
|
-
return result
|
164
|
+
return result
|
Binary file
|
Binary file
|
data/dist/template/bin/runner.rb
CHANGED
@@ -1,173 +1,178 @@
|
|
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\n"
|
89
|
-
else
|
90
|
-
system "#{@checker} #{expected} #{received}"
|
91
|
-
ret
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
@total
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
@elapsed.size
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
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
|
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:
|
4
|
+
version: 1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hpricot
|
@@ -78,13 +78,13 @@ files:
|
|
78
78
|
- dist/include/java/engine.rb
|
79
79
|
- dist/include/python/engine.rb
|
80
80
|
- dist/include/python/topcoder/__init__.py
|
81
|
-
- dist/include/python/topcoder/
|
82
|
-
- dist/include/python/topcoder/__pycache__/errors.cpython-32.pyc
|
83
|
-
- dist/include/python/topcoder/__pycache__/reader.cpython-32.pyc
|
84
|
-
- dist/include/python/topcoder/__pycache__/writer.cpython-32.pyc
|
81
|
+
- dist/include/python/topcoder/__init__.pyc
|
85
82
|
- dist/include/python/topcoder/errors.py
|
83
|
+
- dist/include/python/topcoder/errors.pyc
|
86
84
|
- dist/include/python/topcoder/reader.py
|
85
|
+
- dist/include/python/topcoder/reader.pyc
|
87
86
|
- dist/include/python/topcoder/writer.py
|
87
|
+
- dist/include/python/topcoder/writer.pyc
|
88
88
|
- dist/template/bin/runner.rb
|
89
89
|
- dist/template/bin/runner.sh
|
90
90
|
- dist/template/data/demo/{examples_d}
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|