summaryrefslogtreecommitdiff
path: root/prolog/problems/family_relations/brother_2
diff options
context:
space:
mode:
authorAleksander Sadikov <aleksander.sadikov@fri.uni-lj.si>2015-10-17 20:04:54 +0200
committerAleksander Sadikov <aleksander.sadikov@fri.uni-lj.si>2015-10-17 20:04:54 +0200
commit86bfc55d2ddc19b79127f2c788609635b702dbfd (patch)
treed3349850f62e56c1cc13a29cae9790b59c42cfa6 /prolog/problems/family_relations/brother_2
parent531bde7a2fe3d643e9b6ffe690405b6cc07c4964 (diff)
Family relations section fully hint-ready (just a few minor things missing).
Diffstat (limited to 'prolog/problems/family_relations/brother_2')
-rw-r--r--prolog/problems/family_relations/brother_2/common.py12
-rw-r--r--prolog/problems/family_relations/brother_2/sl.py19
2 files changed, 24 insertions, 7 deletions
diff --git a/prolog/problems/family_relations/brother_2/common.py b/prolog/problems/family_relations/brother_2/common.py
index 48b89fe..654825e 100644
--- a/prolog/problems/family_relations/brother_2/common.py
+++ b/prolog/problems/family_relations/brother_2/common.py
@@ -23,8 +23,9 @@ brother(X, Y) :-
hint_type = {
'x_must_be_male': Hint('x_must_be_male'),
'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 = [
@@ -64,7 +65,7 @@ def test(program, solved_problems):
return passed, hints
def hint(program, solved_problems):
- # tokens = prolog.util.tokenize(program)
+ tokens = prolog.util.tokenize(program)
code = (program + '\n' +
server.problems.solutions_for_problems('prolog', solved_problems) + '\n' +
@@ -91,10 +92,15 @@ def hint(program, solved_problems):
return [{'id': 'y_can_be_of_any_gender'}]
# X and Y must be different
- 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, [william, alessandro, andrew]), brother(X, X)), L), length(L, 3)'):
return [{'id': 'x_y_must_be_different'}]
+ # X and Y must be different, but \== was used
+ if prolog.util.Token('NEQ', '\==') in tokens and prolog.engine.ask_truth(engine_id,
+ 'setof(X/Y, brother(X, Y), L), member(alessandro/alessandro, L), member(andrew/andrew, L), member(william/william, L)'):
+ return [{'id': 'neq_used_too_early'}]
+
except socket.timeout as ex:
pass
diff --git a/prolog/problems/family_relations/brother_2/sl.py b/prolog/problems/family_relations/brother_2/sl.py
index 96c6126..29703a1 100644
--- a/prolog/problems/family_relations/brother_2/sl.py
+++ b/prolog/problems/family_relations/brother_2/sl.py
@@ -22,14 +22,16 @@ potem je <code>X</code> brat od <code>Y</code>.</p>''',
]
hint = {
- 'x_y_must_be_different': '''\
+ 'x_y_must_be_different': [{'message': '''\
<p><img src="[%@resource Prolog_brother_04.svg%]" /></p>
<p>Si pomislil, da sta <code>X</code> in <code>Y</code> lahko ista oseba? Poskusi naslednjo poizvedbo:</p>
<pre>
?- brother(william, Y).
-</pre>
-<p>VEČ... Kako naredim, da sta X in Y različna?</p>
-''',
+</pre>''', 'linkText': 'Kako lahko preverim, da sta <code>X</code> in <code>Y</code> različna?'},
+'''\
+<p>S pomočjo operatorja <code>\==</code> lahko preverim, da sta <code>X</code> in <code>Y</code> med seboj različna.
+Na primer: <code>X \== Y</code></p>
+'''],
'x_must_be_male': '''\
<p><img src="[%@resource Prolog_brother_03.svg%]" /></p>
@@ -44,4 +46,13 @@ hint = {
<p><img src="[%@resource Prolog_brother_05.svg%]" /></p>
<p>Dobro bi bilo, da imata <code>X</code> in <code>Y</code> vsaj enega skupnega starša.</p>
''',
+
+ 'neq_used_too_early': '''\
+<p>Si morda uporabil operator <code>\==</code> prezgodaj?</p>
+<p>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.</p>
+''',
+
}