From 8d8babae7486f17f28c58d7b65e48bf668b27ffc Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Mon, 21 Mar 2016 14:47:29 +0100 Subject: Hints and plans for shiftright/2 added. --- .../problems/lists_advanced/shiftright_2/common.py | 4 ++- prolog/problems/lists_advanced/shiftright_2/sl.py | 34 +++++++++++++++++----- 2 files changed, 30 insertions(+), 8 deletions(-) (limited to 'prolog/problems') 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]. ''' +plan = ['''\ +

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?

+''', '''\ +

Seznam dolžine ena je videti kot vzorec [X]. To bi znalo priti prav, kakor tudi predikat +conc/3.

+''', '''\ +

Če je podani seznam L sestavljen iz zadnjega elementa E in preostanka L1 +in če E dodamo na začetek L1, potem je rezultat seznam L premaknjen +v desno.

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

Operator == je strožji od operatorja = v smislu, da je za slednjega dovolj, @@ -26,7 +40,7 @@ implicitno že kar v argumentih predikata (glavi stavka).

Č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': '''\ @@ -35,17 +49,23 @@ da je X hkrati starš in sestra od Y ali kaj podobno z ''', 'conc_2nd_argument_not_1elem_list': '''\ -

conc_2nd_argument_not_1elem_list

''', +

Se spomniš kako izgleda "vzorec", ki predstavlja seznam s točno enim elementom? Ne tako kot drugi argument, ki +si ga podal predikatu conc/3. ;)

''', -'arbitrary_result': '''\ -

arbitrary_result

''', + 'arbitrary_result': '''\ +

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.

+''', 'shiftleftish_solution': '''\ -

shiftleftish_solution

''', +

Rep seznama je vedno seznam in ne element. Kako si dobil zadnji element? Tako ne bo šlo...

''', 'last_used': '''\ -

last_used

''', +

S pomočjo predikata last/2 bo težko, ker zadnji element ostane v seznamu. Poskusi raje s +predikatom conc/3.

''', 'final_hint': '''\ -

final_hint

''', +

Predikata shiftleft/2 in shiftright/2 naredita ravno nasprotni stvari. Če samo +obrneš argumente, dobiš drugega. Tako bi lahko sprogramiral shiftright/2 tudi samo s klicem +shiftleft/2. Saj veš, v prologu večinoma ni določeno kaj so vhodi in kaj izhodi.

''', } -- cgit v1.2.1