diff options
Diffstat (limited to 'prolog/problems')
-rw-r--r-- | prolog/problems/lists_advanced/shiftright_2/common.py | 4 | ||||
-rw-r--r-- | prolog/problems/lists_advanced/shiftright_2/sl.py | 34 |
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>''', } |