Si eu ma bucur sa revin, Alex. Asa e, tehnica e foarte utila, interesant exemplul oferit de tine. As adauga insa ca mai e comanda foarte utila, pe langa AND, OR, NOT, si anume XOR.
Astfel, daca avem o lista de criterii de selectie, unul independent de altul.
A = lista de criterii pe care le dorim sa le folosim in principiu
ex: A = 11 (toate criteriile vor fi folosite) ex: daca copilul fumeaza sau nu; apoi daca a luat bacul sau nu)
ex: A = 01 (un criteriu nu va fi folosit, anume daca copilul fumeaza, astfel copiii vor fi selectati indiferent daca fumeaza sau nu)
B = lista de ce trebuie sa indeplineasca pentru fiecare criteriu, unde 0 inseamna ca vreau ca acel criteriu sa fie picat de copilul ca sa il selectez pentru un premiu (ex: vreau un copil care sa NU fumeze) si 1 vreau ca acel criteriu sa fie trecut de (ex: vreau un copil care sa fi luat bacul).
deci B = 01
Astea doua sunt valabile pentru toti copiii. Acum pentru fiecare copil in parte completam efectiv daca a trecut sau nu fiecare criteriu posibil.
C = 11 (fumeaza si a luat bacul)
C = 10 (fumeaza si a picat bacul)
C = 01 (nu fumeaza si a luat bacul)
C = 00 (nu fumeaza si a picat bacul)
Bun, acum daca vreau sa verific pentru fiecare copil daca a trecut de selectiile mele sau nu calculez.
(NOT A) OR (XOR(B,C))
Vedem cum intervine XOR si el e cheia. Rezultatul va avea acelasi numar de biti. Copilul a trecut toate criteriile daca toti bitii sunt unu (11). Daca cel putin unul din ei e zero, copilul nu a trecut toate criteriile pe care le doresc.
Eu am verificat matematic formula pentru 1 sau 2 biti in criterii. Am facut efectiv toate combinatiile. Pentru 3 sau mai multe nu stiu matematic daca merge, dar avem un cod care verifica asta bit cu bit, iar nu intr-o singura formula, asadar voi putea compara formula mea cu codul acela. Si daca formula chiar e corecta pentru orice numar de biti, atunci putem simplifica acel cod cu doar aceasta formula. Dar intai trebuie sa o implementez in C++.
Acum sarcina mea pentru cercetare, intre altele, e sa fac un program in C++ care sa ia aceste trei numere care pot avea foarte multi biti, gen vreo 20 sau 30, si sa imi dea un 0 sau 1 in functie de A, B, C.
ex:
A=1010111111111
B=1110011101110
un eveniment cu
C=1011111101100
Mai e o etapa intermediara, caci numerele A, B, C vor fi date in baza 10, nu in baza 2, si trebuei convertite intai in baza 2.
Si raspunsul sa fie 0 sau 1, true sau false.
Avem o idee, dar inca nu am implementat-o, caci saptamana asta pregatesc o conferinta. Dar idei de aici sunt binevenite. Mersi mult.