start     Articole     Despre mine    

Calculatorul ne face mai prosti?

Nu mai stim sa extragem radacina patrata dintr-un numar (caci avem Calculator), nu mai stim sa scriem de mana (caci avem Word), nu mai stim sa comunicam fata in fata (caci avem Facebook).

Sarcini care pana acum ceva vreme erau rezervate exclusiv omului au ajuns task-uri banale pentru un calculator. Asa ca nu ma mira cum de multa lume se intreaba daca nu cumva calculatorul ne face mai prosti.

E legitim sa crezi ca abilitatile intelectuale ale omului vor avea de suferit ca urmare a incetarii antrenarii lor. La fel cum un muschi se atrofiaza in timp daca nu este folosit.

Dar nu cumva sarcinile “intelectuale” pe care ni le-au preluat calculatoarele sunt doar sarcini de rutina, care ne limitau la un univers marunt? Nu cumva calculatoarele ne-au eliberat de poveri sacaitoare, oferindu-ne libertatea de a ne antrena “muschi” intelectuali pe care nici nu stiam ca ii aveam?

 

Acum ceva vreme am primit o problema simpatica: Avand la dispozitie numerele 1, 3, 4, si 6 si oricare 4 operatii algebrice de baza (+, -, *, /) sa le combin astfel incat sa obtin ca rezultat valoarea 24.

Am memorat problema cu gandul ca voi sta sa ma gandesc la o solutie cand voi avea timp. Pana atunci, insa, nu am putut sa nu realizez ca in cel mai rau caz va trebui sa incerc toate combinatiile posibile, ceea ce e un numar foarte mare.

Da? Cat de mare? Si uita asa am inceput sa ma gandesc cum as putea sa modelez problema intr- o maniera completa, simpla si fara ambiguitati — asa incat s-o pot da unui calculator s-o rezolve.

Cu alte cuvinte: “Esti suficient de destept cat sa rezolvi problema asta?”; “Poate ca nu, dar stiu sa comand un calculator s-o rezolve. Se pune? :)”.

 

Tu ce parere ai? (Lasa-mi intr-un comentariu raspunsul.)

 

In continuare voi discuta modul in care am rezolvat problema. De fapt, modul in care am pus calculatorul la munca in locul meu.

(Nu e atat de importanta problema propriu-zisa, cat mesajul pe care vreau sa il transmit, si anume acela ca ne limitam enorm daca privim calculatorul doar ca pe o unealta de consum (de muzica, filme, poze si jocuri), neluand in considerare faptul ca el este in realitate un foarte puternic instrument de creatie.)

Buuun! Deci vreau sa verific toate variantele posibile… Cum fac?…

Imi trebuie o codare a tuturor solutiilor posibile.

E clar ca solutia va fi ceva de genul: D1 o1 D2 o2 D3 o3 D4 = 24, unde D1, D2, D3 si D4 sunt cele 4 numere (adica fiecare poate fi 1, 3, 4 sau 6), iar o1, o2, o3 pot fi oricare dintre cele 4 operatii aritmetice de baza (+, -, *, /).

Nu e specificat in problema, dar intuiesc ca am voie sa folosesc si paranteze. Cum pot modela asta? Pai, parantezele vor dicta ordinea in care se evalueaza cei trei operatori (o1, o2 si o3). Prin combinatii diverse de paranteze pot avea ordini diferite de evaluare a operatorilor.

Si cate ordini diferite pot avea? (Altfe spus, avand trei obiecte diferite, in cate moduri distincte le pot aseza in linie?) Matematica zice ca 3! . Adica “3 factorial”. Adica 1*2*3. Adica 6.

 

Deci pana acum ce am in modelul asta abstract de solutie posibila?:

– 4 numere (D1, D2, D3, D4), fiecare putand lua ca valoare una dintre cele 4 valori din problema (1, 3, 4, 6);

– 3 operatori (o1, o2, o3), fiecare putand fi una dintre cele 4 operatii aritmetice (+, -, *, /);

– 6 ordini de evaluare a operatorilor (sau, altfel spus, 6 moduri de a pune parantezele in expresia D1 o1 D2 o2 D3 o3 D4).

La un calcul simplu reiese ca pot avea 4*4*4*4*4*4*4*6 astfel de solutii (potentiale) posibile. (Bineinteles ca unele dintre aceste solutii potentiale nu sunt valabile (cum ar fi, de exemplu, cazul in care cel putin doua dintre numerele D1, D2, D3, D4 sunt egale), insa ma intereseaza acum doar numarul total.)

Adica voi avea de verificat 3*2^15 = 96*1024 variante de solutii posibile.

Destul de multe, dar estimez ca nu ar trebui sa dureze mai mult de cateva secunde (sau, poate, zeci de secunde).

 

OK. Asadar, problema pare rezolvabila. Hai sa vedem cum.

Revenind la ce ziceam mai sus, mi-ar trebui drept codare a unei solutii posibile un vector de 8 elemente in care sa memorez cele 4 numere (D1, D2, D3, D4), cei trei operatori (o1, o2, o3) si ordinea parantezelor. De exemplu, le pot avea plasate in vector in ordinea asta:

P, D1, D2, D3, D4, o1, o2, o3.

Daca ma gandesc ca elementele acestui vector plasate in ordinea asta ar fi cifrele unui numar, vad ca practic pentru a genera toate solutiile posibile ar trebui sa generez toate numerele de la 00000000 pana la 53333333 (cu mentiunea ca ultimele 7 cifre pot lua doar valorile de la 0 la 3, deci: 0000000, 00000001, 00000002, 00000003, 00000010, 00000011, …).

Ceea ce nu e chiar dificil de facut, nu? Iata rezultatul:

(Browserul tau nu suporta Canvas!…)


Apasa “Reseteaza…” si apoi “Executa…”. Gata? Iata solutia! (Da, punctele alea verzi reprezinta solutia problemei noastre.) Pentru a mai pastra un pic de mister, nu public aici solutia gasita dupa rularea programului, ci te las pe tine sa o descifrezi (studiind codul sursa al programului).

(Nu stii sa programezi? Cartea “Cum programezi un joc de la zero” (pe care o poti cumpara de aici) e cea mai rapida si mai placuta metoda de a-ti face debutul in programare pe care o cunosc.)

 

Ti-a placut? Da share, aboneaza-te la newsletter si da Like la pagina de Facebook pentru a fi la curent cu noutatile. Si spune-mi intr-un comentariu ce crezi: calculatoarele ne fac mai destepti, sau dimpotriva?

Florin





7 comments
SorinGhenta
SorinGhenta

Calculatorul, ca orice orice inventie, poate fi un instrument de o importanta colosala pentru dezvoltarea creativitatii, antrenarea creierului etc sau un instrument care contribuie la amortirea creierului. Ca orice instrument, depinde de noi cum il folosim. Eu, de exemplu, am inceput cu programarea in assembler si C prin anii 90. Nu aveam calculator acasa si aveam un job care nu tinea de domeniul care ma pasiona pe mine, asa ca scriam in minte secventele de cod si le executam tot in minte(apoi pe calculatoarele de la servici cand prindem ocazia), chestie care imi cam dadea dureri de cap(mai fac asta si acum cand sunt prin trafic) dar care m-a ajutat si ma ajuta enorm la job-ul meu actual care acum se afla in domeniul de care sunt pasionat. Ideea este ca niciodata nu mi-am lasat creierul sa se plictiseasca. Daca se intampla sa am ceva timp liber atunci ma apuc sa invat un nou limbaj de programare sau o noua tehnologie de prin domeniul meu etc. Sunt atat de multe de invatat...

Broke
Broke

Mare dreptate aveti :) In schimb, exemplul pe care l-ati dat... hmm. Eu sunt de parere ca pentru a crea un programel care sa rezolve problema data de dvs. nu sunt de ajuns miile de ore petrecute pe Facebook, Twitter, Instagram etc etc. Trebuie o oarecare deprindere, exersare in domeniu. Deci cu toate aplicatiile pe care le are calculatorul in Windows, nu se poate rezolva problema aceasta! Deci rezolvand problema aceasta pe calculator, nu inseamna ca "ne face mai prosti calculatorul", ci dimpotriva :P.

AndreiStan1
AndreiStan1

Calculatorul ii ajuta pe cei care stiu sa se foloseasca de el, iar pentru cei care nu prea stiu doar le ocupa timpul. In concluzie este la fel ca si cafeaua care pe cei prosti doar ii agita, iar pe cei destepti i ajuta sa isi duca treaba la sfarsit. :D

anonymous_question
anonymous_question

Nu cumva devenim prea dependenti de calculator? Ce faci daca ajungi undeva in jungla si nu ai calculator la dispozitie?