程序对拍(普通程序对拍&特判程序对拍)

5 篇文章 0 订阅

程序对拍(普通程序对拍&特判程序对拍)

目前SPJ的对怕程序不是很完善,多少会有算法不优等问题。如有问题敬请在评论区留言。【若转载请注明出处】
对拍程序初级版本,仅使用于非特判程序
需要实现如下图情况
在这里插入图片描述

@echo off
:start
rand.exe %random% > in.txt
oj.exe < in.txt > oj.txt
AC.exe < in.txt > AC.txt
fc oj.txt AC.txt
if not errorlevel 1 goto start
set /p in=<in.txt
echo %in%
pause
goto start

下面是python 操作的对拍程序,可实现spj对拍
需要实现如下图情况
如果非特判
在这里插入图片描述
若为特判
则需要再添加一个名为SPJ.exe的程序
在这里插入图片描述

import os
def get_str(dic):
    f=open(dic,"r",encoding="utf-8")
    string="".join(f.readlines())
    f.close()
    return string
def normal_cmp():
    return True if get_str("AC.txt") == get_str("WA.txt") else False
def normal_error():
    str_a=get_str("Rand.txt")
    str_b=get_str("AC.txt")
    str_c=get_str("WA.txt")
    if len(str_a)>25:str_a="字符内容过长,请在Rand.txt中查看\n" 
    if len(str_b)>25:str_a="字符内容过长,请在AC.txt中查看\n"
    if len(str_c)>25:str_a="字符内容过长,请在WA.txt中查看\n"
    print("IN:\n{}\nAC:\n{}\nWA:\n{}".format(str_a,str_b,str_c))
def spj_cmp():
    return True if get_str("spj.txt") == "YES" else False
def spj_error():
    string=get_str("Rand.txt")
    if len(string)>25:string="字符内容过长,请在Rand.txt中查看\n"
    print("Rand:\n{}".format(string))
if input("若是spj输入spj,否则输入normal\n")!="spj":
    os.system("Rand.exe > Rand.txt")
    os.system("WA.exe < Rand.txt > WA.txt")
    os.system("AC.exe < Rand.txt > AC.txt")
    while normal_cmp():
        print("未找到差异")
        os.system("Rand.exe > Rand.txt")
        os.system("WA.exe < Rand.txt > WA.txt")
        os.system("AC.exe < Rand.txt > AC.txt")
    normal_error()
else:
    os.system("Rand.exe > Rand.txt")
    os.system("WA.exe < Rand.txt > WA.txt")
    os.system("AC.exe < Rand.txt > AC.txt")
    f=open("spj.txt","w",encoding="utf-8")
    f.writelines("".join([get_str("Rand.txt"),get_str("AC.txt"),get_str("WA.txt")]))
    f.close()
    os.system("SPJ.exe <spj.txt> spj.txt")
    while spj_cmp():
        print("未找到差异")
        os.system("Rand.exe > Rand.txt")
        os.system("WA.exe < Rand.txt > WA.txt")
        os.system("AC.exe < Rand.txt > AC.txt")
        os.system("SPJ.exe <rand.txt AC.txt WA.txt> spj.txt")
    spj_error()
os.system("pause")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Round moon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值