zanarico
Ominide
2 min. di lettura
Vota

Concetti Chiave

  • Il programma definisce un insieme di numeri da 0 a 9 attraverso il predicato "cifra" per essere utilizzati nelle soluzioni.
  • La funzione "risolvi" chiama il predicato "soluzione" per trovare combinazioni di numeri che soddisfano determinate equazioni aritmetiche.
  • Il programma include quattro varianti di "soluzione", ognuna con diverse condizioni aritmetiche per la somma e il riporto.
  • Le combinazioni di numeri devono essere diverse tra loro, come definito dal predicato "diversi".
  • Le soluzioni trovate vengono stampate attraverso l'uso del predicato "write" per mostrare i valori di A, B e C.

Per una descrizione del problema si veda l'articolo Intelligenza artificiale: un assaggio.

cifra(0).
cifra(1).
cifra(2).
cifra(3).
cifra(4).
cifra(5).
cifra(6).
cifra(7).
cifra(8).
cifra(9).
risolvi(A,B,C):-
soluzione(A,B,C).
soluzione(A,B,C) :-

/* nessun riporto - solo D+S */
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I,
T is U + E,
T is D + S - 10 + 1,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 +O,
write(A),
write(B),
write(C).


soluzione(A,B,C) :-

/* riporto colonna unit e D+S*/
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I - 10,
T is U + E + 1,
T is D + S - 10,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 + O,
write(A),
write(B),
write(C).
soluzione(A,B,C) :-

/* riporto colonna decine e D+S */
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I,
T is U + E,
T is D + S - 10,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 +O,
write(A),
write(B),
write(C).
soluzione(A,B,C) :-

/* riporto colonne decine e unit e D+S */
cifra(D),
cifra(U),
cifra(E),
cifra(S),
cifra(I),
cifra(O),
cifra(T),
O is E + I - 10,
T is U + E + 1 - 10,
T is D + S - 10 + 1,
O is 1,
diversi(D,U,E,S,I,O,T),
A is D*100+U*10+E,
B is S*100+E*10+I,
C is O*1000 + T*100 + T*10 +O,
write(A),
write(B),
write(C).
diversi(D,U,E,S,I,O,T):-
D == U,
D == E,
D == S,
D == I,
D == O,
D == T,
U == E,
U == S,
U == I,
U == O,
U == T,
E == S,
E == I,
E == O,
E == T,
S == I,
S == O,
S == T,
I == O,
I == T,
O == T.

Domande da interrogazione

  1. Qual è lo scopo principale del codice presentato?
  2. Il codice è progettato per risolvere un problema di calcolo che coinvolge cifre e operazioni aritmetiche, cercando soluzioni che soddisfano determinate condizioni.

  3. Come vengono gestiti i riporti nelle operazioni aritmetiche?
  4. Il codice considera diverse situazioni di riporto, come nessun riporto, riporto nella colonna delle unità, e riporto nelle colonne delle decine e delle unità, per trovare soluzioni valide.

  5. Qual è la funzione del predicato "diversi" nel codice?
  6. Il predicato "diversi" assicura che tutte le cifre D, U, E, S, I, O, T siano diverse tra loro, garantendo che ogni cifra sia unica nella soluzione.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community