gettc 1.8 → 1.8.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|