Skip to content

Commit ed0a1f9

Browse files
committed
Add json generator
1 parent 5bdb0d0 commit ed0a1f9

File tree

3 files changed

+162
-0
lines changed

3 files changed

+162
-0
lines changed

contest.yml

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
contest_name: Orientation Contest 2018 (test)
2+
problems:
3+
- dir_name: a*b
4+
data_sets:
5+
- label: Small
6+
score: 5
7+
- label: Large
8+
score: 5
9+
- dir_name: gpajanken
10+
data_sets:
11+
- label: Small
12+
score: 10
13+
- label: Large
14+
score: 100
15+
- dir_name: shimashima
16+
data_sets:
17+
- label: Small
18+
score: 10
19+
- label: Large
20+
score: 100
21+
- dir_name: pairprogramming
22+
data_sets:
23+
- label: Small
24+
score: 15
25+
- label: Large
26+
score: 150
27+
- dir_name: battle_royal
28+
data_sets:
29+
- label: Small
30+
score: 20
31+
- label: Large
32+
score: 200
33+
- dir_name: zoo
34+
data_sets:
35+
- label: Small
36+
score: 30
37+
- label: Large
38+
score: 300
39+
- dir_name: even2primes
40+
data_sets:
41+
- label: Small
42+
score: 40
43+
- label: Medium
44+
score: 400
45+
- label: Large
46+
score: 400
47+
- dir_name: tsunahiki
48+
data_sets:
49+
- label: Small
50+
score: 50
51+
- label: Large
52+
score: 600
53+
- dir_name: two-squares
54+
data_sets:
55+
- label: Small
56+
score: 50
57+
- label: Medium
58+
score: 400
59+
- label: Large
60+
score: 400

jsoner.py

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#!/usr/local/bin/python3
2+
# -*- coding: utf-8 -*-
3+
4+
import yaml
5+
import sys
6+
import json
7+
import os
8+
9+
usage = """
10+
Problem data json file generator from rime for WPCS2
11+
12+
usage:
13+
$ ./jsoner.py [config yaml file]
14+
15+
Note that you need to run `rime test` before executing this script
16+
"""
17+
18+
19+
def exit_with_usage(error = None) :
20+
print(usage)
21+
if error is not None :
22+
print('\nError: ' + error)
23+
exit(-1)
24+
25+
26+
def open_and_read_file(file_name) :
27+
if not os.path.isfile(file_name) :
28+
exit_with_usage("file " + file_name + " dose not exist!")
29+
with open(file_name, "r", encoding="utf-8") as f:
30+
return f.read()
31+
32+
33+
def sanitize_title(title) :
34+
if title.startswith('X: ') :
35+
return title[3:]
36+
elif title.startswith('X:') :
37+
return title[2:]
38+
elif title.startswith('X') :
39+
return title[1:]
40+
return title
41+
42+
43+
if __name__ == '__main__' :
44+
argvs = sys.argv
45+
46+
if len(argvs) != 2 :
47+
exit_with_usage()
48+
49+
infile_name = argvs[1]
50+
data = yaml.load(open_and_read_file(infile_name))
51+
52+
for problem in data['problems'] :
53+
dir_name = problem['dir_name']
54+
55+
# check rime-out exists
56+
if not os.path.isdir(dir_name + "/rime-out") :
57+
exit_with_usage(dir_name + "/rime-out directory does not exits ")
58+
59+
# read problem title
60+
def _problem(title=None, **ignore) :
61+
problem['title'] = sanitize_title(title)
62+
def _atcoder_config(**ignore) :
63+
return
64+
exports = {'problem': _problem, 'atcoder_config': _atcoder_config}
65+
exec(open_and_read_file(dir_name + "/PROBLEM"), exports, {})
66+
67+
# statement
68+
problem['statement'] = open_and_read_file(dir_name + "/statement.md")
69+
70+
# dataset
71+
for data_set in problem['data_sets'] :
72+
test_dir = dir_name + "/rime-out/tests/" + data_set['label'].lower()
73+
data_set['input'] = open_and_read_file(test_dir + ".in")
74+
data_set['output'] = open_and_read_file(test_dir + ".diff")
75+
76+
del problem['dir_name']
77+
78+
# output to std
79+
data_set_str = ["{} ({})".format(s['label'], s['score']) for s in problem['data_sets']]
80+
print(problem['title'] + " : " + ", ".join(data_set_str))
81+
82+
# TODO not endwith .yml
83+
outfile_name = infile_name.replace(".yml", ".json")
84+
85+
with open(outfile_name, "w", encoding="utf-8") as f :
86+
json.dump(data, f, "utf-8", ensure_ascii=False, sort_keys=True)
87+
88+
print("\nSuccessfully output to " + outfile_name)

sample.yml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
contest_name: Sample Contest
2+
problems:
3+
- dir_name: a+b
4+
data_sets:
5+
- label: Small
6+
score: 10
7+
- label: Large
8+
score: 100
9+
- dir_name: string
10+
data_sets:
11+
- label: Small
12+
score: 50
13+
- label: Large
14+
score: 1114514

0 commit comments

Comments
 (0)