diff --git a/trunk/core/judge_client/judge_client.cc b/trunk/core/judge_client/judge_client.cc index 6256fd774a0..c326f9a9639 100644 --- a/trunk/core/judge_client/judge_client.cc +++ b/trunk/core/judge_client/judge_client.cc @@ -208,8 +208,8 @@ static int py2=1; // caution: py2=1 means default using py3 MYSQL *conn; #endif static char jresult[15][4]={"PD","PR","CI","RJ","AC","PE","WA","TLE","MLE","OLE","RE","CE","CO","TR","MC"}; -static char lang_ext[24][8] = {"c", "cc", "pas", "java", "rb", "sh", "py", - "php", "pl", "cs", "m", "bas", "scm", "c", "cc", "lua", "js", "go","sql","f95","m","cob","R","sb3"}; +static char lang_ext[25][8] = {"c", "cc", "pas", "java", "rb", "sh", "py", + "php", "pl", "cs", "m", "bas", "scm", "c", "cc", "lua", "js", "go","sql","f95","m","cob","R","sb3","cj"}; //static char buf[BUFFER_SIZE]; int lockfile(int fd) { @@ -444,6 +444,9 @@ void init_syscalls_limits(int lang) //白名单初始化 }else if(lang == LANG_SB3 ){ for (i = 0; i == 0 || LANG_SB3V[i]; i++) call_counter[LANG_SB3V[i]] = HOJ_MAX_LIMIT; + }else if(lang == LANG_CJ ){ + for (i = 0; i == 0 || LANG_CJV[i]; i++) + call_counter[LANG_CJV[i]] = HOJ_MAX_LIMIT; } #ifdef __aarch64__ if (lang==3)call_counter[220]= 100; @@ -1490,10 +1493,14 @@ int compile(int lang, char *work_dir) const char *CP_FORTRAN[] = {"f95", "-static", "-o", "Main", "Main.f95", NULL}; const char *CP_COBOL[] = {"cobc","-x", "-static", "-o", "Main", "Main.cob", NULL}; const char *CP_SB3[] = {"scratch-run","--check", "Main.sb3", NULL}; + const char *CP_CJ[] = {"/opt/cangjie/bin/cjc","-o","Main", "Main.cj", NULL}; char * const envp[]={(char * const )"PYTHONIOENCODING=utf-8", (char * const )"USER=judge", (char * const )"GOCACHE=/tmp", + (char * const )"PATH=/bin:/usr/bin:/opt/cangjie/bin", + (char * const )"LD_LIBRARY_PATH=/opt/cangjie/runtime/lib/linux_x86_64_llvm:/opt/cangjie/tools/lib", + (char * const )"GOCACHE=/tmp", (char * const )"LANG=zh_CN.UTF-8", (char * const )"LANGUAGE=zh_CN.UTF-8", (char * const )"LC_ALL=zh_CN.utf-8",NULL}; @@ -1661,6 +1668,9 @@ int compile(int lang, char *work_dir) case LANG_SB3: execvp(CP_SB3[0], (char *const *)CP_SB3); break; + case LANG_CJ: + execvp(CP_CJ[0], (char *const *)CP_CJ); + break; default: printf("nothing to do!\n"); } @@ -2549,6 +2559,8 @@ void run_solution(int &lang, char *work_dir, double &time_lmt, int &usedtime, { //准备环境变量处理中文,如果希望使用非中文的语言环境,可能需要修改这些环境变量 char * const envp[]={(char * const )"PYTHONIOENCODING=utf-8", + (char * const )"PATH=/bin:/usr/bin:/opt/cangjie/bin", + (char * const )"LD_LIBRARY_PATH=/opt/cangjie/runtime/lib/linux_x86_64_llvm:/opt/cangjie/tools/lib", (char * const )"LANG=zh_CN.UTF-8", (char * const )"LANGUAGE=zh_CN.UTF-8", (char * const )"LC_ALL=zh_CN.utf-8",NULL}; @@ -2584,7 +2596,7 @@ void run_solution(int &lang, char *work_dir, double &time_lmt, int &usedtime, } execute_cmd("chmod 760 %s/user.out", work_dir); if ( - (!use_docker) && lang != 3 && lang != 5 && lang != 20 && lang != 9 && !(lang ==6 && python_free ) + (!use_docker) && lang != 3 && lang != 5 && lang != 20 && lang != 9 && lang !=LANG_CJ && !(lang ==6 && python_free ) ){ if(DEBUG)printf("chroot...............................................\n"); @@ -2607,6 +2619,7 @@ void run_solution(int &lang, char *work_dir, double &time_lmt, int &usedtime, && lang != LANG_MATLAB && lang != LANG_CSHARP && lang != LANG_R + && lang != LANG_CJ && !(lang == LANG_PYTHON && python_free ) ){ @@ -2663,6 +2676,7 @@ void run_solution(int &lang, char *work_dir, double &time_lmt, int &usedtime, case LANG_PYTHON: //python case LANG_SCHEME: case LANG_JS: + case LANG_CJ: case LANG_MATLAB: LIM.rlim_cur = LIM.rlim_max = 200; break; @@ -2697,6 +2711,7 @@ void run_solution(int &lang, char *work_dir, double &time_lmt, int &usedtime, case LANG_GO: case LANG_FORTRAN: case LANG_COBOL: + case LANG_CJ: execle("./Main", "./Main", (char *)NULL,envp); break; case LANG_JAVA: @@ -3115,6 +3130,7 @@ void watch_solution(pid_t pidApp, char *infile, int &ACflg, int spj, lang == LANG_GO || lang == LANG_MATLAB|| lang == LANG_COBOL|| + lang == LANG_CJ|| lang == LANG_SB3 ) { @@ -3607,7 +3623,7 @@ int main(int argc, char **argv) if (p_id == 0) { time_lmt = 5; - mem_lmt = 128; + mem_lmt = 256; spj = 0; } else @@ -3781,7 +3797,7 @@ int main(int argc, char **argv) p_id, PEflg, work_dir); } if(DEBUG) printf("custom running result:%d PEflg:%d\n",ACflg,PEflg); - if (ACflg == OJ_RE||get_file_size("error.out")>0) + if (ACflg == OJ_RE||( lang!=LANG_CJ && get_file_size("error.out")>0)) { if (DEBUG) printf("add RE info of %d..... \n", solution_id); diff --git a/trunk/core/judge_client/okcalls.h b/trunk/core/judge_client/okcalls.h index b67233f5f4b..de7e3c7cf24 100644 --- a/trunk/core/judge_client/okcalls.h +++ b/trunk/core/judge_client/okcalls.h @@ -43,6 +43,7 @@ #define LANG_COBOL 21 #define LANG_R 22 #define LANG_SB3 23 +#define LANG_CJ 24 #ifdef __i386 #include "okcalls32.h" diff --git a/trunk/core/judge_client/okcalls32.h b/trunk/core/judge_client/okcalls32.h index fc394b6e1a6..9afb7f86098 100644 --- a/trunk/core/judge_client/okcalls32.h +++ b/trunk/core/judge_client/okcalls32.h @@ -132,3 +132,4 @@ int LANG_CBV[CALL_ARRAY_SIZE]={3,4,6,11,20,33,45,54,78,85,91,102,122,125,140,146 //R int LANG_RLV[CALL_ARRAY_SIZE]={0,11,0}; int LANG_SB3V[CALL_ARRAY_SIZE]={0,11,0}; +int LANG_CJV[CALL_ARRAY_SIZE]={0,11,0}; diff --git a/trunk/core/judge_client/okcalls64.h b/trunk/core/judge_client/okcalls64.h index fc8304e8012..5c1a15965e6 100644 --- a/trunk/core/judge_client/okcalls64.h +++ b/trunk/core/judge_client/okcalls64.h @@ -154,5 +154,7 @@ int LANG_CBV[CALL_ARRAY_SIZE]={0,1,3,4,5,8,9,10,11,12,13,14,17,21,41,42,59,89,15 //R Lang int LANG_RLV[CALL_ARRAY_SIZE]={0,1,3,8,9,10,11,12,13,14,16,17,21,33,39,41,42,56,59,61,63,72,79,83,89,98,99,102,104,107, 108,110,111,131,158,202,204,217,218,231,257,262,273,293,302,318,334,435,439,0}; - +//Scratch3 int LANG_SB3V[CALL_ARRAY_SIZE]={0,1,3,5,9,10,11,12,13,14,16,17,21,28,39,56,59,63,72,89,99,102,104,107,108,158,202,218,231,232,233,257,262,273,290,291,293,302,318,332,334,435,0}; +//Cangjie +int LANG_CJV[CALL_ARRAY_SIZE] = {0,1,3,4,9,10,11,12,13,14,17,21,28,59,89,99,157,158,186,202,218,228,231,257,262,273,302,318,334,435,0}; diff --git a/trunk/core/judge_client/okcalls_aarch64.h b/trunk/core/judge_client/okcalls_aarch64.h index 89fccb3a8a3..e543b03d46a 100644 --- a/trunk/core/judge_client/okcalls_aarch64.h +++ b/trunk/core/judge_client/okcalls_aarch64.h @@ -60,3 +60,4 @@ int LANG_CBV[CALL_ARRAY_SIZE] = {0,2,3,4,5,6,11,19,33,45,54,78,91,122,125,140,17 int LANG_RLV[CALL_ARRAY_SIZE]={0,11,0}; //Scratch3 int LANG_SB3V[CALL_ARRAY_SIZE]={0,11,0}; +int LANG_CJV[CALL_ARRAY_SIZE]={0,11,0}; diff --git a/trunk/core/judge_client/okcalls_arm.h b/trunk/core/judge_client/okcalls_arm.h index 1d31aae46ca..df1914a24ee 100644 --- a/trunk/core/judge_client/okcalls_arm.h +++ b/trunk/core/judge_client/okcalls_arm.h @@ -61,3 +61,5 @@ int LANG_MV[CALL_ARRAY_SIZE]={0,2,3,4,5,6,11,19,33,45,54,78,91,122,125,140,174,1 int LANG_CBV[CALL_ARRAY_SIZE]={0,3,4,5,33,45,85,122,192,197,248,0}; //Scratch3 int LANG_SB3V[CALL_ARRAY_SIZE]={0,11,0}; +//Cangjie +int LANG_CJV[CALL_ARRAY_SIZE]={0,11,0}; diff --git a/trunk/core/judge_client/okcalls_mips.h b/trunk/core/judge_client/okcalls_mips.h index a4b923d9988..0131219aa35 100644 --- a/trunk/core/judge_client/okcalls_mips.h +++ b/trunk/core/judge_client/okcalls_mips.h @@ -61,3 +61,5 @@ int LANG_CBV[CALL_ARRAY_SIZE]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 int LANG_RLV[CALL_ARRAY_SIZE]={0,11,0}; //Scratch3 int LANG_SB3V[CALL_ARRAY_SIZE]={0,11,0}; +//Cangjie +int LANG_CJV[CALL_ARRAY_SIZE]={0,11,0}; diff --git a/trunk/install/Dockerfile b/trunk/install/Dockerfile index 8344970750d..ee5e650cc35 100644 --- a/trunk/install/Dockerfile +++ b/trunk/install/Dockerfile @@ -43,6 +43,8 @@ RUN cd /home/judge/src/core/ && bash make.sh #RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends octave #RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends gnucobol #RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends r-base +#RUN wget -O /opt/cangjie.tar.gz http://dl3.hustoj.com/docker/Cangjie-STS-linux_x64.tar.gz && cd /opt && tar xzf cangjie.tar.gz && chmod +rx -R cangjie && rm cangjie.tar.gz + # Scratch3 judge need these lines #RUN wget -c http://dl.hustoj.com/scratch-run_0.1.5_linux_amd64.zip diff --git a/trunk/web/include/const.inc.php b/trunk/web/include/const.inc.php index f0c4380af75..fbd6b7cb269 100644 --- a/trunk/web/include/const.inc.php +++ b/trunk/web/include/const.inc.php @@ -9,8 +9,8 @@ $judge_result=Array($MSG_Pending,$MSG_Pending_Rejudging,$MSG_Compiling,$MSG_Running_Judging,$MSG_Accepted,$MSG_Presentation_Error,$MSG_Wrong_Answer,$MSG_Time_Limit_Exceed,$MSG_Memory_Limit_Exceed,$MSG_Output_Limit_Exceed,$MSG_Runtime_Error,$MSG_Compile_Error,$MSG_Compile_OK,$MSG_TEST_RUN,$MSG_MANUAL_CONFIRMATION,$MSG_SUBMITTING,$MSG_REMOTE_PENDING,$MSG_REMOTE_JUDGING); $jresult=Array($MSG_PD,$MSG_PR,$MSG_CI,$MSG_RJ,$MSG_AC,$MSG_PE,$MSG_WA,$MSG_TLE,$MSG_MLE,$MSG_OLE,$MSG_RE,$MSG_CE,$MSG_CO,$MSG_TR,$MSG_MC,$MSG_SUBMITTING,$MSG_RP,$MSG_RJ); $judge_color = Array("label gray","label label-info","label label-warning","label label-warning","label label-success","label label-danger","label label-danger","label label-warning","label label-warning","label label-warning","label label-warning","label label-warning","label label-warning","label label-info","label label-success","label lable-gray","label label-info","label label-warning"); -$language_name=Array("C","C++","Pascal","Java","Ruby","Bash","Python","PHP","Perl","C#","Obj-C","FreeBasic","Scheme","Clang","Clang++","Lua","JavaScript","Go","SQL","Fortran","Matlab","Cobol","R","Scratch3","UnknownLanguage"); -$language_ext=Array( "c", "cc", "pas", "java", "rb", "sh", "py", "php","pl", "cs","m","bas","scm","c","cc","lua","js","go","sql","f95","m","cob","R","sb3" ); +$language_name=Array("C","C++","Pascal","Java","Ruby","Bash","Python","PHP","Perl","C#","Obj-C","FreeBasic","Scheme","Clang","Clang++","Lua","JavaScript","Go","SQL","Fortran","Matlab","Cobol","R","Scratch3","Cangjie","UnknownLanguage"); +$language_ext=Array( "c", "cc", "pas", "java", "rb", "sh", "py", "php","pl", "cs","m","bas","scm","c","cc","lua","js","go","sql","f95","m","cob","R","sb3","cj" ); $PID=Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ","BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ","CA","CB","CC","CD","CE","CF","CG","CH","CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ","DA","DB","DC","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM","DN","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ","EA","EB","EC","ED","EE","EF","EG","EH","EI","EJ","EK","EL","EM","EN","EO","EP","EQ","ER","ES","ET","EU","EV","EW","EX","EY","EZ","FA","FB","FC","FD","FE","FF","FG","FH","FI","FJ","FK","FL","FM","FN","FO","FP","FQ","FR","FS","FT","FU","FV","FW","FX","FY","FZ","GA","GB","GC","GD","GE","GF","GG","GH","GI","GJ","GK","GL","GM","GN","GO","GP","GQ","GR","GS","GT","GU","GV","GW","GX","GY","GZ","HA","HB","HC","HD","HE","HF","HG","HH","HI","HJ","HK","HL","HM","HN","HO","HP","HQ","HR","HS","HT","HU","HV","HW","HX","HY","HZ","IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL","IM","IN","IO","IP","IQ","IR","IS","IT","IU","IV","IW","IX","IY","IZ","JA","JB","JC","JD","JE","JF","JG","JH","JI","JJ","JK","JL","JM","JN","JO","JP","JQ","JR","JS","JT","JU","JV","JW","JX","JY","JZ","KA","KB","KC","KD","KE","KF","KG","KH","KI","KJ","KK","KL","KM","KN","KO","KP","KQ","KR","KS","KT","KU","KV","KW","KX","KY","KZ","LA","LB","LC","LD","LE","LF","LG","LH","LI","LJ","LK","LL","LM","LN","LO","LP","LQ","LR","LS","LT","LU","LV","LW","LX","LY","LZ","MA","MB","MC","MD","ME","MF","MG","MH","MI","MJ","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NB","NC","ND","NE","NF","NG","NH","NI","NJ","NK","NL","NM","NN","NO","NP","NQ","NR","NS","NT","NU","NV","NW","NX","NY","NZ","OA","OB","OC","OD","OE","OF","OG","OH","OI","OJ","OK","OL","OM","ON","OO","OP","OQ","OR","OS","OT","OU","OV","OW","OX","OY","OZ","PA","PB","PC","PD","PE","PF","PG","PH","PI","PJ","PK","PL","PM","PN","PO","PP","PQ","PR","PS","PT","PU","PV","PW","PX","PY","PZ","QA","QB","QC","QD","QE","QF","QG","QH","QI","QJ","QK","QL","QM","QN","QO","QP","QQ","QR","QS","QT","QU","QV","QW","QX","QY","QZ","RA","RB","RC","RD","RE","RF","RG","RH","RI","RJ","RK","RL","RM","RN","RO","RP","RQ","RR","RS","RT","RU","RV","RW","RX","RY","RZ","SA","SB","SC","SD","SE","SF","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SP","SQ","SR","SS","ST","SU","SV","SW","SX","SY","SZ","TA","TB","TC","TD","TE","TF","TG","TH","TI","TJ","TK","TL","TM","TN","TO","TP","TQ","TR","TS","TT","TU","TV","TW","TX","TY","TZ","UA","UB","UC","UD","UE","UF","UG","UH","UI","UJ","UK","UL","UM","UN","UO","UP","UQ","UR","US","UT","UU","UV","UW","UX","UY","UZ","VA","VB","VC","VD","VE","VF","VG","VH","VI","VJ","VK","VL","VM","VN","VO","VP","VQ","VR","VS","VT","VU","VV","VW","VX","VY","VZ","WA","WB","WC","WD","WE","WF","WG","WH","WI","WJ","WK","WL","WM","WN","WO","WP","WQ","WR","WS","WT","WU","WV","WW","WX","WY","WZ","XA","XB","XC","XD","XE","XF","XG","XH","XI","XJ","XK","XL","XM","XN","XO","XP","XQ","XR","XS","XT","XU","XV","XW","XX","XY","XZ","YA","YB","YC","YD","YE","YF","YG","YH","YI","YJ","YK","YL","YM","YN","YO","YP","YQ","YR","YS","YT","YU","YV","YW","YX","YY","YZ","ZA","ZB","ZC","ZD","ZE","ZF","ZG","ZH","ZI","ZJ","ZK","ZL","ZM","ZN","ZO","ZP","ZQ","ZR","ZS","ZT","ZU","ZV","ZW","ZX","ZY","ZZ"); $ball_color=Array('#66cccc','red','green','pink','yellow','violet','magenta','maroon','olive','chocolate'); $ball_name=Array('蒂芙妮蓝','红','green','pink','yellow','violet','magenta','maroon','olive','chocolate'); diff --git a/trunk/web/include/db_info.inc.php b/trunk/web/include/db_info.inc.php index 094083ced5f..667d31da237 100644 --- a/trunk/web/include/db_info.inc.php +++ b/trunk/web/include/db_info.inc.php @@ -25,7 +25,7 @@ static $OJ_LANG="cn"; //默认语言, 中文修改为"cn" static $OJ_SIM=false; //显示相似度,注意只是显示,启动检测的开关在judge.conf,且自己抄自己不计为抄袭 static $OJ_DICT=false; //显示在线翻译 -static $OJ_LANGMASK=16777140; //掩码计算器:https://pigeon-developer.github.io/hustoj-langmask/ +static $OJ_LANGMASK=33554356; //掩码计算器:https://pigeon-developer.github.io/hustoj-langmask/ static $OJ_ACE_EDITOR=true; // 是否启用有高亮提示的提交代码输入框 static $OJ_AUTO_SHARE=false; //true: 设为true则通过的题目可在统计页查看其他人代码. static $OJ_CSS="white.css"; // bing.css | kawai.css | black.css | blue.css | green.css | hznu.css diff --git a/trunk/web/template/syzoj/faqs.php b/trunk/web/template/syzoj/faqs.php index 830ac1d87b9..bde6cecc390 100644 --- a/trunk/web/template/syzoj/faqs.php +++ b/trunk/web/template/syzoj/faqs.php @@ -125,6 +125,25 @@ a = line.split() print(int(a[0]) + int(a[1])) +

仓颉 (.cj)

+
+
+import std.core.*
+import std.console.*
+import std.collection.*
+import std.convert.*
+
+main(): Int64 {
+    while (let Some(line) <- Console.stdIn.readln()) {
+        let nums = map(Int.parse)(line.split(" "))
+        let sum = reduce({a: Int64, b: Int64 => a + b})(nums)
+        if (let Some(r) <- sum) {
+            Console.stdOut.writeln(r)
+        }
+    }
+    return 0
+}
+
diff --git a/trunk/web/template/syzoj/showsource.php b/trunk/web/template/syzoj/showsource.php index 81b2cd9db13..81a1a329ebd 100644 --- a/trunk/web/template/syzoj/showsource.php +++ b/trunk/web/template/syzoj/showsource.php @@ -27,7 +27,7 @@ if ($brush=='clang') $brush='c'; if ($brush=='clang++') $brush='c++'; if ($brush=='obj-c') $brush='c'; -if ($brush=='python3') $brush='python'; +if ($brush=='python3'||$brush=='cangjie') $brush='python'; if ($brush=='swift') $brush='csharp'; if ($brush=='r') $brush='delphi'; echo "
";
diff --git a/trunk/web/template/syzoj/showsource2.php b/trunk/web/template/syzoj/showsource2.php
index fcd15969155..2993b086536 100644
--- a/trunk/web/template/syzoj/showsource2.php
+++ b/trunk/web/template/syzoj/showsource2.php
@@ -4,7 +4,7 @@
 $brush=strtolower($language_name[$slanguage]);
 if ($brush=='pascal') $brush='delphi';
 if ($brush=='obj-c') $brush='c';
-if ($brush=='python3') $brush='python';
+if ($brush=='python3'||$brush=='cangjie') $brush='python';
 if ($brush=='clang') $brush='c';
 if ($brush=='clang++') $brush='c++';
 if ($brush=='freebasic') $brush='vb';
diff --git a/trunk/web/template/syzoj/submitpage.php b/trunk/web/template/syzoj/submitpage.php
index 34e691d314a..a41adf0c60a 100644
--- a/trunk/web/template/syzoj/submitpage.php
+++ b/trunk/web/template/syzoj/submitpage.php
@@ -367,7 +367,7 @@ function resume(){
 	}
 }
 function switchLang(lang){
-   var langnames=new Array("c_cpp","c_cpp","pascal","java","ruby","sh","python","php","perl","csharp","objectivec","vbscript","scheme","c_cpp","c_cpp","lua","javascript","golang","sql","fortran","matlab","cobol","r");
+   var langnames=new Array("c_cpp","c_cpp","pascal","java","ruby","sh","python","php","perl","csharp","objectivec","vbscript","scheme","c_cpp","c_cpp","lua","javascript","golang","sql","fortran","matlab","cobol","r","c_cpp","python");
    editor.getSession().setMode("ace/mode/"+langnames[lang]);
 
 }