|
|
|
const perm = require('../permission');
|
|
|
|
const BUILTIN_USERS = [
|
|
|
|
{
|
|
|
|
_id: 0,
|
|
|
|
uname: 'Hydro',
|
|
|
|
unameLower: 'hydro',
|
|
|
|
email: '',
|
|
|
|
emailLower: '',
|
|
|
|
salt: '',
|
|
|
|
hash: '',
|
|
|
|
gender: 'other',
|
|
|
|
regat: new Date(),
|
|
|
|
regip: '127.0.0.1',
|
|
|
|
gravatar: '',
|
|
|
|
loginat: new Date(),
|
|
|
|
loginip: '127.0.0.1',
|
|
|
|
role: 'guest'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_id: 1,
|
|
|
|
email: 'guest@hydro',
|
|
|
|
emailLower: 'guest@hydro',
|
|
|
|
uname: 'Guest',
|
|
|
|
unameLower: 'guest',
|
|
|
|
hash: '',
|
|
|
|
salt: '',
|
|
|
|
regat: new Date(),
|
|
|
|
regip: '127.0.0.1',
|
|
|
|
loginat: new Date(),
|
|
|
|
loginip: '127.0.0.1',
|
|
|
|
gravatar: 'guest@hydro',
|
|
|
|
role: 'guest'
|
|
|
|
}
|
|
|
|
];
|
|
|
|
const BUILTIN_ROLES = [
|
|
|
|
{ _id: 'guest', perm: perm.PERM_BASIC },
|
|
|
|
{ _id: 'default', perm: perm.PERM_DEFAULT },
|
|
|
|
{ _id: 'admin', perm: perm.PERM_ADMIN }
|
|
|
|
];
|
|
|
|
const CATEGORIES = {
|
|
|
|
'动态规划': [
|
|
|
|
'LCS',
|
|
|
|
'LIS',
|
|
|
|
'背包',
|
|
|
|
'单调性DP',
|
|
|
|
'环形DP',
|
|
|
|
'树形DP',
|
|
|
|
'状态压缩DP'
|
|
|
|
],
|
|
|
|
'搜索': [
|
|
|
|
'枚举',
|
|
|
|
'搜索与剪枝',
|
|
|
|
'启发式搜索',
|
|
|
|
'DLX',
|
|
|
|
'双向搜索',
|
|
|
|
'折半搜索',
|
|
|
|
'记忆化搜索',
|
|
|
|
'模拟退火'
|
|
|
|
],
|
|
|
|
'计算几何': [
|
|
|
|
'半平面交',
|
|
|
|
'凸包',
|
|
|
|
'几何图形的交与并',
|
|
|
|
'旋转卡壳',
|
|
|
|
'点定位',
|
|
|
|
'坐标变换',
|
|
|
|
'离散化与扫描',
|
|
|
|
'反演',
|
|
|
|
'Voronoi图',
|
|
|
|
'平面图的对偶图',
|
|
|
|
'三角剖分',
|
|
|
|
'梯形剖分',
|
|
|
|
'几何知识'
|
|
|
|
],
|
|
|
|
'贪心': [],
|
|
|
|
'树结构': [
|
|
|
|
'最近公共祖先',
|
|
|
|
'生成树',
|
|
|
|
'DFS序列',
|
|
|
|
'树上倍增',
|
|
|
|
'树的分治',
|
|
|
|
'树链剖分',
|
|
|
|
'Link-Cut-Tree'
|
|
|
|
],
|
|
|
|
'图结构': [
|
|
|
|
'平面图',
|
|
|
|
'二分图',
|
|
|
|
'二分图匹配',
|
|
|
|
'最短路',
|
|
|
|
'差分约束',
|
|
|
|
'拓扑排序',
|
|
|
|
'网络流',
|
|
|
|
'强连通分量',
|
|
|
|
'割点割边',
|
|
|
|
'欧拉回路',
|
|
|
|
'2-SAT'
|
|
|
|
],
|
|
|
|
'数论': [
|
|
|
|
'素数判定',
|
|
|
|
'欧几里得算法',
|
|
|
|
'不定方程',
|
|
|
|
'数位统计',
|
|
|
|
'解线性同余方程',
|
|
|
|
'baby-step-giant-step',
|
|
|
|
'Pell方程',
|
|
|
|
'大整数质因数分解',
|
|
|
|
'勾股方程',
|
|
|
|
'积性函数',
|
|
|
|
'Fibonacci数列'
|
|
|
|
],
|
|
|
|
'模拟': [],
|
|
|
|
'数据结构': [
|
|
|
|
'栈',
|
|
|
|
'队列',
|
|
|
|
'链表',
|
|
|
|
'单调队列',
|
|
|
|
'并查集',
|
|
|
|
'堆',
|
|
|
|
'平衡树',
|
|
|
|
'线段树',
|
|
|
|
'树状数组',
|
|
|
|
'树套树',
|
|
|
|
'四分树',
|
|
|
|
'划分树',
|
|
|
|
'归并树',
|
|
|
|
'k-d树',
|
|
|
|
'块状链表',
|
|
|
|
'Hashing',
|
|
|
|
'函数式编程'
|
|
|
|
],
|
|
|
|
'博弈论': [],
|
|
|
|
'字符串': [
|
|
|
|
'KMP',
|
|
|
|
'后缀数据结构',
|
|
|
|
'Trie树',
|
|
|
|
'AC自动机',
|
|
|
|
'Manacher',
|
|
|
|
'表达式处理',
|
|
|
|
'最小表示法'
|
|
|
|
],
|
|
|
|
'组合数学': [
|
|
|
|
'生成函数',
|
|
|
|
'容斥原理',
|
|
|
|
'康托展开',
|
|
|
|
'Catalan数列',
|
|
|
|
'Stirling数',
|
|
|
|
'差分',
|
|
|
|
'Polya定理'
|
|
|
|
],
|
|
|
|
'线性代数': [
|
|
|
|
'矩阵乘法',
|
|
|
|
'高斯消元',
|
|
|
|
'线性规划'
|
|
|
|
],
|
|
|
|
'高精度': [
|
|
|
|
'FFT'
|
|
|
|
],
|
|
|
|
'递推': [],
|
|
|
|
'概率论': [
|
|
|
|
'随机化'
|
|
|
|
],
|
|
|
|
'NPC': [],
|
|
|
|
'其他': [
|
|
|
|
'二分查找',
|
|
|
|
'三分查找',
|
|
|
|
'双指针扫描',
|
|
|
|
'分治',
|
|
|
|
'分块',
|
|
|
|
'RMQ',
|
|
|
|
'快速幂',
|
|
|
|
'数学',
|
|
|
|
'排序',
|
|
|
|
'构造'
|
|
|
|
]
|
|
|
|
};
|
|
|
|
const FOOTER_EXTRA_HTMLS = [];
|
|
|
|
const VIEW_LANGS = [
|
|
|
|
{ code: 'zh-CN', name: 'zh-CN' }
|
|
|
|
];
|
|
|
|
const LANGS = {
|
|
|
|
cc: 'cpp'
|
|
|
|
};
|
|
|
|
const LANG_TEXTS = {
|
|
|
|
c: 'C',
|
|
|
|
cc: 'C++',
|
|
|
|
cs: 'C#',
|
|
|
|
pas: 'Pascal',
|
|
|
|
java: 'Java',
|
|
|
|
py: 'Python',
|
|
|
|
py3: 'Python 3',
|
|
|
|
php: 'PHP',
|
|
|
|
rs: 'Rust',
|
|
|
|
hs: 'Haskell',
|
|
|
|
js: 'JavaScript',
|
|
|
|
go: 'Go',
|
|
|
|
rb: 'Ruby',
|
|
|
|
};
|
|
|
|
const LANG_HIGHLIGHT_ID = {
|
|
|
|
c: 'c',
|
|
|
|
cc: 'cpp',
|
|
|
|
cs: 'csharp',
|
|
|
|
pas: 'pascal',
|
|
|
|
java: 'java',
|
|
|
|
py: 'python',
|
|
|
|
py3: 'python',
|
|
|
|
php: 'php',
|
|
|
|
rs: 'rust',
|
|
|
|
hs: 'haskell',
|
|
|
|
js: 'javascript',
|
|
|
|
go: 'go',
|
|
|
|
rb: 'ruby',
|
|
|
|
};
|
|
|
|
const STATUS = {
|
|
|
|
STATUS_WAITING: 0,
|
|
|
|
STATUS_ACCEPTED: 1,
|
|
|
|
STATUS_WRONG_ANSWER: 2,
|
|
|
|
STATUS_TIME_LIMIT_EXCEEDED: 3,
|
|
|
|
STATUS_MEMORY_LIMIT_EXCEEDED: 4,
|
|
|
|
STATUS_OUTPUT_LIMIT_EXCEEDED: 5,
|
|
|
|
STATUS_RUNTIME_ERROR: 6,
|
|
|
|
STATUS_COMPILE_ERROR: 7,
|
|
|
|
STATUS_SYSTEM_ERROR: 8,
|
|
|
|
STATUS_CANCELED: 9,
|
|
|
|
STATUS_ETC: 10,
|
|
|
|
STATUS_JUDGING: 20,
|
|
|
|
STATUS_COMPILING: 21,
|
|
|
|
STATUS_FETCHED: 22,
|
|
|
|
STATUS_IGNORED: 30
|
|
|
|
};
|
|
|
|
const STATUS_TEXTS = {
|
|
|
|
[STATUS.STATUS_WAITING]: 'Waiting',
|
|
|
|
[STATUS.STATUS_ACCEPTED]: 'Accepted',
|
|
|
|
[STATUS.STATUS_WRONG_ANSWER]: 'Wrong Answer',
|
|
|
|
[STATUS.STATUS_TIME_LIMIT_EXCEEDED]: 'Time Exceeded',
|
|
|
|
[STATUS.STATUS_MEMORY_LIMIT_EXCEEDED]: 'Memory Exceeded',
|
|
|
|
[STATUS.STATUS_OUTPUT_LIMIT_EXCEEDED]: 'Output Exceeded',
|
|
|
|
[STATUS.STATUS_RUNTIME_ERROR]: 'Runtime Error',
|
|
|
|
[STATUS.STATUS_COMPILE_ERROR]: 'Compile Error',
|
|
|
|
[STATUS.STATUS_SYSTEM_ERROR]: 'System Error',
|
|
|
|
[STATUS.STATUS_CANCELED]: 'Cancelled',
|
|
|
|
[STATUS.STATUS_ETC]: 'Unknown Error',
|
|
|
|
[STATUS.STATUS_JUDGING]: 'Running',
|
|
|
|
[STATUS.STATUS_COMPILING]: 'Compiling',
|
|
|
|
[STATUS.STATUS_FETCHED]: 'Fetched',
|
|
|
|
[STATUS.STATUS_IGNORED]: 'Ignored',
|
|
|
|
};
|
|
|
|
const STATUS_CODES = {
|
|
|
|
0: 'pending',
|
|
|
|
1: 'pass',
|
|
|
|
2: 'fail',
|
|
|
|
3: 'fail',
|
|
|
|
4: 'fail',
|
|
|
|
5: 'fail',
|
|
|
|
6: 'fail',
|
|
|
|
7: 'fail',
|
|
|
|
8: 'fail',
|
|
|
|
9: 'ignored',
|
|
|
|
10: 'fail',
|
|
|
|
20: 'progress',
|
|
|
|
21: 'progress',
|
|
|
|
22: 'progress',
|
|
|
|
30: 'ignored'
|
|
|
|
};
|
|
|
|
module.exports = {
|
|
|
|
BUILTIN_USERS, BUILTIN_ROLES, CATEGORIES, VIEW_LANGS, FOOTER_EXTRA_HTMLS, LANGS,
|
|
|
|
LANG_TEXTS, LANG_HIGHLIGHT_ID, STATUS, STATUS_TEXTS, STATUS_CODES
|
|
|
|
};
|