Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
TommyTT
1024云IDE应用挑战赛
提交
cc89405f
1024云IDE应用挑战赛
项目概览
TommyTT
/
1024云IDE应用挑战赛
该项目与 Fork 源项目分叉
Fork自
Cloud IDE / 1024云IDE应用挑战赛
通知
4
Star
20
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
1024云IDE应用挑战赛
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cc89405f
编写于
11月 01, 2022
作者:
6
635677437d755007c09848d3
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
java代码不需要固定类名了
上级
374a4b4c
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
69 addition
and
15 deletion
+69
-15
README.MD
README.MD
+8
-3
common.py
common.py
+41
-2
config/java/example.java
config/java/example.java
+0
-1
requirements
requirements
+2
-1
router.py
router.py
+1
-1
server.py
server.py
+17
-7
未找到文件。
README.MD
浏览文件 @
cc89405f
...
...
@@ -15,6 +15,7 @@
2.
各语言代码初始化模版来自斐波那契数列递归算法(一般情况下可用作benchmark)
3.
代码执行超时功能(默认10s)
4.
接口限流(默认5 QPS)
5.
java不用固定类名(正则匹配类名后生成对应的文件名)
5.
支持标准输入
以[leetcode 1题](https://leetcode.cn/problems/two-sum/description/) 两数之和为例:
...
...
@@ -39,12 +40,16 @@ language_list = [
"cat > run.go << EOF
\n
"
,
"golang"
),
Language
(
"java"
,
"javac Example.java && java Example"
,
"cat > Example.java << EOF
\n
"
,
Language
.
java_run_way
,
# 支持特殊的代码文件生成方式
Language
.
java_file_way
,
"java"
),
Language
(
"nodejs"
,
"FORCE_COLOR=0 node run.js"
,
"cat > run.js << EOF
\n
"
,
"javascript"
)
"javascript"
),
Language
(
"lua"
,
"lua run.lua"
,
"cat > run.lua << EOF
\n
"
,
"lua"
)
]
```
common.py
浏览文件 @
cc89405f
import
logging
import
os.path
import
regex
as
re
from
typing
import
Dict
TAG_STR
=
"webcode:{}-1.0"
DOCKER_CONFIG_DIR
=
"config/{}"
java_class_name
=
re
.
compile
(
r
"(?<=\n|^)(public\s)?(class|interface|enum)\s([^\n\s]*)"
)
from
docker
import
APIClient
...
...
@@ -35,6 +37,28 @@ class Language:
def
set_image
(
self
,
image
):
self
.
image
=
image
@
staticmethod
def
java_file_way
(
code
):
name
=
Language
.
get_file_name_in_java
(
code
)
return
"cat > {}.java << EOF
\n
"
.
format
(
name
)
+
code
+
"
\n
EOF
\n
"
@
staticmethod
def
java_run_way
(
code
):
name
=
Language
.
get_file_name_in_java
(
code
)
return
"javac {}.java && java {}"
.
format
(
name
,
name
)
# 找到java的文件名
@
staticmethod
def
get_file_name_in_java
(
code
):
name
=
"example"
for
c
in
java_class_name
.
findall
(
code
):
if
len
(
c
)
!=
3
or
c
[
1
]
!=
'class'
:
continue
if
c
[
0
]
==
'public'
:
return
c
[
2
]
name
=
c
[
2
]
return
name
def
build_image
(
self
):
try
:
generator
=
low_level_client
.
build
(
path
=
DOCKER_CONFIG_DIR
.
format
(
self
.
name
),
...
...
@@ -71,8 +95,8 @@ language_list = [
"cat > run.go << EOF
\n
"
,
"golang"
),
Language
(
"java"
,
"javac Example.java && java Example"
,
"cat > Example.java << EOF
\n
"
,
Language
.
java_run_way
,
# 支持特殊的代码文件生成方式
Language
.
java_file_way
,
"java"
),
Language
(
"nodejs"
,
"FORCE_COLOR=0 node run.js"
,
...
...
@@ -85,3 +109,18 @@ language_list = [
]
Languages
:
Dict
[
str
,
Language
]
=
{
v
.
name
:
v
for
v
in
language_list
}
if
__name__
==
"__main__"
:
code
=
"""
class Example {
public static void main(String[] args) {
System.out.print(fib(15) + " via java");
}
}
public class aaaa {
public static void main(String[] args) {
System.out.print(fib(15) + " via java");
}
}
"""
print
(
Language
.
get_file_name_in_java
(
code
))
config/java/example.java
浏览文件 @
cc89405f
import
java.util.*
;
// 不要修改class name
public
class
Example
{
static
long
fib
(
long
n
)
{
if
(
n
<=
1
)
return
n
;
...
...
requirements
浏览文件 @
cc89405f
docker==6.0.0
Flask==2.2.2
func-timeout==4.3.5
flask_limiter==2.7.0
\ No newline at end of file
flask_limiter==2.7.0
regex==2022.10.31
\ No newline at end of file
router.py
浏览文件 @
cc89405f
...
...
@@ -39,4 +39,4 @@ def index():
if
__name__
==
"__main__"
:
t
=
threading
.
Thread
(
target
=
server
.
load
)
t
.
start
()
app
.
run
(
"0.0.0.0"
,
3000
,
debug
=
Fals
e
)
app
.
run
(
"0.0.0.0"
,
3000
,
debug
=
Tru
e
)
server.py
浏览文件 @
cc89405f
...
...
@@ -32,16 +32,27 @@ def execute(code, _type, stdin=""):
if
_type
not
in
Languages
or
Languages
[
_type
].
image
is
None
:
raise
Exception
(
"找不到运行环境,请等待后台创建"
)
result
=
""
command
=
""
try
:
# 生成代码文件
command
=
Languages
[
_type
].
file_way
+
code
+
"
\n
EOF
\n
"
# 生成stdin,通过管道给到代码
# step1 生成代码文件
if
callable
(
Languages
[
_type
].
file_way
):
# 支持特殊文件名的语言
command
+=
Languages
[
_type
].
file_way
(
code
)
else
:
command
=
Languages
[
_type
].
file_way
+
code
+
"
\n
EOF
\n
"
# step2 生成stdin,通过管道给到代码
if
stdin
!=
""
:
command
+=
"cat > stdin << EOF
\n
"
+
stdin
+
"
\n
EOF
\n
"
command
+=
"cat stdin | "
# 执行代码
command
+=
Languages
[
_type
].
run_way
# print(command)
# step3 执行代码
if
callable
(
Languages
[
_type
].
run_way
):
command
+=
Languages
[
_type
].
run_way
(
code
)
else
:
command
+=
Languages
[
_type
].
run_way
print
(
command
)
container
=
client
.
containers
.
run
(
Languages
[
_type
].
image
,
stderr
=
True
,
stdout
=
True
,
tty
=
True
,
network_disabled
=
True
,
detach
=
True
,
...
...
@@ -70,4 +81,3 @@ if __name__ == "__main__":
load
()
res
=
execute
(
"a=input()
\n
print(a=='1234')
\n
"
,
"python"
,
"1234"
)
print
(
res
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录