【日志】Debug和简单对拍代码
面向样例编程的调试
有时候写完代码需要进行Debug,还需要对拍。
下面基于vscode进行说明。
测试样例插件 CPH
cph是一个很好用的插件,可以对测试样例进行快速方便测试(虽然在我这里经常出现奇奇怪怪的bug)。
不过其他条件下一般是用不了这个插件的,所以需要一点其他的测试方式。
通过可变参数Debug(c++)
从c++11之后,宏、函数模板可以支持任意参数,只需要像下面这样就可以:
#define defv(...) defuse(__VA_ARGS__)template<typename... T> print(T... ) {}
通过配合错误输出流cerr
(cph中会输出在错误信息中,其他输出看条件),可以独立输出对应调试信息。
#ifndef ONLINE_JUDGE
template<typename T>
inline void _debug(const char *name, T tag) {std::cerr << name << "=" << tag << std::endl;
}
template<class T, class... T_>
inline void _debug(const char *name, T begin, T_... end) {while (*name != ',')std::cerr << *name ++;std::cerr << "=" << begin << ",";_debug(name + 1, end...);
}
#define debug(...) std::cerr << __LINE__ << ": ", _debug(#__VA_ARGS__, __VA_ARGS__)
#else
#define debug(...)
#endif
一般的OJ上都会有定义ONLINE_JUDGE
宏,因此这样可以避免提交时输出调试信息。
使用python进行对拍
使用python编写对拍程序是一件非常方便的事情。下面就是一个简单的对拍程序。
其中,self为待验证的代码,ans为暴力得出的程序。
import os
import randomdata = os.getcwd() + "\data.in"def Create():l = []with open(data, "w") as file:test = random.randint(1, 100)file.write(str(test) + '\n')l.append(str(test) + '\n')for i in range(test):tmp = random.randint(2, 1000)file.write(str(tmp) + '\n')l.append(str(tmp) + '\n')return ltest = 100
ok = True
while test > 0:case = Create()os.system("python self.py < data.in > out.out")os.system("python ans.py < data.in > ans.out")if os.system("fc out.out ans.out"):print("Case: ")for i in range(len(case)):print(case[i], end = '')os.system("pause")breaktest -= 1
其中的os.system()
是使用了控制台命令。如果对拍的是c++程序,则应对应exe
后缀文件。
Create
Create函数指的是生成测试用例,需要使用random进行生成。根据题目的不同,需要做出对应的调整。
test组数
一般来说,100组数据已经够多了,所以设置100组随机生成已经足够测(除非够幸运测了100组还测不出问题)(然后我跑了10000组结果好久才跑完)。
特殊样例
有一些特殊样例需要自己构造,所以这个简单对拍的局限还是存在的,但是应付一些场景已经足够了。
CYaRon
CYaRon是洛谷的一个开源项目,可用于生成测试数据。传送门:CYaRon:测试数据生成利器(当然,如果是临时要跑对拍的话,还是自己写个简单的吧)
【日志】Debug和简单对拍代码相关推荐
- springboot开启debug日志_SpringBoot日志快速上手简单配置
默认配置 日志级别从低到高分为: TRACE < DEBUG < INFO < WARN < ERROR < FATAL. 如果设置为 INFO ,则低于 INFO 的信 ...
- 日志打印、main函数中代码执行顺序
文章目录 1.设置时区 2.日志打印 3.main函数中代码执行顺序 1.设置时区 我们要设置成 CST 时区,以保证正确地显示日期.时间. 我们常看到的时区有如下几个: PST:美国太平洋标准时间, ...
- 100转换成二进制 java,一段简单的java代码,十进制转二进制
一段简单的java代码,十进制转二进制 mip版 关注:188 答案:5 悬赏:40 解决时间 2021-01-23 23:14 已解决 2021-01-23 05:43 代码如下,希望可以帮我 ...
- 如何简单计算patch代码变化量?
计算代码量从程序员的角度来说,真是个变态的想法.从系统集成的角度来看,模块代码量越大,显然出错的概率越高,可能需要更多的检视或者测试. 但是很多项目上,很多项目经理,或者管理人员比较喜欢算代码量,个人 ...
- 解析 WEB 中所有 URL 的简单牛B代码,先保存起来,方式将来找不到了
解析 WEB 中所有 URL 的简单牛B代码,先保存起来,方式将来找不到了 2011-11-22 16:48 by 通用信息化建设平台, 1471 ...
- js php滚动图代码,JavaScript_JS实现的N多简单无缝滚动代码(包含图文效果),本文实例讲述了JS实现的N多简 - phpStudy...
JS实现的N多简单无缝滚动代码(包含图文效果) 本文实例讲述了JS实现的N多简单无缝滚动代码.分享给大家供大家参考,具体如下: 实现原理很简单,注册事件之后,立即将元素的innerHTML累加一次. ...
- python画折线图代码-python绘制简单折线图代码示例
1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...
- python画折线图详解-python绘制简单折线图代码示例
1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...
- php留言簿代码,php自治简单留言板代码
php自治简单留言板代码 $lianjie = mysql_connect("localhost","root","xiaolie") or ...
最新文章
- 植物MWAS研究—谷子产量与微生物组关联分析
- Arcgis Server Manager发布ArcGISTiledMapServiceLayer服务
- jenkins安装插件一直不动
- 如此火爆的ZooKeeper,到底如何选主?
- java对.txt文件进行读取方法实战---室友是网络安全方向,帮他提取文件里的特定ip
- ORA-12170:TNS:连接超时
- 什么是JSONP以及它是怎么产生的
- Path画直线与弧线
- Comments on The Ph.D. grind------by Yishi
- 如何在Mac OS X 10.6.4上卸载Python 2.7?
- k8s上安装并初始化Helm,helm基础使用教程
- android xml设置roboto字体,Android设置Roboto字体用粗体,斜体,常规,…(类似于自定义字体系列)...
- 多策略调和的布谷鸟搜索算法
- 电子密码锁设计(附源码和原理图)
- 深入浅出Oracle Spatial
- python数据分析:客户价值分析案例实战
- MATLAB 手把手带你制作第一个APP designer程序(电子词典)
- MAC使用Bootcamp安装win7
- 生僻字用计算机怎么弹歌曲,抖音生僻字简谱:计算器数字乐谱计算器弹奏音乐总结...
- 频谱分析系列:1dB增益压缩点概述及测试
热门文章
- 【干货】人工智能专业重要词汇表(红宝书)
- int java 声明_怎样用java定义一个int数组 C++ 怎么声明一个整型数组?
- apdl与传统计算机语言,ANSYS经典APDL语言详解及ANSYS二次开发
- excel中插入word对象且以wold图标来显示
- java color类红黄蓝_一种具有红黄蓝母体结构多发色体系的活性染料及其制备方法和应用与流程...
- 配音软件哪个好用?这几个软件值得你试一试
- 百城百店 宝瓷林.北京SKP商场品牌店开业
- 低学历该如何逆袭,2023年给你一个赚钱翻盘路径
- 地下城堡游戏小脚本儿——自动炼金
- 文本表示(一)—— word2vec(skip-gram CBOW) glove, transformer, BERT