From 86bfc55d2ddc19b79127f2c788609635b702dbfd Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Sat, 17 Oct 2015 20:04:54 +0200 Subject: Family relations section fully hint-ready (just a few minor things missing). --- prolog/problems/family_relations/sister_2/common.py | 12 ++++++++++-- prolog/problems/family_relations/sister_2/sl.py | 19 +++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) (limited to 'prolog/problems/family_relations/sister_2') diff --git a/prolog/problems/family_relations/sister_2/common.py b/prolog/problems/family_relations/sister_2/common.py index 627648c..c112a9c 100644 --- a/prolog/problems/family_relations/sister_2/common.py +++ b/prolog/problems/family_relations/sister_2/common.py @@ -23,8 +23,9 @@ sister(X, Y) :- hint_type = { 'x_must_be_female': Hint('x_must_be_female'), 'common_parent_needed': Hint('common_parent_needed'), - 'y_can_be_of_any_gender': Hint('Y_can_be_of_any_gender'), + 'y_can_be_of_any_gender': Hint('y_can_be_of_any_gender'), 'x_y_must_be_different': Hint('x_y_must_be_different'), + 'neq_used_too_early': Hint('neq_used_too_early'), } test_cases = [ @@ -121,10 +122,17 @@ def hint(program, solved_problems): # X and Y must be different # this is the last code-specific hint (when everything else doesn't trigger anymore) - if prolog.engine.ask_truth(engine_id, + if prolog.util.Token('NEQ', '\==') not in tokens and prolog.engine.ask_truth(engine_id, 'setof(X, (member(X, [sally, nevia, vanessa]), sister(X, X)), L), length(L, 3)'): return [{'id': 'x_y_must_be_different'}] + # X and Y must be different, but the user used '\==' + # most likely this means that \== was used before X and Y are known + # this is the last code-specific hint (when everything else doesn't trigger anymore) + if prolog.util.Token('NEQ', '\==') in tokens and prolog.engine.ask_truth(engine_id, + 'setof(X/Y, sister(X, Y), L), member(nevia/nevia, L), member(sally/sally, L), member(vanessa/vanessa, L)'): + return [{'id': 'neq_used_too_early'}] + # last hints are connected with programming style # here, this means detecting such code: # parent(P1, X), parent(P2, Y), P1 == P2 (or P1 = P2) diff --git a/prolog/problems/family_relations/sister_2/sl.py b/prolog/problems/family_relations/sister_2/sl.py index d69b56c..cb51592 100644 --- a/prolog/problems/family_relations/sister_2/sl.py +++ b/prolog/problems/family_relations/sister_2/sl.py @@ -21,14 +21,16 @@ potem je X sestra od Y.

''', ] hint = { - 'x_y_must_be_different': '''\ + 'x_y_must_be_different': [{'message': '''\

Si pomislil, da sta X in Y lahko ista oseba? Poskusi naslednjo poizvedbo:

 ?- sister(sally, Y).
-
-

VEČ... Kako naredim, da sta X in Y različna?

-''', +''', 'linkText': 'Kako lahko preverim, da sta X in Y različna?'}, +'''\ +

S pomočjo operatorja \== lahko preverim, da sta X in Y med seboj različna. +Na primer: X \== Y

+'''], 'x_must_be_female': '''\

@@ -43,4 +45,13 @@ hint = {

Dobro bi bilo, da imata X in Y vsaj enega skupnega starša.

''', + + 'neq_used_too_early': '''\ +

Si morda uporabil operator \== prezgodaj?

+

Poskusi ga pomakniti bolj proti koncu. Razlog za probleme je verjetno, +da spremenljivki, ki ju primerjaš, še nimata določene vrednosti in sta zato različni. +Prolog ne preverja, če kasneje morda postaneta enaki, ampak samo kakšni sta v trenutku, +ko naleti na primerjavo.

+''', + } -- cgit v1.2.1