diff options
Diffstat (limited to 'prolog/problems/family_relations/descendant_2')
-rw-r--r-- | prolog/problems/family_relations/descendant_2/en.py | 88 | ||||
-rw-r--r-- | prolog/problems/family_relations/descendant_2/sl.py | 2 |
2 files changed, 86 insertions, 4 deletions
diff --git a/prolog/problems/family_relations/descendant_2/en.py b/prolog/problems/family_relations/descendant_2/en.py index bc7b795..535ef23 100644 --- a/prolog/problems/family_relations/descendant_2/en.py +++ b/prolog/problems/family_relations/descendant_2/en.py @@ -2,12 +2,94 @@ name = 'descendant/2' slug = 'the descendant relation' description = '''\ -<p><code>descendant(X, Y)</code>: <code>X</code> is a descendant (child, grandchild, …) of <code>Y</code>.</p> +<p><code>descendant(X, Y)</code>: <code>X</code> is a descendant (child, grandchild, ...) of <code>Y</code>.</p> <pre> ?- descendant(patricia, X). X = william ; X = tina ; X = thomas. -</pre>''' +</pre> +<p><a target="_blank" href="[%@resource famrel.svg%]">Family trees</a> are +described with predicates <code>parent/2</code>, <code>male/1</code>, and +<code>female/1</code>.</p> +''' + +plan = ['''\ +<p>I believe recursion is needed... how can we transpose the problem to a smaller one (a single step smaller that is)?</p> +<p><img src="[%@resource Prolog_descendant_03.svg%]" alt="A descendant of someone, who is a child of Y, is also a descendant of Y." /></p> +''', '''\ +<p>If <code>Z</code> is a parent of some <code>X</code> and at the same time +<code>Z</code> is a descendant of <code>Y</code>, +then <code>X</code> is also a descendant of <code>Y</code>.</p> +''', '''\ +<p><img src="[%@resource Prolog_descendant_04.svg%]" alt="If X is a descendant of Z, and Z is a child of Y, then X is also a descendant of Y." /></p> +'''] + +hint = { + 'gender_is_irrelevant': '''\ +<p>Je spol res pomemben?</p> +''', + + 'gender_is_irrelevant_markup': '''\ +<p>Je to res potrebno?</p> +''', + + 'grandparent_used': '''\ +<p>Rešitev z "grandparent" bo premalo splošna, poskusi nadomestiti to z rekurzijo. +Skratka, poskusi prevesti na "manjši" problem, npr. potomec v enem koraku manj +(en korak bližji potomec)...</p> +''', + + 'grandparent_used_markup': '''\ +<p>Bi se dalo rešiti brez tega?</p> +''', + + 'base_case': '''\ +<p>Si pomislil na robni pogoj? Rekurzija se mora enkrat tudi ustaviti. +Kaj je najbolj enostaven par (potomec, prednik)?</p> +<p><img src="[%@resource Prolog_descendant_01.svg%]" /></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? 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? 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> +''', + + 'descendant_need_not_be_parent': '''\ +<p>Potomec <code>X</code> pravzaprav ne rabi imeti otrok...</p> +''', + + 'predicate_always_false': '''\ +<p>Vse kaže, da tvoj predikat vedno vrne "false". Si mu dal pravilno ime, si se morda pri imenu zatipkal?</p> +<p>Č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?</p> +<p>Možno je seveda tudi, da so tvoji pogoji prestrogi ali celo nemogoči (kot bi bila npr. zahteva, +da je <code>X</code> hkrati starš in sestra od <code>Y</code> ali kaj podobnega).</p> +''', + + 'timeout': '''\ +<p>Je morda na delu potencialno neskončna rekurzija? Kako se bo ustavila?</p> +<p>Morda pa je kriv tudi manjkajoč, neustrezen ali preprosto nekompatibilen (s splošnim primerom) robni pogoj?</p> +''', + + 'wrong_direction': '''\ +<p>Si morda sprogramiral ravno obratno in zamenjal prednika s potomcem? +<code>X</code> naj bo potomec od <code>Y</code> in ne obratno!</p> +<p><img src="[%@resource Prolog_descendant_02.svg%]" /></p> +''', # TODO: Tim, kako bi lahko še query poslali med parametri v Hint dict? Je to predvideno? Tukaj bi recimo pasalo... + + 'final_hint': '''\ +<p>Zanimivost: nalogo bi lahko rešil tudi z uporabo rešitve za relacijo <code>ancestor/2</code>. +Samo obrni spremenljivki <code>X</code> in <code>Y</code>; +če je <code>X</code> potomec od <code>Y</code>, potem je <code>Y</code> prednik od <code>X</code>.</p> +''', +} -hint = {} diff --git a/prolog/problems/family_relations/descendant_2/sl.py b/prolog/problems/family_relations/descendant_2/sl.py index 0547da7..8f7f34f 100644 --- a/prolog/problems/family_relations/descendant_2/sl.py +++ b/prolog/problems/family_relations/descendant_2/sl.py @@ -3,7 +3,7 @@ slug = 'the descendant relation' description = '''\ <p><code>descendant(X, Y)</code>: <code>X</code> je potomec (otrok, vnuk, -pravnukinja, …) od <code>Y</code>.</p> +pravnukinja, ...) od <code>Y</code>.</p> <pre> ?- descendant(patricia, Y). Y = william ; |