Mercurial > ~astiob > upreckon > hgweb
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: |