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