summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Sadikov <aleksander.sadikov@fri.uni-lj.si>2016-03-30 15:04:25 +0200
committerAleksander Sadikov <aleksander.sadikov@fri.uni-lj.si>2016-03-30 15:04:25 +0200
commit268eb06e05c9a6062e0d34905bed2ecd1696f82c (patch)
treeaa15b7bd32bf65f1f7a36bb7f384b94f55ee4d6e
parent0b8a785ce0212783b45a328ba2ab6600ae05d333 (diff)
Hints and plans for is_sorted/1 added.
-rw-r--r--prolog/problems/sorting/is_sorted_1/sl.py29
1 files changed, 23 insertions, 6 deletions
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.
</pre>'''
+plan = ['''\
+<p>Kot vedno, poskusi prevesti na manjši problem. Naredi ustrezno primerjavo na začetku seznama, rep
+pa prepusti rekurziji. </p>
+''', '''\
+<p>Saj znaš dostopati do prvih dveh elementov seznama, kajne? Aritmetične operatorje za primerjanje pa smo
+spoznali v prejšnjem sklopu.</p>
+''', '''\
+<p>Če je podani seznam <code>L</code> sestavljen iz glav <code>H1</code> in <code>H2</code> ter repa <code>T</code>
+in predpostavimo, da je rep <code>T</code> z drugo glavo vred urejen ter nadalje velja, da je <code>H1</code> manjši
+ali enak <code>H2</code>, potem je celoten seznam <code>L</code> urejen.</p>
+''']
+
hint = {
'eq_instead_of_equ': '''\
<p>Operator <code>==</code> je strožji od operatorja <code>=</code> v smislu, da je za slednjega dovolj,
@@ -23,8 +37,7 @@ implicitno že kar v argumentih predikata (glavi stavka).</p>
''',
'base_case': '''\
-<p>Si pomislil na robni pogoj? Kaj je najbolj enostaven primer, ko je element v seznamu?
-Do katerega elementa najlažje prideš?</p>
+<p>Si pomislil na robni pogoj? Kaj je najkrajši urejen seznam?</p>
''',
'recursive_case': '''\
@@ -32,11 +45,11 @@ Do katerega elementa najlažje prideš?</p>
''',
'predicate_always_false': '''\
-<p>Vse kaže, da tvoj predikat vedno vrne <code>false</code>. Si mu dal pravilno ime, si se morda pri imenu zatipkal?</p>
+<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 podobno zlobnega).</p>
+da je <code>N</code> enako kot <code>N + 1</code> ali kaj podobno logično zlobnega).</p>
''',
'timeout': '''\
@@ -61,10 +74,14 @@ da je <code>X</code> hkrati starš in sestra od <code>Y</code> ali kaj podobno z
''',
'both_heads_omitted_from_recursion': '''\
-<p>both_heads_omitted_from_recursion</p>
+<p>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. </p>
+<p><code>?- is_sorted([1,3,14,16,24,25]).</code></p>
+<p><code>?- is_sorted([24,25,14,16,1,3]).</code></p>
''',
'min_used': '''\
-<p>min_used</p>
+<p>Poskusi rešiti brez uporabe predikata <code>min/2</code>, s časovno zahtevnostjo O(n). Z uporabo
+<code>min/2</code> je le-ta tipično O(n*n).</p>
''',
}