Jump to content
Addic73d

Afla nationalitatea...

Recommended Posts

Posted

Pleci in vacanta cu avionul intr-o destinatie exotica, unde te imprietenesti cu alte trei persoane, din China, Japonia si respectiv Mongolia.

Ca sa faca vacanta mai interesanta, cele trei persoane iti spun numele lor: Liu, Sao si Kim, dar nu-ti spun din ce tara este fiecare.

Trebuie sa afli tu asta.

Poti gasi raspunsul folosindu-te de setul de 6 reguli de mai jos?

1) daca Liu nu este din China, Kim nu este din Mongolia

2) daca Sao este fie din Japonia fie din China, atunci Liu este din Mongolia

3) daca Kim nu este din Japonia, atunci Liu nu poate fi din Mongolia

4) daca Kim nu este din China, atunci Liu nu este din Mongolia

5) daca Kim este din Mongolia, atunci Sao nu este din China sau din Japonia

6) daca Sao este din Mongolia, atunci Liu nu este din Japonia

Posted

Merge f?cut? perfect cu Inteligen?? Artificial?/Logic? computa?ional?, dar este inutil la ceva atât de simplu.

Ce au zis cei de mai sus, dar adaug c? ?i 5 este corect pentru c? acolo este sau. Oricum e o exprimare ambiguu?, adic? ar trebui zic ori "daca Kim este din Mongolia, atunci Sao nu este din China ?i nici din Japonia", ori "daca Kim este din Mongolia, atunci Sao poate fi din China sau Japonia".

Posted (edited)

ceva nu e bine..

import time
def bbb(c,m,j):
l=1
s=2
k=3
c = [c]
m = [m]
j = [j]
sum = 0
if l in c and k not in m:
sum = sum + 1
if (s in j or s in c )and l in m:
sum = sum + 1
if k not in j and l not in m:
sum = sum + 1
if k not in c and l not in m:
sum = sum + 1
if k in m and (s not in c or s not in j):
sum = sum + 1
if s in m and l not in j:
sum = sum + 1
if sum > 4 :
print sum, c , m , j

for a in range(1,4):
for b in range(1,4):
for c in range(1,4):
bbb(a,b,c)
time.sleep(99)

Edited by devacanta
Posted

@devacanta: Este ceva gre?it prin algoritmul t?u ?i nu prea am cheful necesar s? stau acum s? v?d ce.

Eu ziceam ceva de inteligen?? artificial?/logic?, nu backtracking. Vezi programe gen Prolog.

Posted

vasile, gheorghe, ion, bula, fane

bucuresti, cluj, satu mare, craiova, constanta

daca ion e din constanta, vasile ar putea fi din bucuresti iar fane e din satu mare

daca ion nu e din bucuresti, fane e din craiova

daca bula nu e din cluj, atunci e ori din satu mare, ori din craiova

daca fane e din bucuresti, gheorghe e din cluj

daca gheorghe nu e din cluj, ion nu e din satu mare, iar bula ar putea fi din constanta

daca vasile e din craiova, gheorghe nu e din cluj iar bula e din bucuresti

daca gheorghe nu e din satu mare, bula nu e din craiova

care din ce localitate e?

exista mai multe raspunsuri corecte?

Posted
vasile, gheorghe, ion, bula, fane

bucuresti, cluj, satu mare, craiova, constanta

daca ion e din constanta, vasile ar putea fi din bucuresti iar fane e din satu mare

daca ion nu e din bucuresti, fane e din craiova

daca bula nu e din cluj, atunci e ori din satu mare, ori din craiova

daca fane e din bucuresti, gheorghe e din cluj

daca gheorghe nu e din cluj, ion nu e din satu mare, iar bula ar putea fi din constanta

daca vasile e din craiova, gheorghe nu e din cluj iar bula e din bucuresti

daca gheorghe nu e din satu mare, bula nu e din craiova

care din ce localitate e?

exista mai multe raspunsuri corecte?

sulea, ce inseamn? "ar putea fi"?

Posted
@devacanta: Este ceva gre?it prin algoritmul t?u ?i nu prea am cheful necesar s? stau acum s? v?d ce.

Eu ziceam ceva de inteligen?? artificial?/logic?, nu backtracking. Vezi programe gen Prolog.

Intradevar programare logica este un paradigm al Inteligentei Artificiale, cum ai mentionat si tu, dar ai o mica scapare. Prolog presupune doua tipuri de inferente. Daca ai o expresie literara(atomica) atunci se fac echivalente cu ajutorul modus ponens si legilor lui Horn si se pot face inferente logice. Pur si simplu din prima expresie se aplica recursiv de multe ori si se obtin echivalente, si se poate determina daca expresia este true sau false. De exemplu not(not(A)) = A sau A->B=((not(A) and B), etc... aici complexitatatea nu este polinomiala. Aceasta metoda nu iti spune si ce variabile(parametri/necunoscute) iti si verifica expresia, ci doar ca exista una si ca e adevarata, pentru a determina se aplica algoritmul de rezolutie cu cut. Care este un back-tracking.

Intrucat am avut niste probleme cu reprezentarea lor, ca nu am folosit liste, am modificat un pic quest-ul. Nu exista posibil(cred ca este necesar liste) si nu am stiut sa neghez concluzia adica daca a atunci not b

not(B) :- a //sintaxa prolog-ului nu ma lasa ca la cap-ul reguli sa am o negatie, si nu au reusit sa fac o echivalente la fiecare in parte, asa ca am eliminat.

Mai jos sunt cele modificate.

1)daca ion e din constanta, vasile este din bucuresti iar fane e din satu mare

2)daca ion nu e din bucuresti, fane e din craiova

//3)daca bula nu e din cluj, atunci e ori din satu mare, ori din craiova

se exclude evidenta

4)daca fane e din bucuresti, gheorghe e din cluj

5)daca gheorghe nu e din cluj, ion nu e din satu mare, iar bula e din constanta

6)daca vasile e din craiova, gheorghe e din cluj iar bula e din bucuresti

7)daca gheorghe nu e din satu mare, bula e din craiova

Codul in Prolog, compilat si testat cu Turbo Prolog 1.2, si 2.0. Initial am incercat in Visual Prolog(numai ca am sesizat ca sunt multe diferente ca sintaxa) si dupa aia mi-a dat eroare compilatorul.

domains
ion=symbol
vasile=symbol
fane=symbol
gheorghe=symbol
bula=symbol


predicates
bucuresti(symbol)
satumare(symbol)
constanta(symbol)
cluj(symbol)
craiova(symbol)

clauses
bucuresti(vasile) :- constanta(ion). /*1) */
bucuresti(bula) :- craiova(vasile). /*6)*/

satumare(fane) :- constanta(ion). /*1) */
satumare(ion) :- not(cluj(gheorghe)). /*5)*/


constanta(bula) :- not(cluj(gheorghe)). /*5)*/

craiova(fane) :- not(bucuresti(ion)). /*2)*/
craiova(bula) :- not(satumare(gheorghe)). /*7*/

cluj(gheorghe) :- bucuresti(fane). /*4)*/
cluj(gheorghe) :- craiova(vasile). /*6)*/

goal
bucuresti(A) and write(A," bucuresti ") and
satumare(A) and write(A," satumare ") and
constanta(A) and write(A, " constanta") and
cluj(A) and write(A, " cluj") and
craiova(A) and write(A, " craiova").

Cand l-am lasat in executie din cauza modificatorilor mele, nu exista solutie, se pot determina doar 3 persoane, si prolog-ul mi-a scos:

ion satumare
bula constanta
fane craiova

Folosesc cut, si astfel scoate doar prima.

Posted
sulea, ce inseamn? "ar putea fi"?

"ar putea fi" inseamna exact ce inseamna. adica nu sti sigur.

5)daca gheorghe nu e din cluj, ion nu e din satu mare, iar bula e din constanta

gigaevil, aici e o eroare, bula *ar putea fi* din constanta, nu se stie sigur.

Posted
Cand o sa il modific sursa din prolog pe liste atunci nu o sa pot implementa si ar putea fi

Pentru c? nu ai cum s? codifici logic "ar putea fi". Eu zic s? ignori pur ?i simplu acea parte. ?i eu a? putea fi miliardar..

Posted (edited)
domains

ion=symbol

vasile=symbol

fane=symbol

gheorghe=symbol

bula=symbol

astea fac parte din program Turbo Prolog

Am precizat ca initial am vrut in visual prolog, si dupa aceea ma adaptassem la noua sintaxa, si dupa aceea crash. Asa ca l-am rescris in syntaxa standard pentru Turbo Prolog.

Em: Am postat gresit, am pus din greseala o negare a predicatorului, Eu sunt sigur ca se poate introduce atunci cand lucrezi prin liste.

Edited by gigaevil

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...