zoukankan      html  css  js  c++  java
  • Ubuntu环境下对拍

    何为对拍

    假设我在考场上写了一个能过样例的算法。然后它也能过大样例但是我觉得有些担心某些细节会出错,或者是它连大样例都过不了但是大样例过大无法肉眼差错,这个时候我们就需要对拍了。

    所谓对拍,就是对着拍数据。写一个保证正确性的暴力的程序,写一个随机造数据的程序,写一个批量处理文件,让暴力程序、造数据程序以及自己的程序不断执行以下步骤:

    造输入数据,用暴力生成正确的输出数据,运行自己的程序判断结果是否正确。如果不正确就停下来。

    这样不断重复的进行的话,如果我们的程序某些地方写错了有很大几率可以查出来。并且我们可以把对拍造的数据造小一点,这样也方便肉眼查错。

    Ubuntu对拍方式

    假设我们已经写好了data.cpp用于制造输入数据,brute_force.cpp用于制造输出数据这两个东西写挂了可以去自闭了,以及自己的程序a.cpp。

    首先新建一个check.sh文件,在里面输入如下内容:

    //双斜线后面为注解,不是check.sh的内容
    #!/bin/bash                          //假装这是个头文件(我也不知道啥意思
    g++ a.cpp -o a -Wall
    g++ data.cpp -o data -Wall
    g++ brute_force.cpp -o brute_force -Wall   //编译你的三个代码
    while true;do                             //一直做,直到拍出错误
        ./data>data.in
        ./a<data.in>a.out
        ./brute_force<data.in>brute.out       //造输入输出,然后用你自己的程序再去造一组输出
        if diff -b -B -q test.out std.out;then         //diff -b -B -q后解俩文件是比较这俩文件的意思,-b -B -q是忽略制表符行末空格以及空行的影响。如果没差别则会返回逻辑真
    		echo "Wonderful!"                             //没差别输出Wonderful!
        else
    		echo "Fake!Wrong Answer!"
    		break                                       //有差别输出WA,并且跳出循环
        fi                                          //if的终止标志
    done                                            //while的终止标志
    

    造好check.sh后,在终端输入chmod 777 check.sh(相当于取得使用权限)然后就可以输入./check.sh来愉快的对拍了。

    另外,在终端输入time a<data.in>data.out可以查看你的程序跑了多少时间。

  • 相关阅读:
    Jmeter之参数化(4种设置方法)
    Pytest+allure安装和框架搭建
    Xshell~工作中访问Linux服务器
    Jmeter之梯度式加压(Stepping Thread Group)
    Jmeter之压测探索和结果分析
    Jmeter之Linux安装(Xshell),分布式运行Linux作为slave机
    Jmeter之Plugin插件,服务器监控
    Jmeter之分布式测试/压测
    傅立叶
    触发器
  • 原文地址:https://www.cnblogs.com/AKMer/p/9896523.html
Copyright © 2011-2022 走看看