1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#!/usr/bin/python3
import sqlite3
db = sqlite3.connect('misc/solutions.db')
db.row_factory = sqlite3.Row
db.text_factory = bytes
cursor = db.cursor()
def b_to_utf8(bytestring):
return str(bytestring, encoding='utf-8')
def get_problem_ids():
cursor.execute('SELECT id FROM problems ORDER BY id ASC')
return [row['id'] for row in cursor]
def get_problem(pid):
cursor.execute('SELECT name, solution, library FROM problems WHERE id=?', (pid,))
row = cursor.fetchone()
name = b_to_utf8(row['name'])
solution = b_to_utf8(row['solution']).replace('\r', '')
lib_id = row['library'] if row['library'] else None
return name, solution, lib_id
def get_depends(pid):
cursor.execute('SELECT dependency FROM depends WHERE problem=?', (pid,))
return [r['dependency'] for r in cursor.fetchall()]
def get_library(lid):
cursor.execute('SELECT facts FROM libraries WHERE id=?', (lid,))
row = cursor.fetchone()
return b_to_utf8(row['facts']).replace('\r', '') if row else None
def get_tests(pid):
cursor.execute('SELECT query FROM tests WHERE problem=?', (pid,))
return [b_to_utf8(row['query']) for row in cursor]
def get_traces(pid):
cursor.execute('SELECT * FROM attempts WHERE problem=? AND done=1 ORDER BY id ASC', (pid,))
return {(pid, attempt['user']): attempt['log'] for attempt in cursor}
def get_solved(uid):
cursor.execute('SELECT problem FROM attempts WHERE user=? AND done=1 ORDER BY problem ASC', (uid,))
return [row['problem'] for row in cursor.fetchall()]
|