From 268eb06e05c9a6062e0d34905bed2ecd1696f82c Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Wed, 30 Mar 2016 15:04:25 +0200 Subject: Hints and plans for is_sorted/1 added. --- prolog/problems/sorting/is_sorted_1/sl.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'prolog') diff --git a/prolog/problems/sorting/is_sorted_1/sl.py b/prolog/problems/sorting/is_sorted_1/sl.py index d4cd999..485ecf3 100644 --- a/prolog/problems/sorting/is_sorted_1/sl.py +++ b/prolog/problems/sorting/is_sorted_1/sl.py @@ -1,3 +1,5 @@ +# coding=utf-8 + name = 'is_sorted/1' slug = 'Preveri, če so elementi seznama naraščajoče urejeni' @@ -10,6 +12,18 @@ description = '''\ false. ''' +plan = ['''\ +

Kot vedno, poskusi prevesti na manjši problem. Naredi ustrezno primerjavo na začetku seznama, rep +pa prepusti rekurziji.

+''', '''\ +

Saj znaš dostopati do prvih dveh elementov seznama, kajne? Aritmetične operatorje za primerjanje pa smo +spoznali v prejšnjem sklopu.

+''', '''\ +

Če je podani seznam L sestavljen iz glav H1 in H2 ter repa T +in predpostavimo, da je rep T z drugo glavo vred urejen ter nadalje velja, da je H1 manjši +ali enak H2, potem je celoten seznam L urejen.

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

Operator == je strožji od operatorja = v smislu, da je za slednjega dovolj, @@ -23,8 +37,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 urejen seznam?

''', 'recursive_case': '''\ @@ -32,11 +45,11 @@ Do katerega elementa najlažje prideš?

''', 'predicate_always_false': '''\ -

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

+

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

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

''', 'timeout': '''\ @@ -61,10 +74,14 @@ da je X hkrati starš in sestra od Y ali kaj podobno z ''', 'both_heads_omitted_from_recursion': '''\ -

both_heads_omitted_from_recursion

+

Jemlješ po dva elementa iz seznama preden greš v rekurzijo? Poskušaš malce prihraniti pri primerjavah, kajne? ;) +Ampak žal to ne gre! Od spodnjih dveh primerov eden deluje pravilno in eden ne, ugotovi v čem je razlika.

+

?- is_sorted([1,3,14,16,24,25]).

+

?- is_sorted([24,25,14,16,1,3]).

''', 'min_used': '''\ -

min_used

+

Poskusi rešiti brez uporabe predikata min/2, s časovno zahtevnostjo O(n). Z uporabo +min/2 je le-ta tipično O(n*n).

''', } -- cgit v1.2.1