summaryrefslogtreecommitdiff
path: root/prolog/problems/family_relations
diff options
context:
space:
mode:
authorAleksander Sadikov <aleksander.sadikov@fri.uni-lj.si>2016-03-02 13:20:52 +0100
committerAleksander Sadikov <aleksander.sadikov@fri.uni-lj.si>2016-03-02 13:20:52 +0100
commite318ce671052e30dff8077d7ca72f8633cab9ffa (patch)
tree94ad6f401f15ce2b370185335f6ceeff88e79e2e /prolog/problems/family_relations
parent5ade8edf713eea0fea65785de6cc61c591cf54fc (diff)
Improved hints for ancestor/2 and descendant/2.
Diffstat (limited to 'prolog/problems/family_relations')
-rw-r--r--prolog/problems/family_relations/ancestor_2/common.py14
-rw-r--r--prolog/problems/family_relations/ancestor_2/sl.py10
-rw-r--r--prolog/problems/family_relations/descendant_2/common.py14
-rw-r--r--prolog/problems/family_relations/descendant_2/sl.py8
4 files changed, 23 insertions, 23 deletions
diff --git a/prolog/problems/family_relations/ancestor_2/common.py b/prolog/problems/family_relations/ancestor_2/common.py
index 9346e5f..2353eab 100644
--- a/prolog/problems/family_relations/ancestor_2/common.py
+++ b/prolog/problems/family_relations/ancestor_2/common.py
@@ -84,6 +84,13 @@ def hint(code, aux_code):
return [{'id': 'grandparent_used_markup', 'start': m[0], 'end': m[1]} for m in marks] + \
[{'id': 'grandparent_used'}]
+ # descendant instead of ancestor (wrong direction)
+ # warning: knowledge base dependent
+ if prolog.engine.ask_truthTO(engine_id,
+ 'findall(_, ancestor(william, X), L1), length(L1, 2), \
+ findall(_, ancestor(X, william), L2), length(L2, 6)'):
+ return [{'id': 'wrong_direction'}]
+
# missing/failed base case
if prolog.engine.ask_truthTO(engine_id,
'findall(X/Y, parent(X, Y), L), member(X/Y, L), \+ ancestor(X, Y)'):
@@ -103,13 +110,6 @@ def hint(code, aux_code):
else:
return [{'id': 'ancestor_to_oneself'}]
- # descendant instead of ancestor (wrong direction)
- # warning: knowledge base dependent
- if prolog.engine.ask_truthTO(engine_id,
- 'findall(_, ancestor(william, X), L1), length(L1, 2), \
- findall(_, ancestor(X, william), L2), length(L2, 6)'):
- return [{'id': 'wrong_direction'}]
-
# Y does not necessarily need to be a parent
if prolog.engine.ask_one(engine_id,
'ancestor(_, Y), \+ parent(Y, _)') == 'false':
diff --git a/prolog/problems/family_relations/ancestor_2/sl.py b/prolog/problems/family_relations/ancestor_2/sl.py
index 5cb8044..974bde3 100644
--- a/prolog/problems/family_relations/ancestor_2/sl.py
+++ b/prolog/problems/family_relations/ancestor_2/sl.py
@@ -53,13 +53,13 @@ Kaj je najbolj enostaven par (prednik, potomec)?</p>
''', # TODO: morda ta hint naredim z "more": najprej tekst, ob kliku pa še slika... (sicer je preveč očitno)
'ancestor_to_oneself': '''\
-<p>Kako je lahko nekdo potomec samega sebe? Premisli, morda se ti splača tudi grafično skicirati
-tvojo trenutno rešitev.</p>
+<p>Kako je lahko nekdo potomec samega sebe? Iz trenutne verzije rešitve se da izpeljati tudi to.
+Premisli, morda se ti splača tudi grafično skicirati tvojo trenutno rešitev.</p>
''',
'ancestor_to_oneself_with_or': '''\
-<p>Kako je lahko nekdo potomec samega sebe? Premisli, morda se ti splača tudi grafično skicirati
-tvojo trenutno rešitev.</p>
+<p>Kako je lahko nekdo potomec samega sebe? Iz trenutne verzije rešitve se da izpeljati tudi to.
+Premisli, morda se ti splača tudi grafično skicirati tvojo trenutno rešitev.</p>
<p>Morda se ti splača preveriti tudi uporabo podpičja. To praktično naredi dva ločena stavka oz. veji
(eno ali drugo velja, morda tudi oboje). Vendar pazi, ker sta ti dve veji med seboj neodvisni
-- vrednosti iz ene se ne prenašajo v drugo vejo.</p>
@@ -67,7 +67,7 @@ tvojo trenutno rešitev.</p>
'only_two_levels_deep': '''\
<p>Tvoja rešitev je premalo splošna. Prednik je lahko tudi bolj oddaljen kot so stari starši,
-npr. prababica ali prapradedek.</p>
+npr. prababica ali prapradedek sta tudi prednika.</p>
''',
'descendant_need_not_be_parent': '''\
diff --git a/prolog/problems/family_relations/descendant_2/common.py b/prolog/problems/family_relations/descendant_2/common.py
index 70936da..b4d8f31 100644
--- a/prolog/problems/family_relations/descendant_2/common.py
+++ b/prolog/problems/family_relations/descendant_2/common.py
@@ -88,6 +88,13 @@ def hint(code, aux_code):
return [{'id': 'grandparent_used_markup', 'start': m[0], 'end': m[1]} for m in marks] + \
[{'id': 'grandparent_used'}]
+ # ancestor instead of descendant (wrong direction)
+ # warning: knowledge base dependent
+ if prolog.engine.ask_truthTO(engine_id,
+ 'findall(_, descendant(william, X), L1), length(L1, 6), \
+ findall(_, descendant(X, william), L2), length(L2, 2)'):
+ return [{'id': 'wrong_direction'}]
+
# missing/failed base case
if prolog.engine.ask_truthTO(engine_id,
'parent(Y, X), \+ descendant(X, Y)'):
@@ -100,13 +107,6 @@ def hint(code, aux_code):
else:
return [{'id': 'descendant_of_oneself'}]
- # ancestor instead of descendant (wrong direction)
- # warning: knowledge base dependent
- if prolog.engine.ask_truthTO(engine_id,
- 'findall(_, descendant(william, X), L1), length(L1, 6), \
- findall(_, descendant(X, william), L2), length(L2, 2)'):
- return [{'id': 'wrong_direction'}]
-
# X does not necessarily need to be a parent
if prolog.engine.ask_one(engine_id,
'descendant(X, _), \+ parent(X, _)') == 'false':
diff --git a/prolog/problems/family_relations/descendant_2/sl.py b/prolog/problems/family_relations/descendant_2/sl.py
index 2b638fd..9f1d818 100644
--- a/prolog/problems/family_relations/descendant_2/sl.py
+++ b/prolog/problems/family_relations/descendant_2/sl.py
@@ -54,13 +54,13 @@ Kaj je najbolj enostaven par (potomec, prednik)?</p>
''', # TODO: morda ta hint naredim z "more": najprej tekst, ob kliku pa še slika... (sicer je preveč očitno)
'descendant_of_oneself': '''\
-<p>Kako je lahko nekdo potomec samega sebe? Premisli, morda se ti splača tudi grafično skicirati
-tvojo trenutno rešitev.</p>
+<p>Kako je lahko nekdo potomec samega sebe? Iz trenutne verzije rešitve se da izpeljati tudi to.
+Premisli, morda se ti splača tudi grafično skicirati tvojo trenutno rešitev.</p>
''',
'descendant_of_oneself_with_or': '''\
-<p>Kako je lahko nekdo potomec samega sebe? Premisli, morda se ti splača tudi grafično skicirati
-tvojo trenutno rešitev.</p>
+<p>Kako je lahko nekdo potomec samega sebe? Iz trenutne verzije rešitve se da izpeljati tudi to.
+Premisli, morda se ti splača tudi grafično skicirati tvojo trenutno rešitev.</p>
<p>Morda se ti splača preveriti tudi uporabo podpičja. To praktično naredi dva ločena stavka oz. veji
(eno ali drugo velja, morda tudi oboje). Vendar pazi, ker sta ti dve veji med seboj neodvisni
-- vrednosti iz ene se ne prenašajo v drugo vejo.</p>