From 2fefd55550808f630190c89c6d9b3f6bfed3f164 Mon Sep 17 00:00:00 2001
From: Aleksander Sadikov
Date: Thu, 1 Oct 2015 21:11:58 +0200
Subject: Figures and hints updated for mother/2, father/2, and grandparent/2
problems.
---
prolog/problems/family_relations/father_2/common.py | 7 +++++++
prolog/problems/family_relations/father_2/sl.py | 18 +++++++++++-------
.../problems/family_relations/grandparent_2/common.py | 7 +++++--
prolog/problems/family_relations/grandparent_2/sl.py | 13 +++++++++----
prolog/problems/family_relations/mother_2/common.py | 1 +
5 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/prolog/problems/family_relations/father_2/common.py b/prolog/problems/family_relations/father_2/common.py
index cbfbcab..1643066 100644
--- a/prolog/problems/family_relations/father_2/common.py
+++ b/prolog/problems/family_relations/father_2/common.py
@@ -21,6 +21,7 @@ father(X, Y) :-
hint_type = {
'or_instead_of_and': Hint('or_instead_of_and'),
+ 'or_instead_of_and_two_rules': Hint('or_instead_of_and_two_rules'),
'x_must_be_male': Hint('x_must_be_male'),
'x_must_be_parent': Hint('x_must_be_parent'),
'y_can_be_of_any_gender': Hint('y_can_be_of_any_gender'),
@@ -80,6 +81,12 @@ def hint(program, solved_problems):
'findall(_, father(X, Y), L), length(L, 48)'):
return [{'id': 'or_instead_of_and'}]
+ # OR instead of AND written with two rules, namely:
+ # (r1) father(X, Y):- male(X). (r2) father(X, Y):- parent(X, Y).
+ if prolog.engine.ask_truth(engine_id,
+ 'findall(_, father(X, Y), L), length(L, 48)'):
+ return [{'id': 'or_instead_of_and_two_rules'}]
+
# X must be male
if prolog.engine.ask_truth(engine_id, 'female(X), father(X, _)'):
return [{'id': 'x_must_be_male'}]
diff --git a/prolog/problems/family_relations/father_2/sl.py b/prolog/problems/family_relations/father_2/sl.py
index ee6893b..67bf764 100644
--- a/prolog/problems/family_relations/father_2/sl.py
+++ b/prolog/problems/family_relations/father_2/sl.py
@@ -17,28 +17,32 @@ description = '''\
plan = [
'''\
-
-Loni naj zbriše imena relacij (parent, mother) s te slike!
''',
+''',
'''\
-''',
+''',
'''\
-Če je X
ženska in je hkrati X
starš od Y
,
-potem je X
mama od Y
.
'''
+Če je X
moški in je hkrati X
starš od Y
,
+potem je X
oče od Y
.
'''
]
hint = {
'or_instead_of_and': '''\
Si morda uporabil podpičje (ki pomeni ALI) namesto vejice (ki pomeni IN)?
+''',
+
+ 'or_instead_of_and_two_rules': '''\
+Si morda zapisal dve pravili, eno za spol in eno za "starševstvo"?
+Pozor: velja eno ALI drugo, ne nujno eno IN drugo!
''',
'x_must_be_male': '''\
Oče je navadno moškega spola.
-
+
''',
'x_must_be_parent': '''\
Oče naj bi imel vsaj enega otroka... torej je starš od nekoga.
-
+
''',
'y_can_be_of_any_gender': '''\
diff --git a/prolog/problems/family_relations/grandparent_2/common.py b/prolog/problems/family_relations/grandparent_2/common.py
index 078ed4e..e9df06b 100644
--- a/prolog/problems/family_relations/grandparent_2/common.py
+++ b/prolog/problems/family_relations/grandparent_2/common.py
@@ -21,7 +21,8 @@ grandparent(X, Y) :-
hint_type = {
'no_common_z': Hint('no_common_z'),
- 'gender_is_irrelevant': HintPopup('gender_is_irrelevant'),
+ 'gender_is_irrelevant_markup': HintPopup('gender_is_irrelevant_markup'),
+ 'gender_is_irrelevant': Hint('gender_is_irrelevant'),
'or_instead_of_and': Hint('or_instead_of_and'),
'x_must_be_parent': Hint('x_must_be_parent'),
'x_need_not_have_parent': Hint('x_need_not_have_parent'),
@@ -86,7 +87,9 @@ def hint(program, solved_problems):
# this is not necessarily wrong, but worth mentioning anyway
targets = [prolog.util.Token('NAME', 'male'), prolog.util.Token('NAME', 'female')]
marks = [(t.pos, t.pos + len(t.val)) for t in tokens if t in targets]
- return [{'id': 'gender_is_irrelevant', 'start': m[0], 'end': m[1]} for m in marks]
+ if marks:
+ return [{'id': 'gender_is_irrelevant_markup', 'start': m[0], 'end': m[1]} for m in marks] + \
+ [{'id': 'gender_is_irrelevant'}]
# OR (;) instead of AND (,)
# this hint has to be before the next two
diff --git a/prolog/problems/family_relations/grandparent_2/sl.py b/prolog/problems/family_relations/grandparent_2/sl.py
index a26d0b7..35ff49e 100644
--- a/prolog/problems/family_relations/grandparent_2/sl.py
+++ b/prolog/problems/family_relations/grandparent_2/sl.py
@@ -15,10 +15,9 @@ description = '''\
'''
plan = ['''\
-
-Loni naj zbriše imena relacij (parent, grandparent) s te slike!
+
''', '''\
-
+
''', '''\
Če je X
starš od starša od Y
,
potem je X
stari starš od Y
.
@@ -27,10 +26,14 @@ potem je X
stari starš od Y
.
hint = {
'no_common_z': '''\
Si povezal X
in Y
preko neke skupne (iste!) osebe?
-''', # TODO: Tim, tale namig.. nisem prepričan, da mi je všeč... (kako je izražen)
+''', # TODO: Tim, tale namig.. nisem prepričan, da mi je všeč... (kako je izražen) -- morda nova slika!?
'gender_is_irrelevant': '''\
Iščemo starega starša in vnuka, spol pri tem ni pomemben.
+''',
+
+ 'gender_is_irrelevant_markup': '''\
+Je to res potrebno?
''',
'or_instead_of_and': '''\
@@ -39,6 +42,7 @@ hint = {
'x_must_be_parent': '''\
Dedek ali babica ima gotovo kakšnega otroka, kajne? Torej je starš od nekoga...
+
''',
'x_need_not_have_parent': '''\
@@ -47,6 +51,7 @@ hint = {
'y_must_have_parent': '''\
Vnuk Y
mora imeti starša, kajne? Ta starš pa je...
+
''',
'y_need_not_be_parent': '''\
diff --git a/prolog/problems/family_relations/mother_2/common.py b/prolog/problems/family_relations/mother_2/common.py
index d943b9c..18b3027 100644
--- a/prolog/problems/family_relations/mother_2/common.py
+++ b/prolog/problems/family_relations/mother_2/common.py
@@ -21,6 +21,7 @@ mother(X, Y) :-
hint_type = {
'or_instead_of_and': Hint('or_instead_of_and'),
+ 'or_instead_of_and_two_rules': Hint('or_instead_of_and_two_rules'),
'x_must_be_female': Hint('x_must_be_female'),
'x_must_be_parent': Hint('x_must_be_parent'),
'y_can_be_of_any_gender': Hint('y_can_be_of_any_gender'),
--
cgit v1.2.1