From 2d9a7b4323c8f78495ce45917cefdb502c846bbc Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Mon, 29 Feb 2016 13:46:53 +0100 Subject: Hints for aunt/2 improved. Also added to text for predicate_always_false hints. --- prolog/problems/family_relations/aunt_2/common.py | 9 +++++++-- prolog/problems/family_relations/aunt_2/sl.py | 8 ++++++++ prolog/problems/family_relations/brother_2/sl.py | 2 ++ prolog/problems/family_relations/father_2/sl.py | 2 ++ prolog/problems/family_relations/grandparent_2/sl.py | 2 ++ prolog/problems/family_relations/mother_2/sl.py | 2 ++ prolog/problems/family_relations/sister_2/sl.py | 2 ++ 7 files changed, 25 insertions(+), 2 deletions(-) (limited to 'prolog') diff --git a/prolog/problems/family_relations/aunt_2/common.py b/prolog/problems/family_relations/aunt_2/common.py index e545000..d408041 100644 --- a/prolog/problems/family_relations/aunt_2/common.py +++ b/prolog/problems/family_relations/aunt_2/common.py @@ -33,6 +33,7 @@ hint_type = { 'aunt_vs_mother': Hint('aunt_vs_mother'), 'x_need_not_be_parent': Hint('x_need_not_be_parent'), 'y_need_not_be_parent': Hint('y_need_not_be_parent'), + 'predicate_always_false': Hint('predicate_always_false'), } test_cases = [ @@ -69,12 +70,16 @@ def hint(code, aux_code): try: engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) + # target predicate seems to always be false + if not prolog.engine.ask_truth(engine_id, 'aunt(_, _)'): + return [{'id': 'predicate_always_false'}] + # X and Y mixed up # warning: knowledge base dependent # independent: match on findall(X/Y, (sister(Y, P), parent(P, X)), L) if prolog.engine.ask_truth(engine_id, - 'findall(X/Y, aunt(X, Y), \ - [vanessa/sally, patricia/sally, joanne/melanie, john/vanessa, susan/patricia])'): + 'setof(X/Y, aunt(X, Y), [alessandro/daniela, alessandro/luana, jeffrey/andrew, \ + jeffrey/melanie, patricia/susan, vanessa/john, william/andrew, william/melanie])'): return [{'id': 'x_and_y_mixed_up'}] # precedence fail (AND block vs OR block) diff --git a/prolog/problems/family_relations/aunt_2/sl.py b/prolog/problems/family_relations/aunt_2/sl.py index 81014f4..15b6aec 100644 --- a/prolog/problems/family_relations/aunt_2/sl.py +++ b/prolog/problems/family_relations/aunt_2/sl.py @@ -70,5 +70,13 @@ Si morda pozabil, da teta in starš od Y ne smeta biti ista oseba?< Teta je namreč sestra od starša od Y.

''', # TODO: only trigger if sister is not part of correct solution + + 'predicate_always_false': '''\ +

Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?

+

Če je ime pravilno, se morda splača preveriti tudi, če se nisi zatipkal kje drugje, +je morda kakšna pika namesto vejice ali obratno, morda kakšna spremenljivka z malo začetnico?

+

Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je X hkrati starš in sestra od Y).

+''', } diff --git a/prolog/problems/family_relations/brother_2/sl.py b/prolog/problems/family_relations/brother_2/sl.py index ed2d015..9c01d10 100644 --- a/prolog/problems/family_relations/brother_2/sl.py +++ b/prolog/problems/family_relations/brother_2/sl.py @@ -70,5 +70,7 @@ ko naleti na primerjavo.

Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?

Če je ime pravilno, se morda splača preveriti tudi, če se nisi zatipkal kje drugje, je morda kakšna pika namesto vejice ali obratno, morda kakšna spremenljivka z malo začetnico?

+

Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je X hkrati starš in sestra od Y).

''', } diff --git a/prolog/problems/family_relations/father_2/sl.py b/prolog/problems/family_relations/father_2/sl.py index e59e42d..3186a93 100644 --- a/prolog/problems/family_relations/father_2/sl.py +++ b/prolog/problems/family_relations/father_2/sl.py @@ -59,5 +59,7 @@ Pozor: velja eno ALI drugo, ne nujno eno IN drugo!

Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?

Če je ime pravilno, se morda splača preveriti tudi, če se nisi zatipkal kje drugje, je morda kakšna pika namesto vejice ali obratno, morda kakšna spremenljivka z malo začetnico?

+

Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je X hkrati starš in sestra od Y).

''', } diff --git a/prolog/problems/family_relations/grandparent_2/sl.py b/prolog/problems/family_relations/grandparent_2/sl.py index 549d7cc..231be90 100644 --- a/prolog/problems/family_relations/grandparent_2/sl.py +++ b/prolog/problems/family_relations/grandparent_2/sl.py @@ -66,5 +66,7 @@ hint = {

Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?

Če je ime pravilno, se morda splača preveriti tudi, če se nisi zatipkal kje drugje, je morda kakšna pika namesto vejice ali obratno, morda kakšna spremenljivka z malo začetnico?

+

Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je X hkrati starš in sestra od Y).

''', } diff --git a/prolog/problems/family_relations/mother_2/sl.py b/prolog/problems/family_relations/mother_2/sl.py index 9656d88..8c0c7a9 100644 --- a/prolog/problems/family_relations/mother_2/sl.py +++ b/prolog/problems/family_relations/mother_2/sl.py @@ -60,5 +60,7 @@ Pozor: velja eno ALI drugo, ne nujno eno IN drugo!

Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?

Če je ime pravilno, se morda splača preveriti tudi, če se nisi zatipkal kje drugje, je morda kakšna pika namesto vejice ali obratno, morda kakšna spremenljivka z malo začetnico?

+

Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je X hkrati starš in sestra od Y).

''', } diff --git a/prolog/problems/family_relations/sister_2/sl.py b/prolog/problems/family_relations/sister_2/sl.py index 16ae999..8648dff 100644 --- a/prolog/problems/family_relations/sister_2/sl.py +++ b/prolog/problems/family_relations/sister_2/sl.py @@ -69,6 +69,8 @@ ko naleti na primerjavo.

Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?

Če je ime pravilno, se morda splača preveriti tudi, če se nisi zatipkal kje drugje, je morda kakšna pika namesto vejice ali obratno, morda kakšna spremenljivka z malo začetnico?

+

Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je X hkrati starš in sestra od Y).

''', 'final_hint': '''\ -- cgit v1.2.1