Advertisement
GBH007

CodeForce Task Tester (2016)

Sep 24th, 2016 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.80 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. import subprocess
  4. from urllib.request import urlopen
  5. import tkinter
  6. import tkinter.scrolledtext
  7. import pickle
  8. import sys
  9. import os
  10. #~ print(sys.argv)
  11.  
  12. try:
  13.     _config=pickle.load(open('cfg.bin','rb'))
  14. except (FileNotFoundError,pickle.UnpicklingError):
  15.     _config={
  16.         'contest_id':714,
  17.         'problem_id':'a',
  18.         'file':'/home/gbh007/CodeForces/main.py',
  19.     }
  20.  
  21. def io_t_l(c_id=714,pr='b'):
  22.     data=urlopen('http://codeforces.com/contest/{0}/problem/{1}'.format(c_id,pr)).read().decode()
  23.     data=data.split('<div class="sample-test">')[1]
  24.     io_data=[]
  25.     for i in data.split('<pre>'):
  26.         if '</pre>' in i:
  27.             io_data.append(i.split('</pre>')[0].replace('<br />','\n'))
  28.     data=[]
  29.     for i in range(len(io_data)//2):
  30.         data.append((io_data[i*2],io_data[i*2+1]))
  31.     return data
  32.  
  33. class Tester:
  34.     def __init__(self,fname,cid,pid,out=sys.stdout,flog=None):
  35.         self.out=out
  36.         self.fname=fname
  37.         self.cid=cid
  38.         self.pid=pid
  39.         self.flog=flog
  40.     def write(self,s):
  41.         if self.flog:
  42.             self.flog.write(s)
  43.         self.out.write(s)
  44.     def run(self):
  45.         tests=io_t_l(self.cid,self.pid)
  46.         for inx,(inp,out) in enumerate(tests):
  47.             fi=open('input','w')
  48.             fi.write(inp)
  49.             fi.close()
  50.             rc=subprocess.call('python3 {0}'.format(self.fname),shell=1,stdout=open('output','w'),stdin=open('input'))
  51.             fout=open('output').read()
  52.             d=self.cmp(out,fout)
  53.             self.write('test {0} answern {1} return code {2}\n'.format(inx,d,rc))
  54.             if not d:
  55.                 self.write('-'*8+'fout'+'-'*8+'\n')
  56.                 self.write(fout.strip())
  57.                 self.write('\n'+'-'*8+'out'+'-'*9+'\n')
  58.                 self.write(out.strip())
  59.                 self.write('\n'+'-'*20+'\n')
  60.     def cmp(self,t1,t2):
  61.         t1=[i.strip() for i in t1.split('\n') if i.strip()]
  62.         t2=[i.strip() for i in t2.split('\n') if i.strip()]
  63.         if len(t1)!=len(t2):return False
  64.         else:
  65.             for s1,s2 in zip(t1,t2):
  66.                 if s1!=s2:return False
  67.         return True
  68.        
  69.        
  70. class TestResult(tkinter.Toplevel):
  71.     def __init__(self):
  72.         tkinter.Toplevel.__init__(self)
  73.         self.title('test result')
  74.         self.st=tkinter.scrolledtext.ScrolledText(self)
  75.         self.st.pack(fill=tkinter.BOTH,expand=tkinter.YES)
  76.     def write(self,s):
  77.         self.st.insert(tkinter.END,s)
  78.     def clear(self):
  79.         self.st.delete(0,tkinter.END)
  80.        
  81. class Root(tkinter.Tk):
  82.     def __init__(self):
  83.         tkinter.Tk.__init__(self)
  84.         self.ci=tkinter.IntVar(value=_config['contest_id'])
  85.         self.pi=tkinter.StringVar(value=_config['problem_id'])
  86.         self.fl=tkinter.StringVar(value=_config['file'])
  87.         tkinter.Label(self,text='contest id').pack(fill=tkinter.X)
  88.         tkinter.Entry(self,textvariable=self.ci).pack(fill=tkinter.X)
  89.         tkinter.Label(self,text='problem id').pack(fill=tkinter.X)
  90.         tkinter.Entry(self,textvariable=self.pi).pack(fill=tkinter.X)
  91.         tkinter.Label(self,text='file').pack(fill=tkinter.X)
  92.         tkinter.Entry(self,textvariable=self.fl).pack(fill=tkinter.X)
  93.         tkinter.Button(self,text='test',command=self.run).pack(fill=tkinter.X)
  94.     def run(self):
  95.         t=Tester(self.fl.get(),self.ci.get(),self.pi.get(),TestResult())
  96.         t.run()
  97.     def destructor(self):
  98.         global _config
  99.         _config['contest_id']=self.ci.get()
  100.         _config['problem_id']=self.pi.get()
  101.         _config['file']=self.fl.get()
  102.  
  103. def main1():
  104.     obj=subprocess.call('python3 a.py',shell=1,stdout=open('output','w'),stdin=open('input'))
  105.     print(obj)
  106.     #~ obj.write(open('input').read())
  107.     #~ open('output','w').write(obj.read())
  108. def main_gui():
  109.     root=Root()
  110.     root.mainloop()
  111.     root.destructor()
  112.  
  113. def main_ts(cfg):
  114.     if cfg['kfn']=='y':
  115.         f=cfg['file']
  116.         fname=os.path.split(f)[1]
  117.         ci=fname.split('_')[0]
  118.         pi=fname.split('_')[1].split('.')[0]
  119.         t=Tester(f,ci,pi)
  120.         t.run()
  121.  
  122. if __name__=='__main__':
  123.     cfg={
  124.         'file':None,
  125.         'gui':'y',
  126.         'kfn':'y',
  127.     }
  128.     for i in sys.argv:
  129.         if '=' in i:
  130.             k,v=i.split('=')[:2]
  131.             cfg[k]=v
  132.     if cfg['gui']=='y':
  133.         main_gui()
  134.     else:
  135.         main_ts(cfg)
  136.  
  137. pickle.dump(_config,open('cfg.bin','wb'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement