Addic73d Posted August 9, 2011 Report Posted August 9, 2011 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 Mongolia2) daca Sao este fie din Japonia fie din China, atunci Liu este din Mongolia3) daca Kim nu este din Japonia, atunci Liu nu poate fi din Mongolia4) daca Kim nu este din China, atunci Liu nu este din Mongolia5) daca Kim este din Mongolia, atunci Sao nu este din China sau din Japonia6) daca Sao este din Mongolia, atunci Liu nu este din Japonia Quote
redox Posted August 9, 2011 Report Posted August 9, 2011 Liu: China, Sao: Mongolia, Kim: Japonia Quote
sulea Posted August 9, 2011 Report Posted August 9, 2011 "6) daca Sao este din Mongolia, atunci Liu nu este din Japonia "restul e cancan Quote
Zatarra Posted August 9, 2011 Report Posted August 9, 2011 Varianta lui redox este buna - verifica cele 5 conditii. (Conditia nr 5 nu are sens, deci pica) Quote
nicku92gm Posted August 9, 2011 Report Posted August 9, 2011 liu - china kim - mongoliasao - mongolia Quote
tromfil Posted August 9, 2011 Report Posted August 9, 2011 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". Quote
devacanta Posted August 9, 2011 Report Posted August 9, 2011 (edited) ceva nu e bine..import timedef 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 , jfor 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 August 9, 2011 by devacanta Quote
tromfil Posted August 9, 2011 Report Posted August 9, 2011 @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. Quote
sulea Posted August 10, 2011 Report Posted August 10, 2011 vasile, gheorghe, ion, bula, fanebucuresti, cluj, satu mare, craiova, constantadaca ion e din constanta, vasile ar putea fi din bucuresti iar fane e din satu maredaca ion nu e din bucuresti, fane e din craiovadaca bula nu e din cluj, atunci e ori din satu mare, ori din craiovadaca fane e din bucuresti, gheorghe e din clujdaca gheorghe nu e din cluj, ion nu e din satu mare, iar bula ar putea fi din constantadaca vasile e din craiova, gheorghe nu e din cluj iar bula e din bucurestidaca gheorghe nu e din satu mare, bula nu e din craiovacare din ce localitate e?exista mai multe raspunsuri corecte? Quote
em Posted August 13, 2011 Report Posted August 13, 2011 vasile, gheorghe, ion, bula, fanebucuresti, cluj, satu mare, craiova, constantadaca ion e din constanta, vasile ar putea fi din bucuresti iar fane e din satu maredaca ion nu e din bucuresti, fane e din craiovadaca bula nu e din cluj, atunci e ori din satu mare, ori din craiovadaca fane e din bucuresti, gheorghe e din clujdaca gheorghe nu e din cluj, ion nu e din satu mare, iar bula ar putea fi din constantadaca vasile e din craiova, gheorghe nu e din cluj iar bula e din bucurestidaca gheorghe nu e din satu mare, bula nu e din craiovacare din ce localitate e?exista mai multe raspunsuri corecte?sulea, ce inseamn? "ar putea fi"? Quote
gigaevil Posted August 14, 2011 Report Posted August 14, 2011 @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 , 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 bnot( :- 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 mare2)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 evidenta4)daca fane e din bucuresti, gheorghe e din cluj5)daca gheorghe nu e din cluj, ion nu e din satu mare, iar bula e din constanta6)daca vasile e din craiova, gheorghe e din cluj iar bula e din bucuresti7)daca gheorghe nu e din satu mare, bula e din craiovaCodul 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=symbolpredicates 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 satumarebula constantafane craiovaFolosesc cut, si astfel scoate doar prima. Quote
sulea Posted August 14, 2011 Report Posted August 14, 2011 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 constantagigaevil, aici e o eroare, bula *ar putea fi* din constanta, nu se stie sigur. Quote
gigaevil Posted August 14, 2011 Report Posted August 14, 2011 (edited) Edit: Cand o sa modific sursa din prolog pe liste atunci o sa pot implementa si ar putea fi Edited August 14, 2011 by gigaevil Quote
g3oflo Posted August 14, 2011 Report Posted August 14, 2011 domains ion=symbol vasile=symbol fane=symbol gheorghe=symbol bula=symbolastea fac parte din program Turbo Prolog Quote
em Posted August 14, 2011 Report Posted August 14, 2011 Cand o sa il modific sursa din prolog pe liste atunci nu o sa pot implementa si ar putea fiPentru 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.. Quote
gigaevil Posted August 14, 2011 Report Posted August 14, 2011 (edited) domains ion=symbol vasile=symbol fane=symbol gheorghe=symbol bula=symbolastea fac parte din program Turbo PrologAm 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 August 14, 2011 by gigaevil Quote