From 8eb67a4b388698f01b06cdf6a1a7935ab166ab34 Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Mon, 21 Mar 2016 18:44:28 +0100 Subject: Hints and plans for min/2 added. --- prolog/problems/lists_advanced/max_2/sl.py | 2 +- prolog/problems/lists_advanced/min_2/sl.py | 39 +++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) (limited to 'prolog/problems/lists_advanced') diff --git a/prolog/problems/lists_advanced/max_2/sl.py b/prolog/problems/lists_advanced/max_2/sl.py index 07431d6..cb67fd1 100644 --- a/prolog/problems/lists_advanced/max_2/sl.py +++ b/prolog/problems/lists_advanced/max_2/sl.py @@ -19,7 +19,7 @@ plan = ['''\ ki je večji zmaga in ga vrneš!

''', '''\

Če je podani seznam L sestavljen iz glave H in repa T ter predpostavimo, -da je največji element v T enak MaxT. Če dalje velja še, da je vrednost H +da je največji element v T enak MaxT ter dalje velja še, da je vrednost H večja od MaxT, potem je H največji element v L. Ali pa velja, da je vrednost H manjša od MaxT, v tem primeru pa je MaxT največji element v L.

diff --git a/prolog/problems/lists_advanced/min_2/sl.py b/prolog/problems/lists_advanced/min_2/sl.py index 8f80e3f..d318807 100644 --- a/prolog/problems/lists_advanced/min_2/sl.py +++ b/prolog/problems/lists_advanced/min_2/sl.py @@ -1,3 +1,5 @@ +# coding=utf-8 + name = 'min/2' slug = 'Poišči najmanjši element v danem seznamu' @@ -10,6 +12,19 @@ description = '''\ M = 2. ''' +plan = ['''\ +

Kot vedno, poskusi prevesti na manjši problem. Recimo, da že imaš najmanjši element v repu seznama...

+''', '''\ +

Najmanjši element v repu (seznamu brez glave H) primerjaj z vrednostjo glave H, tisti, +ki je manjši zmaga in ga vrneš!

+''', '''\ +

Če je podani seznam L sestavljen iz glave H in repa T ter predpostavimo, +da je najmanjši element v T enak MinT ter dalje velja še, da je vrednost H +manjša od MinT, potem je H najmanjši element v L. Ali pa velja, da je +vrednost H večja od MinT, v tem primeru pa je MinT najmanjši element v +L.

+'''] + hint = { 'eq_instead_of_equ': '''\

Operator == je strožji od operatorja = v smislu, da je za slednjega dovolj, @@ -24,8 +39,7 @@ implicitno že kar v argumentih predikata (glavi stavka).

''', 'base_case': '''\ -

Si pomislil na robni pogoj? Kaj je najbolj enostaven primer, ko je element v seznamu? -Do katerega elementa najlažje prideš?

+

Si pomislil na robni pogoj? Kaj je najkrajši seznam, ki ima očiten najmanjši element?

''', 'recursive_case': '''\ @@ -37,7 +51,7 @@ Do katerega elementa najlažje prideš?

Č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 ali kaj podobno zlobnega).

+da je N enako kot N + 1 ali kaj podobno logično zlobnega).

''', 'timeout': '''\ @@ -46,26 +60,33 @@ da je X hkrati starš in sestra od Y ali kaj podobno z ''', 'empty_list_base_case': '''\ -

empty_list_base_case

+

V praznem seznamu boš težko našel najmanjši element. Kaj, če se tokrat ustaviš malo prej?

''', 'list_instead_of_elem_base_case': '''\ -

list_instead_of_elem_base_case

+

Vrni element in ne seznam!

''', 'duplicates_not_covered': '''\ -

duplicates_not_covered

+

Si pomislil, da so v seznamu lahko tudi duplikati?

''', 'args_not_instantiated': '''\ -

args_not_instantiated

+

Napaka, ki si jo dobil od prologa, pomeni, da ob uporabi aritmetike niso podane vse vrednosti spremenljivk.

+

Si morda pozabil, da konjunkcija veže močneje od disjunkcije oz. da je vsak prologov stavek (veja, pravilo) +samostojen v smislu dosega spremenljivk? Morda je to problem. Pozorno poglej oba bloka kode (pred in za podpičjem), +oziroma obe pravili.

''', 'unprotected_branch': '''\ -

unprotected_branch

+

Zdi se mi, da si pozabil "zaščititi" eno izmed obeh vej. Obe veji (disjunkciji) potrebujeta pogoj, ne zanašaj se +na to, da če je prišel v drugo vejo, potem prva ne velja. Velja OR in ne XOR. Zato jih moraš ti narediti +ekskluzivne. Poskusi tole vprašanje in poglej vse možne rešitve, boš videl v čem je problem.

+

?- min([1,9,3,8,6], Min).

''', 'one_branch_missing': '''\ -

one_branch_missing

+

Si morda pozabil na eno izmed možnosti? Glava je lahko ali večja ali manjša od +najmanjšega elementa v repu.

''', } -- cgit v1.2.1