Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import subprocess
- from urllib.request import urlopen
- import sys
- import os
- import re
- def io_t_l(c_id=714,pr='b'):
- data=urlopen('http://codeforces.com/contest/{0}/problem/{1}'.format(c_id,pr)).read().decode()
- data=re.sub('<br\s*/>','\n',data)
- io_data=re.findall('(?:<pre>((?s).*?)</pre>)',data)
- data=[i for i in zip(io_data[::2],io_data[1::2])]
- return data
- return data
- class Tester:
- def __init__(self,fname,cid,pid,out=sys.stdout,flog=None):
- self.out=out
- self.fname=fname
- self.cid=cid
- self.pid=pid
- self.flog=flog
- def write(self,s):
- if self.flog:
- self.flog.write(s)
- self.out.write(s)
- def run(self):
- tests=io_t_l(self.cid,self.pid)
- for inx,(inp,out) in enumerate(tests):
- fi=open('input','w')
- fi.write(inp)
- fi.close()
- rc=subprocess.call('python3 {0}'.format(self.fname),shell=1,stdout=open('output','w'),stdin=open('input'))
- fout=open('output').read()
- d=self.cmp(out,fout)
- self.write('test {0} answern {1} return code {2}\n'.format(inx,d,rc))
- if not d:
- self.write('-'*8+'fout'+'-'*8+'\n')
- self.write(fout.strip())
- self.write('\n'+'-'*8+'out-'+'-'*8+'\n')
- self.write(out.strip())
- self.write('\n'+'-'*20+'\n')
- os.remove('input')
- os.remove('output')
- def cmp(self,t1,t2):
- t1=[i.strip() for i in t1.split('\n') if i.strip()]
- t2=[i.strip() for i in t2.split('\n') if i.strip()]
- if len(t1)!=len(t2):return False
- else:
- for s1,s2 in zip(t1,t2):
- if s1!=s2:return False
- return True
- def main():
- cfg={
- 'file':None,
- 'cid':None,
- 'pid':None,
- 'kfn':'y',
- }
- for i in sys.argv:
- if '=' in i:
- k,v=i.split('=')[:2]
- cfg[k]=v
- if cfg['kfn']=='y':
- f=cfg['file']
- fname=os.path.split(f)[1]
- tmpl1='\D*(\d+).*'
- tmpl2='.*([a-zA-Z]).*\..*'
- cfg['cid']=re.findall(tmpl1,fname)[0]
- cfg['pid']=re.findall(tmpl2,fname)[0]
- t=Tester(cfg['file'],cfg['cid'],cfg['pid'])
- t.run()
- if __name__=='__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement