首页 > 其他 > 详细

将lemon下的subtask转成UOJ支持的格式

时间:2019-04-12 19:28:38      阅读:364      评论:0      收藏:0      [点我收藏+]

有些题目subtask下文件数量很多,手动一个一个复制改名比较麻烦,写一个py脚本就方便得多。

UOJ下的subtask格式具体可以看社区版的wiki

下面直接上py代码

数据放在subtask子文件夹下的

import os, shutil

subtasks = {}
cnt = {}
tot = 0
firstsuf = 'unknown'
pre = 'data'
in_suf, out_suf = 'in', 'out'
path=os.getcwd()

for root, dirs, files in os.walk('.'):
    for name in files:
        p=str(name).find('.')
        suf=name[p:]
        if root[-8:-1]=='Subtask' and (suf=='.in' or suf=='.out' or suf=='.ans'):
            if (suf=='.ans'): out_suf = 'ans'
            if firstsuf == 'unknown': firstsuf = suf
            if not subtasks.has_key(root): subtasks[root]=0
            if (not cnt.has_key(suf)): cnt[suf]=0
            cnt[suf]+=1
            if suf==firstsuf: subtasks[root]+=1
            newname=pre+str(cnt[suf])+suf
            shutil.copyfile(os.path.join(root,name), os.path.join(path, newname))
            print(root, firstsuf, subtasks[root], name)

with open('.\\problem.conf', 'w') as f:
    f.write('n_subtasks '+str(len(subtasks))+'\n')
    i=1
    for key,val in subtasks.items():
        tot+=val
        print(key, val, tot)
        f.write('subtask_end_'+str(i)+' '+str(tot)+'\n')
        f.write('subtask_score_'+str(i)+' 0\n')
        i+=1
    f.write('n_tests '+str(tot)+'\n')
    f.write('input_pre '+pre+'\n')
    f.write('output_pre '+pre+'\n')
    f.write('input_suf '+in_suf+'\n')
    f.write('output_suf '+out_suf+'\n')
    f.write('time_limit 1\n')
    f.write('memory_limit 128\n')
    f.write('output_limit 64\n')
    f.write('use_builtin_judger on\n')
    f.write('use_builtin_checker ncmp')

将lemon下的subtask转成UOJ支持的格式

原文:https://www.cnblogs.com/naiij/p/10697936.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!