「工具分享」Checker Script for Linux
以前整的一个 Linux 下对拍程序 qwq.
建一个文件夹, 假设叫 dir
, 然后把 checker.sh
扔进去, 顺便 chmod +x checker.sh
. 你需要自己设置一下代码里的 CHECKER_PATH
, 指向 dir
.
然后在 ~/.zshrc
或者 ~/.bashrc
里加一句 alias checker='/path/to/dir/checker.sh'
, 重启终端就能使用啦.
使用方式: checker <source-code> <standard-code> <generator-code>
, 此后与脚本简单交互一下即可. 注意三个程序必须使用标准输入输出, 不开文件.
特性:
比较 colorful.
隔离运行, 不会在你的工作目录创建任何临时文件.
自动编译, 默认编译开关有
-std=c++2a -Ofast
, 修改代码之后直接重新运行 checker 就能对拍.计数对拍次数, 且会在固定位置实时输出对拍次数, 不会刷屏.
找到错误数据后自动终止, 将输入文件移动到
./errdata.in
, 并且会弹出警告窗口.对拍结束 (找到错误数据或者
Ctrl+C
终止), 自动清除dir
内的临时文件. 所以不要在这里面放其他东西.暂时不支持同时进行多个对拍, 不太会写那种东西. ()
现学现卖的塑料语法啊. (((
#!/bin/bash
#+Rainybunny+#
# @varriables
# $1: your program's source code;
# $2: standard program's source code;
# $3: data generator's source code;
CHECKER_PATH=/home/rainybunny/Studio/Workspace/.checker
CHECKER_NAME="\033[1mchecker\033[0m"
FATAL_ERROR=2
FOUND_ERROR_DATA=1
src=$1
std=$2
gen=$3
function registerChecker() {
printf "$CHECKER_NAME: Collecting files...\n"
if ! cp $src $CHECKER_PATH/src.cpp; then
printf "$CHECKER_NAME: \33[1;31merror:\033[0m The source file does not exist.\n"
exit $FATAL_ERROR
fi
if ! cp $std $CHECKER_PATH/std.cpp; then
printf "$CHECKER_NAME: \33[1;31merror:\033[0m The source file does not exist.\n"
exit $FATAL_ERROR
fi
if ! cp $gen $CHECKER_PATH/gen.cpp; then
printf "$CHECKER_NAME: \33[1;31merror:\033[0m The source file does not exist.\n"
exit $FATAL_ERROR
fi
printf "$CHECKER_NAME: Compiling files...\n"
printf ">> \033[1;32mCompilation information of \`%s'\033[0m <<\n" $src
if ! g++ $CHECKER_PATH/src.cpp -o $CHECKER_PATH/src -std=c++2a -Ofast; then
printf "$CHECKER_NAME: \33[1;31merror:\033[0m File compilation failed.\n"
exit $FATAL_ERROR
fi
printf "\n>> \033[1;32mCompilation information of \`%s'\033[0m <<\n" $std
if ! g++ $CHECKER_PATH/std.cpp -o $CHECKER_PATH/std -std=c++2a -Ofast; then
printf "$CHECKER_NAME: \33[1;31merror:\033[0m File compilation failed.\n"
exit $FATAL_ERROR
fi
printf "\n>> \033[1;32mCompilation information of \`%s'\033[0m <<\n" $gen
if ! g++ $CHECKER_PATH/gen.cpp -o $CHECKER_PATH/gen -std=c++2a -Ofast; then
printf "$CHECKER_NAME: \33[1;31merror:\033[0m File compilation failed.\n"
exit $FATAL_ERROR
fi
}
function clearTemp() {
printf "\n$CHECKER_NAME: Clearing temporary files...\n"
find $CHECKER_PATH/* | grep -v $CHECKER_PATH/*.sh | xargs rm
printf "$CHECKER_NAME: Exit.\n"
}
function interuptCall() {
printf "\n$CHECKER_NAME: SIGINT recieved."
clearTemp
exit 0
}
registerChecker
printf "\n$CHECKER_NAME: "
read -p "Please enter to start testing..." tmp
trap 'interuptCall' SIGINT
printf "\nStatus:\n\n"
cnt=0
while true; do
$CHECKER_PATH/gen > $CHECKER_PATH/data.in
$CHECKER_PATH/src < $CHECKER_PATH/data.in > $CHECKER_PATH/src.out
$CHECKER_PATH/std < $CHECKER_PATH/data.in > $CHECKER_PATH/std.out
cnt=`expr $cnt + 1`
if diff -w -q $CHECKER_PATH/src.out $CHECKER_PATH/std.out; then
printf "\033[1A\r"
printf "\33[1;32mAccepted\033[0;32m on test\033[1;34m #%d.\033[0m\n" $cnt
else
printf "\33[1;31mWrong Answer\033[0;32m on test\033[1;34m #%d.\033[0m\n" $cnt
cp $CHECKER_PATH/data.in ./errdata.in
notify-send --icon=dialog-warning --urgency=normal "Error data found!" \
"Data has been saved as \`\$PWD/errdata.in\'."
clearTemp
exit $FOUND_ERROR_DATA
fi
done
「工具分享」Checker Script for Linux的更多相关文章
- 「工具推荐」golang 代码可视化工具 go-callvis
「工具推荐」go-callvis go-callvis是相对 以图片的形式展示了go程序的调用关系,这个工具在看复杂项目时尤其有用. 亲测,借助它看祖传golang代码,头痛好多了. 安装 go ge ...
- 「资料分享」理解uboot要看哪些书
最开始是看的韦东山老师的视频,确实很不错,不过总感觉是不够深入扎实,还是想自己看看书,就总结搜罗下,以供参考 学习交流可以添加 微信读者交流①群 (添加微信:coderAllen) 程序员技术交流①群 ...
- 「干货分享」模块化编程和maven配置实践一则
封面 说到模块化编程,对我个人而言首先起因于团队协作的需要,也就是组织架构结构特点来决定,而不是跟风求得自我认同,看看我们团队的组织结构: 其中: 基础平台部职责: 1.AI实验室:语音,图像 ...
- Linux 小知识翻译 - 「Shell 脚本」
这次说说「Shell 脚本」. 根据上回的介绍,Shell就是「作为联系Linux和用户的接口而存在的软件」.在Linux环境中,通过Shell来操作系统很普遍. 这里,考虑到有时候可能想要「多次的进 ...
- 「工具」三分钟了解一款在线流程绘制工具:Whimsical
Whimsical 是一款在线流程绘制工具,只需要一个浏览器就随时随地绘制精美的流程图.除了流程图(Flowcharts)功能,官方还推出了线框图(Wireframes).便利贴(Sticky Not ...
- [转帖]「日常小记」linux中强大且常用命令:find、grep
「日常小记」linux中强大且常用命令:find.grep https://zhuanlan.zhihu.com/p/74379265 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍 ...
- 前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
- iDoc「文档」功能强势升级!一键分享,即刻预览!(201903-1版本更新)
小摹很想知道小伙伴们在面对众多杂乱的文档时,都是如何管理起来的呢?iDoc的「文档」功能,很多小伙伴还没有用起来,甚至都没有注意到iDoc还有这样一个功能.今天小摹就给大家介绍一下iDoc的「文档」功 ...
- Linux 小知识翻译 - 「桌面环境」
这次聊聊桌面环境. 上次聊了 X Window System 相关的内容,虽然令人意外,但X Window System 和桌面环境不是一回事.请大家稍微考虑一下. X Window System 是 ...
- Linux 小知识翻译 - 「架构 续」(arch)
上次,从「计算机的内部构造」的角度解释了架构这个术语.这次,介绍下架构中经常提到的「i386架构」及之后的「i486」,「i586」. 安装Linux的时候,很多人即使不了解但也会经常听到i386架构 ...
随机推荐
- windows宝塔面板请使用正确的入口登录面板问题解决记录
问题起因:浏览器升级面板的时候,浏览器卡死,导致登录不进,cmd里面修复或者更新依然显示请使用正确的入口登录面板. 解决方法: 先停止宝塔面板,然后将下面这个目录删掉 C:\Program Files ...
- 识别指定window窗口的文本
1. 简单需求 通过图文识别读取一个指定window窗口的文本. 获取窗口句柄,截图保存成bitmap ,调用图文识别库. 测试结果是对中文下的识别不是特别好. 需要注意的是,tessdata要下载指 ...
- 【性能测试】01基础知识篇-并发用户、RPS、TPS的解读
本文介绍并发用户.RPS.TPS的基本概念以及三者之间的关系. 术语定义 并发用户:在性能测试工具中,一般称为虚拟用户(Virtual User,简称VU),指的是现实系统中操作业务的用户. 说明 并 ...
- frida 连接夜神模拟器
adb connect 127.0.0.1:62001 adb devices adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27 ...
- 一、STM32F103C8T6--GPIO
STM32f103c8t6 32位Cortex-M3内核 RISC处理器,最高主频72MHZ,Flash:64KB,SRAM:20KB 片上外设: I/O端口: 多达37个GPIO引脚(支持复用功能) ...
- confd+Nacos实现nginx配置文件管理
场景: 由于公司内部站点保护的需求, 将部分的站点添加白名单, 这边的操作是在nginx配置文件中添加如下代码 allow 127.0.0.1: deny all; 但随之问题也出现了, 需要添加一个 ...
- MySQL管理工具之Beekeeper Studio
简介 Beekeeper Studio 是一个跨平台的 SQL 编辑器和数据库管理客户端,可以在 Linux.Mac.Windows 上使用. Beekeeper Studio 社区版是免费开源的,支 ...
- Java根据前端返回的字段名进行查询数据
在Java后端开发中,我们经常需要根据前端传递的参数(如字段名)来动态查询数据库中的数据.这种需求通常出现在需要实现通用查询功能或者复杂查询接口的场景中.为了实现这个功能,我们需要结合Java的反射机 ...
- new Date()在ios下的坑
坑位 最新在开发一个时间轴功能,在使用new Date()的时候发现在IOS下全是NaN. Why new Date("2018-04-27 11:11")在chrome,fire ...
- Python开发一个Instant Messaging(IM)(即时通讯)聊天工具:从理论到实践
一.引言 在现代社会中,即时通讯工具已经成为人们日常沟通的重要工具.开发一个IM聊天工具不仅能够提高我们的编程技能,还能让我们更好地理解即时通讯系统的原理.本文将详细介绍如何开发一个简单的IM聊天工具 ...