import re from python.util import has_token_sequence, string_almost_equal, \ string_contains_number, get_tokens, get_numbers, get_exception_desc from server.hints import Hint id = 235 number = 1 visible = True solution = '''\ def longest(s): naj = '' for beseda in s.split(): if len(beseda) > len(naj): naj = beseda return naj ''' hint_type = { 'final_hint': Hint('final_hint') } def test(python, code): func_name = 'longest' tokens = get_tokens(code) if not has_token_sequence(tokens, ['def', func_name]): return False, [{'id' : 'no_func_name', 'args' : {'func_name' : func_name}}] in_out = [ ('beseda', 'beseda'), ('an ban', 'ban'), ('an ban pet podgan', 'podgan'), ('an ban pet podgan stiri misi', 'podgan'), ('ta clanek je lepo napisan', 'napisan'), ('123456 12345 1234 123 12 1', '123456'), ('12345 123456 12345 1234 123 12 1', '123456'), ('1234 12345 123456 12345 1234 123 12 1', '123456'), ] test_in = [(func_name+'("%s")'%str(l[0]), None) for l in in_out] test_out = [l[1] for l in in_out] answers = python(code=code, inputs=test_in, timeout=1.0) n_correct = 0 tin, tout = None, None for i, (ans, to) in enumerate(zip(answers, test_out)): n_correct += ans[0] == to if ans[0] != to: tin = test_in[i][0] tout = to passed = n_correct == len(test_in) hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_in)}}] if tin: hints.append({'id': 'problematic_test_case', 'args': {'testin': str(tin), 'testout': str(tout)}}) if passed: hints.append({'id': 'final_hint'}) return passed, hints def hint(python, code): tokens = get_tokens(code) # run one test first to see if there are any exceptions answer = python(code=code, inputs=[(None, None)], timeout=1.0) exc = get_exception_desc(answer[0][3]) if exc: return exc return None