Exerciții Laboratorul 4, Exercițiul 2

Word puzzle — FLOWERS crossword

Fie următoarele șase cuvinte:

FLOWERS    PROLOG    ENTIRELY    SCHOOL    OREGANO    SLEEP

Vom așeza cuvintele într-un puzzle tip cuvinte încrucișate — cinci cuvinte sunt pe orizontală, iar al șaselea este pe verticală. Coloana evidențiată a cuvântului vertical coincide cu câte o literă din fiecare cuvânt orizontal.

Pentru rezolvare:

  1. Implementați o bază de cunoștințe, definită prin predicatul word/1.
  2. Utilizați predicatul string_chars/2, care primește un atom și returnează lista caracterelor conținute în atomul respectiv.
  3. Definiți un predicat list_pos/3 care primește o listă, un index și returnează elementul de pe indexul dat dacă acesta există, și false altfel.

Veți scrie un predicat principal

solution(W1, W2, W3, W4, W5, W6, L) :- ...

care se va asigura că cele șase cuvinte sunt cele din baza de cunoștințe și sunt mutual diferite, iar în L va întoarce o listă conținând soluția acestui puzzle.

Hint: cheia este că pozițiile intersecțiilor dintre cuvintele orizontale și cel vertical (W6) sunt fixate. Folosești intersection(L1, L2, Pos1, Pos2) pentru a forța litera pe poziția Pos1 din L1 să fie egală cu litera pe poziția Pos2 din L2.

Te-ai blocat?
editor soluție
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (1 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
solution(W1, W2, W3, W4, W5, W6, L). așteptat: W1 = prolog, W2 = oregano, W3 = entirely, W4 = flowers, W5 = school, W6 = sleep, L = [r,r,t,l,o]