以前整的一个 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的更多相关文章

  1. 「工具推荐」golang 代码可视化工具 go-callvis

    「工具推荐」go-callvis go-callvis是相对 以图片的形式展示了go程序的调用关系,这个工具在看复杂项目时尤其有用. 亲测,借助它看祖传golang代码,头痛好多了. 安装 go ge ...

  2. 「资料分享」理解uboot要看哪些书

    最开始是看的韦东山老师的视频,确实很不错,不过总感觉是不够深入扎实,还是想自己看看书,就总结搜罗下,以供参考 学习交流可以添加 微信读者交流①群 (添加微信:coderAllen) 程序员技术交流①群 ...

  3. 「干货分享」模块化编程和maven配置实践一则

    ​ 封面 说到模块化编程,对我个人而言首先起因于团队协作的需要,也就是组织架构结构特点来决定,而不是跟风求得自我认同,看看我们团队的组织结构: ​ 其中: 基础平台部职责: 1.AI实验室:语音,图像 ...

  4. Linux 小知识翻译 - 「Shell 脚本」

    这次说说「Shell 脚本」. 根据上回的介绍,Shell就是「作为联系Linux和用户的接口而存在的软件」.在Linux环境中,通过Shell来操作系统很普遍. 这里,考虑到有时候可能想要「多次的进 ...

  5. 「工具」三分钟了解一款在线流程绘制工具:Whimsical

    Whimsical 是一款在线流程绘制工具,只需要一个浏览器就随时随地绘制精美的流程图.除了流程图(Flowcharts)功能,官方还推出了线框图(Wireframes).便利贴(Sticky Not ...

  6. [转帖]「日常小记」linux中强大且常用命令:find、grep

    「日常小记」linux中强大且常用命令:find.grep https://zhuanlan.zhihu.com/p/74379265 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍 ...

  7. 前端构建工具之gulp(一)「图片压缩」

    前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...

  8. iDoc「文档」功能强势升级!一键分享,即刻预览!(201903-1版本更新)

    小摹很想知道小伙伴们在面对众多杂乱的文档时,都是如何管理起来的呢?iDoc的「文档」功能,很多小伙伴还没有用起来,甚至都没有注意到iDoc还有这样一个功能.今天小摹就给大家介绍一下iDoc的「文档」功 ...

  9. Linux 小知识翻译 - 「桌面环境」

    这次聊聊桌面环境. 上次聊了 X Window System 相关的内容,虽然令人意外,但X Window System 和桌面环境不是一回事.请大家稍微考虑一下. X Window System 是 ...

  10. Linux 小知识翻译 - 「架构 续」(arch)

    上次,从「计算机的内部构造」的角度解释了架构这个术语.这次,介绍下架构中经常提到的「i386架构」及之后的「i486」,「i586」. 安装Linux的时候,很多人即使不了解但也会经常听到i386架构 ...

随机推荐

  1. CSS动画(炫酷表单)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6yORMSqiaEKgpwibBgfcTQZNV0pI3M8t8HQm5XliaicSO42e ...

  2. 人工智能模型训练中的数据之美——探索TFRecord

    上一篇:<构建人工智能模型基础:TFDS和Keras的完美搭配> 序言:在人工智能模型的训练过程中,如何高效管理和处理大量数据是一个重要的课题.TensorFlow 的 TFRecord ...

  3. 好未来:多云环境下基于 JuiceFS 建设低运维模型仓库

    好未来,前身学而思,于 2010 年在美国纽约证券交易所上市.公司积极将大模型研究应用于教学产品中,近期推出了数学领域的千亿级大模型. 在大模型的背景下,存储系统需处理巨量数据和复杂文件操作,要求支持 ...

  4. 8.Jenkins+Docker+SpringCloud微服务持续集成

    前言 通过前几章的学习,了解了持续集成概念以及相关技术的学习和使用 接下来学习构建一整套SpringCloud微服务+Docker+Jenkins的持续集成案例 环境 架构图 流程说明: 开发人员将代 ...

  5. toFullScreen:全屏------exitFullscreen:退出全屏

    toFullScreen:全屏 function toFullScreen(){ let elem = document.body; elem.webkitRequestFullScreen ? el ...

  6. 【网关开发】Openresty使用cosocket API 发送http与tcp网络请求

    背景 为网关提供健康检查功能时需要对节点发送http或者tcp探活请求.Openresty 提供cosocket来处理非阻塞IO. 实现 跟工程结合在一起,这里简单拼接数据结构 local funct ...

  7. 一个包含了 50+ C#/.NET编程技巧实战练习教程

    DotNetExercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程技巧练习集:C#/.NET/.NET Core编程常用语法.算法.技巧.中间件.类库.工作业务实操练 ...

  8. Clickhouse之数据删除方式

    什么是TTL? TTL的意思是Time To Live表示数据的存活时间.由于数据的价值会根据保存的时间成反比,出于存储成本的考虑通常只会保留近一年的数据.而在MergeTree (合并树)引擎中,可 ...

  9. 用人工智能模型预测股市和加密货币的K线图

    前一篇:<从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅> 前言:加密货币市场昨日大幅下跌,一天内市值蒸发逾70亿 人民币.有人可能会问,如果使用人工智能模型预测市场的涨跌,是否能 ...

  10. 2.猿人学爬虫攻防第二题 JS 混淆 动态cookie

    题目链接:请点击 抓取到发布日热度的值,计算所有值的加和 1.分析网页 由于是动态Cookie,为了避免其他Cookie的影响,所以使用浏览器的无痕模式进行调试,按f12并选中[Preserve lo ...