标签:运行 而不是 ges 估计 测量 异常 处理 目标 路径
题目来源:
简述一下事情的经过
一天邹欣老师在群里向我提出了一个问题:
“把这个题目分析一下,主要是从工程上考虑,假如50个学生提交了程序,你如何写一个测试的系统,判断对错,和测量学生程序的对错”
“最长的能首尾相连的英语单词链,每个单词最多只能使用一次”
这里题目的描述有一点不明确,关于“最长”,题目并没有给出详细定义。
因此可能有两种情况。
单词链中单词数最多 |
单词链中字符数最多 |
(看到这里我似乎想起了自己一年前是怎么解决北京地铁网络中最短距离与最少换乘的。)
但是不管怎么样,这道题是可以转化成“图”来做的:
例:单词“apple”实际上相当于一条连接a点与e点的权重为5(单词长度)的边。
所以,这道题就变成了这样:
从设计的角度来说,程序可以分为以下几个模块
1. 处理命令行参数(命令处理)
2. 读取文件并构建成图 (数据输入与数据转化)
3. 根据一定的算法处理图,得到目标解 (核心代码)
4. 将解按照一定格式写入文件 (输出)
由于这篇博客不是主要谈这个的,所以这里不细说
“假如50个学生提交了程序,你如何写一个测试的系统,判断对错,和测量学生程序的对错”
Wordlist.exe /i input1.txt /o output1.txt
以表现最优秀的程序作为满分参考线,或
以表现最普通的程序作为及格基础线,或
以平均表现作为85分线
最终还将综合博客的情况与Github中的提交记录进行评估
开发时是否将代码的功能进行细分,并按照模块化方式进行开发与提交
由于我的想法是模拟成图,因此测试用例就用图的方式描述
是否是连通图,图中是否有环,图的规模分别在10条边、50条边、100条边
是否是连通图,图中是否有环,图的规模在500条边、1000条边、5000条边、10000条边
(假设我有以上的所有测试用例的.txt文件&&正确用例&&用例对应的答案的.txt文件。。。)
使用PowerShell与批处理进行文件的批量下载、解压、运行、结果比对
最终目标应该是将以下的功能集成在一起,但由于时间和个人能力所限,暂时只能做成这样。
(假设我有一个这样的.exe测试程序,能够验证运行结果的正确性)
提交的github链接为一个字符串,在字符串后追加"/archive/master.zip"即为下载链接。
使用如下的命令可下载工程压缩包。
代码来自:代码来自这里
$src = ‘https://github.com/ChildishChange/C0-compile/archive/master.zip‘ $des = "C:\User\desktop\14061195.zip" Invoke-WebRequest -uri $src -OutFile $des Unblock-File $des
代码来自:代码来自这里
Function Unzip-File() { param([string]$ZipFile,[string]$TargetFolder) #确保目标文件夹必须存在 if(!(Test-Path $TargetFolder)) { mkdir $TargetFolder } $shellApp = New-Object -ComObject Shell.Application $files = $shellApp.NameSpace($ZipFile).Items() $shellApp.NameSpace($TargetFolder).CopyHere($files) } #将zip文件E:\a.zip解压到e:\test,目录 Unzip-File -ZipFile E:\a.zip -TargetFolder e:\test #其实我觉得可以直接全选右键解压。。。
获得所有程序对正确用例的输出:
for /f "delims=;" %%i in (‘dir /b *.exe‘) do (%%i /i input1.txt /o %%i.txt)
将上一步输出的文件用作测试程序的输入并进行结果比对:
for /f "delims=;" %%i in (‘dir /b *.txt‘) do (judge.exe %%i)
将错误用例的控制台输出重定向到文件分别人工查看:
for /f "delims=;" %%i in (‘dir /b *.exe‘) do ( %%i >> %%i.txt)
可以使用命令行工具简单分析程序运行的时间,邹欣老师在博客中给出了一些链接
ECHO Start Measure %Time% >> timer.txt YOUR COMMAND ECHO Stop Measure %Time% >> timer.txt
最终决定采用上述方式简单估计程序运行的时间,但是不好之处是只精确到0.01秒
(由于timer.exe与ptime在64位系统上运行会存在较大误差,因此不选用)
因为个人能力问题,没有找到命令行适用的内存占用分析工具,如果以后找到了,将补全博客。
同时个人认为,由于VS2015中提供了十分强大的性能分析工具,因此在性能分析时,可以直接使用而不是自己实现一个。同时也是个人能力问题,只能想到手工运行性能分析工具来对性能进行评估,如果以后能有更好的方法,将补全博客。
其实关于这个问题我有偷懒的想法,由于提交的程序的特殊性,我似乎可以通过一些渠道,联系到管理我校C语言作业的测评网站的老师,申请使用学校的测评系统,完成整个测评流程(我真懒)
标签:运行 而不是 ges 估计 测量 异常 处理 目标 路径
原文地址:http://www.cnblogs.com/ChildishChange/p/7161814.html