summaryrefslogtreecommitdiff
path: root/prolog/problems
diff options
context:
space:
mode:
Diffstat (limited to 'prolog/problems')
-rw-r--r--prolog/problems/lists_advanced/shiftright_2/common.py4
-rw-r--r--prolog/problems/lists_advanced/shiftright_2/sl.py34
2 files changed, 30 insertions, 8 deletions
diff --git a/prolog/problems/lists_advanced/shiftright_2/common.py b/prolog/problems/lists_advanced/shiftright_2/common.py
index fbe1b1c..3bd03c1 100644
--- a/prolog/problems/lists_advanced/shiftright_2/common.py
+++ b/prolog/problems/lists_advanced/shiftright_2/common.py
@@ -57,7 +57,9 @@ def test(code, aux_code):
hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}]
if n_correct == len(test_cases):
- hints += [{'id': 'final_hint'}]
+ tokens = prolog.util.tokenize(code)
+ if prolog.util.Token('NAME', 'shiftleft') not in tokens:
+ hints += [{'id': 'final_hint'}]
return n_correct, len(test_cases), hints
diff --git a/prolog/problems/lists_advanced/shiftright_2/sl.py b/prolog/problems/lists_advanced/shiftright_2/sl.py
index 3dfb637..11b1cf0 100644
--- a/prolog/problems/lists_advanced/shiftright_2/sl.py
+++ b/prolog/problems/lists_advanced/shiftright_2/sl.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
name = 'shiftright/2'
slug = 'Premakni elemente seznama za eno mesto v desno'
@@ -8,6 +10,18 @@ description = '''\
X = [5,1,2,3,4].
</pre>'''
+plan = ['''\
+<p>V seznamu vzamem zadnji element in ga dodam preostanku na začetek. Saj se še spomniš od prejšnjič kako vzameš
+zadnji element seznamu? Dodajanje na začetek pa je povsem preprosto, kajne?</p>
+''', '''\
+<p>Seznam dolžine ena je videti kot vzorec <code>[X]</code>. To bi znalo priti prav, kakor tudi predikat
+<code>conc/3</code>.</p>
+''', '''\
+<p>Če je podani seznam <code>L</code> sestavljen iz zadnjega elementa <code>E</code> in preostanka <code>L1</code>
+in če <code>E</code> dodamo <em>na začetek</em> <code>L1</code>, potem je rezultat seznam <code>L</code> premaknjen
+v desno.</p>
+''']
+
hint = {
'eq_instead_of_equ': '''\
<p>Operator <code>==</code> je strožji od operatorja <code>=</code> v smislu, da je za slednjega dovolj,
@@ -26,7 +40,7 @@ implicitno že kar v argumentih predikata (glavi stavka).</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': '''\
@@ -35,17 +49,23 @@ da je <code>X</code> hkrati starš in sestra od <code>Y</code> ali kaj podobno z
''',
'conc_2nd_argument_not_1elem_list': '''\
-<p>conc_2nd_argument_not_1elem_list</p>''',
+<p>Se spomniš kako izgleda "vzorec", ki predstavlja seznam s točno enim elementom? Ne tako kot drugi argument, ki
+si ga podal predikatu <code>conc/3</code>. ;)</p>''',
-'arbitrary_result': '''\
-<p>arbitrary_result</p>''',
+ 'arbitrary_result': '''\
+<p>Si pravilno povezal vse spremenljivke? Zgleda namreč, da vračaš kar poljuben rezultat (spremenljivko brez
+določene vrednosti). Opozorila "singleton variables" večinoma ni pametno ignorirati.</p>
+''',
'shiftleftish_solution': '''\
-<p>shiftleftish_solution</p>''',
+<p>Rep seznama je vedno seznam in ne element. Kako si dobil zadnji element? Tako ne bo šlo...</p>''',
'last_used': '''\
-<p>last_used</p>''',
+<p>S pomočjo predikata <code>last/2</code> bo težko, ker zadnji element ostane v seznamu. Poskusi raje s
+predikatom <code>conc/3</code>.</p>''',
'final_hint': '''\
-<p>final_hint</p>''',
+<p>Predikata <code>shiftleft/2</code> in <code>shiftright/2</code> naredita ravno nasprotni stvari. Če samo
+obrneš argumente, dobiš drugega. Tako bi lahko sprogramiral <code>shiftright/2</code> tudi samo s klicem
+<code>shiftleft/2</code>. Saj veš, v prologu večinoma ni določeno kaj so vhodi in kaj izhodi.</p>''',
}