summaryrefslogtreecommitdiff
path: root/server/prolog_session.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/prolog_session.py')
-rw-r--r--server/prolog_session.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/server/prolog_session.py b/server/prolog_session.py
index ac18400..6cf6651 100644
--- a/server/prolog_session.py
+++ b/server/prolog_session.py
@@ -121,17 +121,32 @@ class PrologSession(server.LanguageSession):
problem_module = load_problem(problem.language, problem.group, problem.identifier, 'common')
aux_code = self._aux_code(session.get_uid(), problem, program)
+ # experiment support for allowing none/automatic/manual/all hints
+ # descriptor: {'id': 'hints', 'group': 'none|automatic|manual|all'}
+ allowed_hints = 'all'
+ for experiment in session.get_experiments():
+ if experiment.get('id') == 'hints':
+ allowed_hints = experiment.get('group')
+ break
+
# check if the program is correct
n_correct, n_all, msgs = problem_module.test(program, aux_code=aux_code)
if n_correct == n_all:
session.update_solution(problem_id, solution=program, done=True)
else:
hints = []
+ # syntax check
if not hints and hasattr(language_module, 'check_syntax'):
hints = language_module.check_syntax(program, aux_code=aux_code)
- if not hints and hasattr(problem_module, 'hint'):
+
+ # manually defined problem-specific hints
+ if not hints and hasattr(problem_module, 'hint') and \
+ allowed_hints in ('all', 'manual'):
hints = problem_module.hint(program, aux_code=aux_code)
- if not hints and problem_id in _edits:
+
+ # automatic hints
+ if not hints and problem_id in _edits and \
+ allowed_hints in ('all', 'automatic'):
# Testing function for monkey.
def tester(code):
n_correct, n_all, _ = problem_module.test(code, aux_code=aux_code)
@@ -140,8 +155,11 @@ class PrologSession(server.LanguageSession):
program, _edits[problem_id], tester, timeout=3)
if solution and steps:
hints = [{'id': 'monkey_main'}] + monkey.fix_hints(program, steps)
+
+ # generic language hints (style etc.)
if not hints and hasattr(language_module, 'hint'):
hints = language_module.hint(program, aux_code=aux_code)
+
if hints:
msgs.extend(hints)