Lucrarea nr. 10
Probleme de tip enigma






Exista anumite probleme ale caror specificari nu sprijina crearea unor proceduri care pornind de la specificare sa determine solutia. Aceste date servesc mai mult la testarea unei solutii presupuse. Rezolvarea acestor tipuri de probleme porneste cu generarea unei solutii posibile, urmand ca aceasta sa fie testata daca satiface sau nu cerintele.

Consideram urmatoarea problema:
  Intr-o strada sint cinci case. Despre locatari stim urmatoarele:

Predicatul care rezolva problema se reduce la a genera o configuratie de case si a testa daca aceasta este corecta, completand variabilele inca nelegate. In aceasta situatie generarea tuturor solutiilor complete este lenta, datorita numarului mare de configuratii posibile. O solutie care porneste cu "cinci case goale si nevopsite" este data in fisierul "enigma.pl".
 
 

Probleme:

  1. Consideram un traseu pe care se afla orasele A,B,C,D intr-o ordine necunoscuta. Stim ca A se gaseste la o departare mai mare de C decit C de D, iar B este mai aproape de C decit de D. Care este ordinea oraselor?
  2. Imparatul, pentru a da posibilitate prizonierului sa scape, l-a dus in fata a doua usi, care puteau sa contina un tigru sau o printesa. In plus pe fiecare usa se afla o inscriptie. Trebuie aflat ce se gaseste in fiecare celula. Citeva din situatiile create de imparat:
    1. Cazul 1:
    2. Cazul 2:
    3. Cazul 3:
    Sugestie pentru generare:
        generate :- thing(T1), thing(T2),
                    retractall(is(_,_)),
                    assert(is(T1,1)), assert(is(T2,2)).
        thing(princess). thing(tiger).
     
  3. Completati un careu de 3x3 cu cifrele 1-9 respectand urmatoarele reguli:
    1. cifrele adiacente ca valoare trebuie sa fie adiacente si in careu;
    2.  daca consideram ca trei cifre orizontale formeaza un numar, atunci daca adunam numarul din prima linie cu cea din a doua, rezultatul trebuie sa fie numarul din linia treia.