summaryrefslogtreecommitdiff
path: root/prolog/problems
diff options
context:
space:
mode:
Diffstat (limited to 'prolog/problems')
-rw-r--r--prolog/problems/lists_advanced/palindrome_1/common.py10
-rw-r--r--prolog/problems/lists_advanced/palindrome_1/sl.py28
2 files changed, 27 insertions, 11 deletions
diff --git a/prolog/problems/lists_advanced/palindrome_1/common.py b/prolog/problems/lists_advanced/palindrome_1/common.py
index bbd28fb..2299e45 100644
--- a/prolog/problems/lists_advanced/palindrome_1/common.py
+++ b/prolog/problems/lists_advanced/palindrome_1/common.py
@@ -32,7 +32,8 @@ hint_type = {
'one_base_case_missing': Hint('one_base_case_missing'),
'arbitrary_base_case': Hint('arbitrary_base_case'),
'last_used': Hint('last_used'),
- 'final_hint': Hint('final_hint'),
+ 'final_hint_1': Hint('final_hint_1'),
+ 'final_hint_2': Hint('final_hint_2'),
}
test_cases = [
@@ -62,7 +63,12 @@ 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', 'rev') not in tokens:
+ hints += [{'id': 'final_hint_1'}]
+ if prolog.util.Token('NAME', 'rev') in tokens and \
+ (prolog.util.Token('EQU', '=') in tokens or prolog.util.Token('EQ', '==') in tokens):
+ hints += [{'id': 'final_hint_2'}]
return n_correct, len(test_cases), hints
def hint(code, aux_code):
diff --git a/prolog/problems/lists_advanced/palindrome_1/sl.py b/prolog/problems/lists_advanced/palindrome_1/sl.py
index ce6dedc..39b054a 100644
--- a/prolog/problems/lists_advanced/palindrome_1/sl.py
+++ b/prolog/problems/lists_advanced/palindrome_1/sl.py
@@ -35,8 +35,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? Kateri seznam predstavlja najkrajši možen palindrom?</p>
''',
'predicate_always_false': '''\
@@ -44,7 +43,7 @@ Do katerega elementa najlažje prideš?</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': '''\
@@ -53,22 +52,33 @@ da je <code>X</code> hkrati starš in sestra od <code>Y</code> ali kaj podobno z
''',
'[X,X]_instead_of_[]_base_case': '''\
-<p>[X,X]_instead_of_[]_base_case')</p>
+<p>Vsekakor je [X,X] povsem dober robni pogoj, a ne pokrije posebnega primera, ko je vhod kar prazen seznam. To je
+seveda stvar definicije, a da bomo imeli vsi enake rešitve, prosim, popravi.</p>
''',
'one_base_case_missing': '''\
-<p>one_base_case_missing</p>
+<p>Jemlješ po <em>dva</em> elementa stran ob vsakem prehodu rekurzije? Kako se to zaključi? Liho, sodo? ;)</p>
+<p>Poskusi naslednja dva primera, eden bo lepo deloval, drugi ne. V čem je razlika?</p>
+<p><code>?- palindrome([a,b,b,a]).</code></p>
+<p><code>?- palindrome([l,e,v,e,l]).</code></p>
''',
'arbitrary_base_case': '''\
-<p>arbitrary_base_case</p>
+<p>Pazi <code>_</code> ni enako kot <code>[_]</code>. Prvo predstavlja poljubno spremenljivko, drugo seznam
+z <em>enim</em> poljubnim elementom.</p>
''',
'last_used': '''\
-<p>last_used</p>
+<p>Predikat <code>last/2</code> je tukaj štorast, ker pusti zadnji element v seznamu.</p>
''',
- 'final_hint': '''\
-<p>final_hint</p>
+ 'final_hint_1': '''\
+<p>Zanimivost: veš, da bi to nalogo lahko rešil tudi s samo enim klicem? Kaj se zgodi, če palindrom... khm,
+obrneš? ;)</p>
+''',
+
+ 'final_hint_2': '''\
+<p>Rešitev lahko še dodatno skrajšaš. Kako se lahko znebiš operatorja <code>=</code> (<code>==</code>)
+oziroma ga narediš implicitnega?</p>
''',
}