comparison upreckon/problem.py @ 232:f94f9724c543

Switched from str to bytes for external validator output
author Oleg Oshmyan <chortos@inbox.lv>
date Fri, 29 Jun 2012 03:32:49 +0300
parents c03a8113685d
children 54cdc583ab77
comparison
equal deleted inserted replaced
229:928a6091454c 232:f94f9724c543
1 # Copyright (c) 2010-2011 Chortos-2 <chortos@inbox.lv> 1 # Copyright (c) 2010-2012 Chortos-2 <chortos@inbox.lv>
2 2
3 from __future__ import division, with_statement 3 from __future__ import division, with_statement
4 4
5 from .compat import * 5 from .compat import *
6 from .exceptions import * 6 from .exceptions import *
140 id = str(case.id) 140 id = str(case.id)
141 if case.isdummy: 141 if case.isdummy:
142 id = 'sample ' + id 142 id = 'sample ' + id
143 say('%*s: ' % (prob.cache.padoutput, id), end='') 143 say('%*s: ' % (prob.cache.padoutput, id), end='')
144 sys.stdout.flush() 144 sys.stdout.flush()
145 comment = ''.encode()
145 try: 146 try:
146 if prob.config.kind != 'outonly': 147 if prob.config.kind != 'outonly':
147 granted = case(lambda: (say('%7.3f%s s, ' % (case.time_stopped - case.time_started, case.time_limit_string), end=''), sys.stdout.flush())) 148 granted = case(lambda: (say('%7.3f%s s, ' % (case.time_stopped - case.time_started, case.time_limit_string), end=''), sys.stdout.flush()))
148 else: 149 else:
149 granted = case(lambda: None) 150 granted = case(lambda: None)
156 except CPUTimeLimitExceeded: 157 except CPUTimeLimitExceeded:
157 verdict = 'CPU time limit exceeded' 158 verdict = 'CPU time limit exceeded'
158 except MemoryLimitExceeded: 159 except MemoryLimitExceeded:
159 verdict = 'memory limit exceeded' 160 verdict = 'memory limit exceeded'
160 except WrongAnswer: 161 except WrongAnswer:
162 verdict = 'wrong answer'
161 e = sys.exc_info()[1] 163 e = sys.exc_info()[1]
162 if e.comment: 164 if e.comment:
163 verdict = 'wrong answer (%s)' % e.comment 165 comment = e.comment
164 else:
165 verdict = 'wrong answer'
166 except NonZeroExitCode: 166 except NonZeroExitCode:
167 e = sys.exc_info()[1] 167 e = sys.exc_info()[1]
168 if e.exitcode < 0: 168 if e.exitcode < 0:
169 if sys.platform == 'win32': 169 if sys.platform == 'win32':
170 verdict = 'terminated with error 0x%X' % (e.exitcode + 0x100000000) 170 verdict = 'terminated with error 0x%X' % (e.exitcode + 0x100000000)
192 # verdict = 'unknown error [this may be a bug in Upreckon]%s' % strerror(sys.exc_info()[1]) 192 # verdict = 'unknown error [this may be a bug in Upreckon]%s' % strerror(sys.exc_info()[1])
193 else: 193 else:
194 try: 194 try:
195 granted, correct, comment = granted 195 granted, correct, comment = granted
196 except TypeError: 196 except TypeError:
197 comment = '' 197 comment = ''.encode()
198 correct = granted >= 1 198 correct = granted >= 1
199 else:
200 if comment:
201 comment = ' (%s)' % comment
202 if correct: 199 if correct:
203 contexts[-1].case_correct() 200 contexts[-1].case_correct()
204 prob.testcases.send(True) 201 prob.testcases.send(True)
205 verdict = 'OK' + comment 202 verdict = 'OK'
206 else: 203 else:
207 verdict = 'partly correct' + comment 204 verdict = 'partly correct'
208 granted *= case.points 205 granted *= case.points
209 say('%g/%g, %s' % (granted, case.points, verdict)) 206 if comment:
207 say('%g/%g, %s (' % (granted, case.points, verdict), end='')
208 sys.stdout.flush()
209 sys.stdout.buffer.write(comment)
210 say(')')
211 else:
212 say('%g/%g, %s' % (granted, case.points, verdict))
210 contexts[-1].case_end() 213 contexts[-1].case_end()
211 contexts[-1].score(granted, case.points) 214 contexts[-1].score(granted, case.points)
212 weighted = contexts[0].real * prob.config.taskweight / contexts[0].max if contexts[0].max else 0 215 weighted = contexts[0].real * prob.config.taskweight / contexts[0].max if contexts[0].max else 0
213 before_weighting = valued = '' 216 before_weighting = valued = ''
214 if prob.config.taskweight != contexts[0].max: 217 if prob.config.taskweight != contexts[0].max: