Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cangjie #1048

Merged
merged 15 commits into from
Nov 30, 2024
26 changes: 21 additions & 5 deletions trunk/core/judge_client/judge_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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};
Expand Down Expand Up @@ -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");
}
Expand Down Expand Up @@ -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};
Expand Down Expand Up @@ -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");
Expand All @@ -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 )
){

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
)
{
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions trunk/core/judge_client/okcalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions trunk/core/judge_client/okcalls32.h
Original file line number Diff line number Diff line change
Expand Up @@ -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};
4 changes: 3 additions & 1 deletion trunk/core/judge_client/okcalls64.h
Original file line number Diff line number Diff line change
Expand Up @@ -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};
1 change: 1 addition & 0 deletions trunk/core/judge_client/okcalls_aarch64.h
Original file line number Diff line number Diff line change
Expand Up @@ -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};
2 changes: 2 additions & 0 deletions trunk/core/judge_client/okcalls_arm.h
Original file line number Diff line number Diff line change
Expand Up @@ -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};
2 changes: 2 additions & 0 deletions trunk/core/judge_client/okcalls_mips.h
Original file line number Diff line number Diff line change
Expand Up @@ -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};
2 changes: 2 additions & 0 deletions trunk/install/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions trunk/web/include/const.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
2 changes: 1 addition & 1 deletion trunk/web/include/db_info.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 19 additions & 0 deletions trunk/web/template/syzoj/faqs.php
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,25 @@
a = line.split()
print(int(a[0]) + int(a[1]))</code></pre>
</div>
<p><strong>仓颉 (.cj)</strong></p>
<div class="ui existing segment">
<pre style="margin-top: 0; margin-bottom: 0; ">
<code class="lang-python">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
}</code></pre>
</div>
</div>
</div>

Expand Down
2 changes: 1 addition & 1 deletion trunk/web/template/syzoj/showsource.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 "<pre class=\"brush:".$brush.";\">";
Expand Down
2 changes: 1 addition & 1 deletion trunk/web/template/syzoj/showsource2.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
2 changes: 1 addition & 1 deletion trunk/web/template/syzoj/submitpage.php
Original file line number Diff line number Diff line change
Expand Up @@ -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]);

}
Expand Down