Alice you are in a Rabbit Hole!

Dacă ai trăit în România în perioada Noiembrie 2024 – Mai 2025, nu ai cum să nu fi observat în mediile sociale o agresivitate și polarizare mai mare a societății într-un sens sau altul. Informațiile oficiale nu au fost nici pe departe suficiente, clare și succinte cu privire la ceea ce se întâmplă. Ni s-a spus că suntem sub un atac informațional din partea unui stat străin dar fără prea multe detalii, fapt care a alimentat nemulțumirea unui număr și mai mare de cetățeni.

Acest articol încearcă să explice fenomenul și să ofere câteva indicii despre metodele de prevenție și recuperare care ar fi trebuit implementate de organismele statului sau măsurile care trebuie luate în cel mai scurt timp.

Concret, de câteva luni bune suntem sub asediul unui atac de inginerie socială de tip rabbit hole (vizuină de iepure). Toți cunoaștem povestea fantastică Alice în țara minunilor. Exact acesta este fundamentul psihologic al atacului. Termenul în sens concret descrie o strategie psihologică sau algoritmică de captare și menținere a atenției utilizatorilor, adică o spirală de conținut care te atrage tot mai adânc.

Rabbit Hole este o zonă comportamentală, algoritmică sau de conținut în care utilizatorul:

  • intră printr-un conținut aparent inocent sau atractiv,
  • este atras emoțional sau cognitiv,
  • rămâne captiv pentru o perioadă lungă de timp, fiind expus la conținut similar sau din ce în ce mai intens,
  • iar ieșirea este dificilă deoarece platforma personalizează continuu feedul în acea direcție.

Componentele principale ale unu rabbit hole:

  • Trigger atractiv: O imagine, titlu sau videoclip captivant care declanșează intrarea în zonă.
  • Feed adaptiv: Algoritmii învață rapid și oferă conținut similar, menținând utilizatorul implicat.
  • Recompensă variabilă: La fel ca în jocuri de noroc, utilizatorul nu știe ce urmează, ceea ce menține interesul. Situațiile se schimbă rapid și imprevizibil, de multe ori datorate celorlalți actori sociali care încearcă să prevină intrarea în rabbit hole a celorlalți.
  • Engagement loop: Aprecieri, comentarii și distribuiri care validează comportamentul și îl perpetuează.
  • Izolare cognitivă: Utilizatorul ajunge să vadă doar un anumit tip de informații, pierzând obiectivitatea.

Concret pașii sunt descriși în infograficul următor. (Sursa Generat cu AI).

Schema de atac rabbit hole

Principalele riscuri ale unui astfel de atac sunt: radicalizarea cetățenilor (bule de dezinformare), dependența digitală (cunoscută uneori și ca infobezitate), scăderea atenției și capacității de discernământ, manipulare alcoritmică și afectare a deciziilor / alegerilor digitale. După opinia mea, cea mai vicioasă dintre toate este radicalizarea, care reprezintă un proces complex prin care indivizii ajung să adopte convingeri, atitudini și comportamente extremiste, care pot conduce la intoleranță, ură sau chiar violență. Radicalizarea este în strânsă legătură cu o serie de factori sociali și de mediu, psihologici, politici și ideologici, culturali și religioși. Între factorii politici și ideologici pe care îi percepem la noi cei mai importanți sunt:

  • Percepția nedreptății sistemice – corupție, opresiune, abuzuri ale autorităților.
  • Ideologii extremiste – religioase, politice sau naționaliste, care oferă o „soluție absolută”.
  • Narative conspiraționiste – interpretări distorsionate ale realității (ex: „elitele conduc lumea”).
  • Conflict identitar sau geopolitic – legături cu zone de conflict, război cultural, etnic sau religios.
  • Reacție la politicile de stat – mai ales când sunt prezentate, percepute ca represive sau invazive, uneori chiar de cei care fac parte din organismele de conducere ale statului.

Etapele unui atac pe rețele sociale

În această secțiune voi reda succint pașii și acțiunile pe care le fac inginerii sociali într-un atac de tip rabbit hole. Nu trebuie neglijat factorul timp și resursele financiare și umane implicate. Dar cu o coordonare bună, vedem peste tot în jurul nostru rezultatele unui astfel de atac.

Pasul 1: Definirea obiectivului și alegerea țintei:

  • Scopuri posibile: influențare electorală, recrutare ideologică, fraudă financiară, dezinformare, polarizare socială.
  • Segmentare țintă: tineri deziluzionați, grupuri marginalizate, persoane influențabile, singure, public radicalizabil.
  • Analiza vulnerabilităților: identitate fragilă, frustrare socială, înclinație spre conspirații, neîncredere în autorități.

Pasul 2: Crearea conținutului declanșator („hook”)

  • Tipuri de conținut: clipuri virale, meme-uri emoționale, povestiri personale șocante, întrebări retorice controversate. Includem aici toate acele imagini generate cu AI care expun diferite cazuri, de cele mai multe ori false.
  • Formă: vizuală, scurtă, cu titluri provocatoare („adevărul pe care nu ți-l spune nimeni!”).
  • Distribuire: prin conturi false, pagini aparent inofensive, influenceri plătiți sau inconștienți.

Menționăm aici povestea lui Mihăiță care a atras atenția a milioane de utilizatori în social media în luna aprilie 2025.

Imagine și text de tip viral pentru atragerea atenției persoanelor din grupul țintă. Povestea lui Mihăiță.

Pasul 3: Atragerea în rabbit hole

  • Personalizare algoritmică: odată ce utilizatorul interacționează (like, comment, watch time), algoritmul platformei îi livrează mai mult conținut similar.
  • Escaladare treptată: de la teme generale (corupție, nedreptate, anxietate) spre narative conspiraționiste, radicale sau extremiste.
  • Crearea unui sentiment de comunitate: „noi știm adevărul”, „ei ne ascund ceva”, „alătură-te cauzei”.

Pasul 4: Consolidarea captivității

  • Crearea de „bule informaționale”: utilizatorul vede doar postări din acea zonă ideologică.
  • Feedback psihologic constant: validare, like-uri, comentarii, mesaje directe.
  • Gamificare și recompense: insigne, roluri în grupuri, „rank”-uri de membri loiali.
  • Frica de excludere sau trădare: „cine părăsește grupul e împotriva noastră”.

Pasul 5: Activarea utilizatorilor (exploatarea)

  • Răspândirea dezinformării (share masiv, spam controlat).
  • Atacuri cibernetice (phishing în masă, colectare de date).
  • Manipulare electorală (viralizarea de conținuturi anti-sistem).
  • Recrutare (în mișcări ideologice, proteste, acțiuni de stradă).
  • Monetizare (vânzare de produse, criptomonede frauduloase, donații către „cauză”).

Pasul 6: Re-activarea periodică

  • Postări șoc la intervale regulate („Uite ce s-a mai descoperit!”).
  • Conținut pseudo-documentar: „dovezi” noi, documentare manipulatoare, „experți” obscuri.
  • Campanii sincronizate: în perioade sensibile (alegeri, crize, conflicte).

Pasul 7: Finalizarea sau tranziția atacului

  • Încheiere tactică: când obiectivul a fost atins (ex: manipularea opiniei, colectarea de date).
  • Dezactivarea conturilor false sau rebranding-ul lor pentru alte campanii.
  • Transferul utilizatorilor loiali pe platforme alternative mai greu de controlat (ex: Telegram, Dark Web, forumuri închise).
  • Lăsarea unei „semințe ideologice” care poate fi reactivată ulterior.

Personal consider că momentan în România suntem la pasul 6, ultima bulină odată cu reapariția videoclipurilor cu un fost candidat (12 mai 2025 ora 21:41). Redăm în imagine reacția oamenilor reali, reactivați:

Exemplu de reactivare a oamenilor prinși în rabbit hole.

De menționat că o parte importantă din oamenii care reactionează sunt stimulatorii de mesaje, reprezentați în special de persoane cu notorietate publică, dând astfel tonul și încurajând ceilalți membi să reacționeze.

În același timp, din observațiile mele din ultimul timp, actorii implicați în atacul de inginerie socială pregătesc un exit (pasul 7, lăsarea unei „semințe ideologice” care poate fi reactivată ulterior):

Pregătirea unui exit

Mesajul postat de un candidat pregătește terenul pentru ciclul următor, în cazul unui eșec al acțiunii, dar să nu uităm iterația de la pasul 6 cu reactivarea care cheamă la acțiune persoanele din rabbit hole.

Prevenirea și recuperarea din rabbit hole-urile digitale

Prevenirea și recuperarea victimelor unui atac de inginerie socială bazat pe rabbit hole necesită o abordare multidimensională, care combină educația digitală, sprijinul psihosocial și intervențiile algoritmice și comunitare. Practic ca să nu ajungem într-o fază de izolare informațională, sau bulificare (vezi un articol interesant aici), ar trebui să existe o fază de prevenire activă în care educația media și digitală ar trebui să înceapă chiar din școală cu campanii de conștientizare, exerciții de identificare a conținutului manipulativ sau deepfake și informarea cu privire la algoritmii de pe rețelele sociale care pot influența comportamentul individului. În același timp, tot școala ar trebui să promoveze gândirea alternativă, logică și autoreflecția.

Din punct de vedere tehnic, cred că este destul de dificil să impui mecanisme de protecție de tio firewall sau antivirus :) dar cred că s-ar putea impune reglementat platformelor de social media să limiteze automat recomandările algoritmice dintr-o singură nișă ideologică.

În faza de detecție și intervenție timpurie, lucrurile sunt puțin mai complicate, pentru că, vrem nu vrem intrăm peste drepturile și libertățile fundamentale ale oamenilor în cazul în care organismele statului ar încerca să implementeze o monitorizare digitală chiar și etică sau cu consințământ. Da, aici un rol important îl poat juca tehnicile de NLP (Natural Language Processing) prin care se pot detecta schimbări comportamentale bruște ale comportamentului online și se poate interveni la nivel de platformă socială pentru diminuarea viralizării într-un anumit sens. În același timp, comunicarea instituțională, clară deschisă și completă pot altera tentativa de radicalizare a oamenilor spre o anumită ideologie.

Nu trebuie neglijat rolul influencerilor în sensul implicării acestora în mentoratul on-line, grupuri de discuție dedicate, atât on-line cât și offline, eventual prin introducerea în feed a unor postări care dezvăluie manipularea: Cine creează aceste conținuturi și de ce?

Dacă, și insist pe acest dacă, în perioada imediat următoare finalizării etapei de exit a atacului, instituțiile statului, insituțiile de educație, influencerii ar trebui să intre în faza de recuperare și reintegrare a oamenilor izolați în rabbit hole. Implicarea persoanelor din diferite bule ar trebui să se facă prin conținut autentic prin care să se povestească experiențele lor și care ar fi principalele măsuri făcute de ei pentru a contracara extremismul și radicalizarea. Nu există o frază magică pentru a-i scoate pe oameni din izolare informațională, dar cred că ar trebui să identificăm și să punem cu toții în practică câteva principii cheie:

  1. Nu critica! Critica duce de multe ori la rușine, care poate întări atașamentul față de „cauza” inițială.
  2. Alternative reale! Persoana izolată trebuie să găsească sens, apartenență și voce în altă parte. Aici intervin foarte mult grupurile profesionale, cultura, arta și trebuie să recunoaștem din ce în ce mai mult rolul comedianților (stand-uperi). De multe ori spun: Zâmbind obții mai mult!
  3. Mediul familial. Implică persoanele în discuții, nu-i combate, nu-i certa, ajută-i să se echilibreze emoțional și mai ales să nu se mai izoleze informațional. Discută cu ei!

Cam asta ar fi. Lucrurile nu sunt simple deloc iar articolul curent nu are pretenția de soluție ci mai mult de conștientizare. Detașați-vă măcar periodic de echipamente și social media. Poate ce am expus aici sunt teorii bune, dar rezultate practice sunt greu de obținut.

Referințe științifice:

Sper să vă fie util!

Modele de algoritmi în #Excel – Greedy algorithms (16)

În acest articol propun un model de rezolvare a probelemelor de pe site-ul Codility: https://app.codility.com/programmers/lessons/16-greedy_algorithms/

Un algoritm greedy este o strategie de rezolvare a problemelor care face alegeri pas cu pas, selectând în fiecare moment opțiunea cea mai bună disponibilă, fără a lua în considerare deciziile viitoare.

Principiul de bază este: „Alege ceea ce pare a fi cea mai bună opțiune la fiecare pas, sperând că această strategie va duce la soluția optimă.”

Acești algoritmi sunt simpli și eficienți, dar nu garantează întotdeauna cea mai bună soluție globală.

În Excel nu avem posibilitatea de a face alegeri numaidecât locale, ci problemele trebuie trate la nivel global. Da o strrategie eficientă este să rezolvi pas cu pas problema, din aproape în aproape pentru a putea ajunge la o soluție integrată. Chiar și în rezolvările individuale trebuie să avem în vedere funcții reutilizabile și tratarea globală a vectorilor de input. De aceea în toată această tehnică este esențială funcția MAP() pentru parcurgerea element cu element a unui vector sau SCAN() tot pentru parcurgere globală, dar cu avantajul acumulării.

Un pic de teorie aplicată

În această secțiune doar voi reaminti cum funcționează o funcție MAP(), SCAN() și BYROW().

Foarte important: Nici una din funcții NU generează tabele. De aceea, în exemplele mele vedeți foarte mult TEXTJOIN() și TEXTSPLIT() ca să pot acumula rezultatele intermediare într-o singură valoare. Dar ca să le pot prelucra trebuie să le splitez ca numere.

MAP() este o funcție care parcurge un vector valoare cu valoare de sus în jos. În multe cazuri putem folosi MAP() pentru a scana un fake vector, generat de exemplu de o funcție SEQUENCE pentru a putea face căutare și înainte pe un vector de valori. De cele mai multe ori dacă dorim să obținem printr-o singură formulă un tabel trebuie să le încapsulăm într-un LET(). Nu am exemple în acest moment despre combinații între MAP() și SCAN(). De obicei eu personal aleg să le tratez separat sau să se separ în funcții recursive distincte.

Sintaxa generică este: =MAP(vector; LAMBDA(valoare; calcule))

Exemple funcția MAP()

Pentru D10 formula este:

=MAP(B10#;  LAMBDA(v; IF(v=1;INDEX(A10:A14;v); INDEX(A10:A14;v)+INDEX(A10:A14;v-1))))

Pentru E12 unde este o variantă cu mai puține inputs (doar variabila _a este input), formula este:

=LET(_a;A10:A14;
    seq;SEQUENCE(ROWS(_a));
    MAP(seq;LAMBDA(v; IF(v=1; 
                           INDEX(_a;v); 
                           INDEX(_a;v)+INDEX(_a;v-1)
 ))))

Tehnica aceasta de a folosi o secvență este des întâlnită în rezolvarea acestor probleme și nu numai.

Func’ia SCAN() este foarte utilă pentru prelucrări cu acumulare.

Sintaxa generică este: =SCAN(valoare_inițială; vector; LAMBDA(acumulator; valoare; calcule))

Exemplificare SCAN()

REPT() este o funcție de replicare a unui șir de un număr specificat de ori.

BYROW() este o funcție care tratează un tabel de date linie cu linie. Similar cu BYROW este BYCOL(). Când dorim să facem calcule simple, atunci putem specifica direct funcția după specificarea tabelului. Dacă avem veva mai mult de calcul, sintaxa generală este: =BYROW(tabel; LAMBDA(linie; calcule))

Exemplificare BYROW()

Funcția TAKE(), CHOOSECOL() sau INDEX() au un rol important în tratarea element cu element a unei linii.

Acestea fiind spuse o să încep atipic această rezolvare cu a doua problemă… pentru că este mai simplă.

Problema TieRopes

Presupune să se determine numărul de funii de o anumită lungime K specificată care pot fi create prin însumarea (înodarea) capetelor dintr-un șir de valori date (A). Valoarea capetelor nu poate depăși K dar funiile pot avea dimensiuni mai mari sau egale cu K. Ordinea de însumare este consecutivă nu se acceptă ca un segment A[0] să fie legat de un alt segment A[n].

Rezolvarea problemei în Excel este foarte simplă, dar rezultatele obținute prin rezolvare locală (subșiruri continue fără verificare globală înainte și înapoi) pot fi oarecum discutabile.

TieRopes rezolvare în Excel

Pornind de la șirul din B2, l-am descompus în A4 apoi am calculat secvența cu start de la 1 în B4. Cheia problemei este în E4 unde prin SCAN am comparat sumele acumulate până în prezent din vectorul A cu valoarea lui K (dimensiunea minimă a unei funii). Ca să pot oferi rezultatele în format de segmente, în H4 am utilizat următoarea formulă:

=MAP(G4#;LAMBDA(v; IF(v=1;
       TEXTJOIN(";";;FILTER($B$4#;($B$4#<=INDEX(F4#;v))));
       TEXTJOIN(";";;FILTER($B$4#;($B$4#<=INDEX(F4#;v))*(($B$4#>INDEX(F4#;v-1))))))))

În care scanez vectorul din G3 rezultat în urma prelucrărilor și pe baza valorii acestui vector concatenez cu TEXTJOIN() valorile de până în acel moment.

Formula integrată pornind de la șirul din B2 și valoarea lui K din C4 este:

=LET(_a; --TEXTSPLIT(B1;;",");
      seq; SEQUENCE(ROWS(_a)); _k; C4;
      _s; SCAN(0;_a; LAMBDA(a;v; IF(a+v>=_k;0;a+v)));
      _f; FILTER(seq; _s=0);
      seqf; SEQUENCE(ROWS(_f));
      result; MAP(seqf; LAMBDA(v; IF(v=1; 
             TEXTJOIN(";";;FILTER(seq;(seq<=INDEX(_f;v))));
             TEXTJOIN(";";;FILTER(seq;(seq<=INDEX(_f;v))*
                     ((seq>INDEX(_f;v-1))))))));
result)

Exemplificare practică

Presupunem că avem un lanț de aprovizionare logistic pentru un retailer care trebuie să transporte pachete mici de produse între depozite și punctele de vânzare. Aceste pachete au greutăți variabile, iar pentru a reduce costurile de transport, ele trebuie grupate în unități mai mari, dar respectând anumite restricții minime de greutate pentru eficiență.

Sintetizând descrierea trebuie să respectăm condițiile:

  • Fiecare palet să aibă o greutate minimă K pentru ca transportul să fie eficient (sub această valoare, paletul nu este rentabil).
  • Trebuie să formăm cât mai mulți paleți, pentru a maximiza utilizarea spațiului din camion și a reduce numărul de transporturi.

Exemplu concret de date:
Să presupunem că avem un set de 10 pachete cu următoarele greutăți (în kg): A=[3,5,1,6,2,4,8,3,7,2] și greutatea minimă necesară pentru transport eficient este K=10 kg.

Rezolvarea este foarte simplă:

Alocare colete pe peleti. Aplicabilitate TieRopes.

în care pentru a calcula numărul de kg pe fiecare palet am introdus o nouă variabilă în funcția prezentată anterior:

kgp; MAP(result; LAMBDA(v; SUM(INDEX(_a;--TEXTSPLIT(v;;";")))));

care presupune însumarea valorilor coletelor din șirul dat.

Problema MaxNonoverlappingSegments

Problema aceasta a fost un coșmar din punct de vedere al prelucrărilor. 100% rezolvarea ei în Excel este doar un exercițiu de manipulare de date și rezultate, fără a avea pretenții de optimizare.

Problema MaxNonoverlappingSegments este o problemă clasică de optimizare care face parte din categoria Greedy algorithms (algoritmi lacomi). Aceasta constă în selectarea unui număr maxim de segmente (intervale) care nu se suprapun, dintr-un set de segmente date.

Avem o serie de segmente definite prin capete (start și end points), fiecare segment fiind reprezentat printr-o pereche de numere: (A[i],B[i]) unde:

  • A[i] este punctul de început al segmentului.
  • B[i] este punctul de sfârșit al segmentului.

Obiectivul este să alegem cât mai multe segmente care nu se suprapun, adică nu au puncte comune, astfel încât să maximizăm numărul total de segmente selectate.

O chichiță a problemei este dată de faptul că rezultatul final trebuie să fie prezentat în segmente de câte 3 și în combinații de câte 3 trebuie să prezentăm output-ul.

În imagine este prezentată rezolvarea graduală a problemei, proiecții intermediare pas cu pas, până a ajunge la forma finală din aproape în aproape.

Problema MaxNonoverlappingSegments proiecție în Excel, pas cu pas.

Așa cum explicam în partea de teorie a acestui articol, cheia rezolvării constă în utilizarea funcției MAP și consțientizarea faptului că rezultatul trebuie să fie permanent o singură valoare.

Având în vedere că trebuie să returnăm valorile în seturi de câte 3 a trebuit să introduc și să salvez funcția _fTripleMatrix(elem) prezentată în aceste articole, care are următorul cod:

=LAMBDA(elem; LET(nrElemente; elem;
          combinatii; COMBIN(nrElemente; 3);
TripleG; SCAN("1;2;2"; SEQUENCE(combinatii);
   LAMBDA(a;v;
       LET(arr; --TEXTSPLIT(a;";");
           x; TAKE(arr;;1); y; TAKE(TAKE(arr;;2);;-1); z; TAKE(arr;;-1);
           newx; IF(AND(y=nrElemente-1; z=nrElemente);
                        IF(x<nrElemente-2; x+1; x); x);
           newy; IF(newx=x; IF(z=nrElemente;
                        IF(y<nrElemente-1; y+1; y);y); newx+1);
           newz; IF(newx=x; IF(z<nrElemente;z+1;y+2); newy+1);
newx&";"&newy&";"&newz)));
tabf; --TEXTSPLIT(TEXTJOIN("|";;TripleG);";";"|");
tabf))

în care elem este o valoare mai mare decât 3 și, așa cum explicam cu alte ocazii, poate avea un maxim de 189 pentru că numărul de combinații de 190 luate câte 3 depășește valoarea 2^20 care este numărul de linii dintr-o foaie de calcul Excel. Ca o curiozitate, în Google Spreadheet nu am reușit să generez o secvență de numere mai mare de 2^15.

Cheia rezolvării problemei este identificarea capetelor și intersecția lor cu alte segmente. Această secțiune este rezolvată în F5 și G5 printr-o funcție de mapare în care valoare 1 presupune intsecție cu alt interval, iar 0 lipsa intersecției. Dacă suma ambelor segmente se regăsește pe celălalt segment, atunci valoarea 2 ne spune că avem o intersecție. Valoarea 1 ne spune că acel segment nu se intersectează cu altul. Și de aici încep tot felul de calcule și filtre, mapări pe matricea de triplete dinamică și așa mai departe.

Formula finală integrată este:

=LET(_a;$A$2:$A$6;_b;$B$2:$B$6;segment;SEQUENCE(ROWS(_a));
      inter; MAP(segment;LAMBDA(v;LET(
                                   _va;INDEX(_a;v);
                                   _vb;INDEX(_b;v);
                                   _sa;MAP(_a;LAMBDA(_xa;_xa<=_vb));
                                   _sb;MAP(_b;LAMBDA(_xb;_xb>=_va));
                       tabi;BYROW(HSTACK(--_sa;--_sb);SUM);
                       TEXTJOIN(";";;tabi)
)));

    intersectii; MAP(inter; LAMBDA(_nv;
                      LET(_ts;--TEXTSPLIT(_nv;;";");seq;SEQUENCE(ROWS(_ts));
                           intersectii;TEXTJOIN(";";;FILTER(seq;_ts=2));
                           intersectii)));
    excluderi; MAP(inter; LAMBDA(_nv;
                      LET(_ts;--TEXTSPLIT(_nv;;";");seq;SEQUENCE(ROWS(_ts));
                          excluderi;TEXTJOIN(";";;FILTER(seq;_ts=1));
                          excluderi)));

    verif; HSTACK(VSTACK({"Segment"};segment);
                  VSTACK({"Intersectii"};intersectii);
                  VSTACK({"Excluderi"};excluderi);
                  VSTACK({"ArrayPoz"};segment-1));

    allExclude; BYROW(HSTACK(segment;excluderi); LAMBDA(r; TEXTJOIN(";";TRUE;r)));
    sorte; MAP(allExclude; LAMBDA(v; TEXTJOIN(";";;SORT(--TEXTSPLIT(v;;";")))));

   _freqBR; LAMBDA(x; LET(arr; --TEXTSPLIT(x;;";"); rr; ROWS(arr);
                          result; TEXTJOIN("|";;BYROW(_fTripleMatrix(rr); 
                                 LAMBDA(r; LET(_p1; TAKE(r; ;1); 
                                              _p2; INDEX(r; ;2); 
                                              _p3; TAKE(r; ;-1);
                                  TEXTJOIN(";";;INDEX(arr;_p1);INDEX(arr;_p2);INDEX(arr;_p3)))))); 
                          result));

    toatecomb; MAP(sorte; LAMBDA(v; _freqBR(v)));

    splitate; TEXTSPLIT(TEXTJOIN("-";;toatecomb);"|";"-");
    combunice; SORT(UNIQUE(TOCOL(splitate;3)));
    intersectiiUnice; FILTER(UNIQUE(intersectii); LEN(UNIQUE(intersectii))>1);

    checkIU; MAP(combunice; LAMBDA(v; LET(unice; intersectiiUnice; 
                                      IF(MIN(LEN(SUBSTITUTE(v; unice;"")))<5;FALSE;TRUE))));

   FILTER(combunice;checkIU)
)

O parte complexă din formulă este definirea funcției recursive _freqBR care înglobează funcția _fTripleMatrix() definită anterior. Am utilizat această tehnică pentru că în anumite moment anumite rezultate intermediare pot avea combinații diferite.

Cam atât pentru astăzi… Mai este o singură lecție pe site-ul Codility… dacă aveți alte colecții de probleme publice puteți să mi le oferiți în comentarii pentru a încerca abordarea lor. Eventual o resursă de probleme în română ar fi și mai fain.

Sper să fie util cuiva!

Competiție Excel pentru studenți – MECC 2025

Bun găsit cititorilor acestui blog. De curând mi-am asumat rolul de ambasador MECC pentru Universitatea Alexandru Ioan Cuza din Iași. Prin acest rol mi-am propus să popularizez competițiea mondială Microsoft Excel Colleciate Challenge organizată de University of Arizona împreună cu FMWC . Sponsorul principal este compania Microsoft.

Această competiție este destul de intensă, iar participarea studenților români lipsește cu desăvârșire, de aceea consider că acest demers este foarte important. Domeniile de studiu ale studenților sunt în special cele economice, de informatică, matematică și toate celelalte domenii care au în programa lor de pregătire colectare, manipulare și interpretare de date. Problemele pot fi rezolvate atât cu Excel clasic, Excel Modern cât și cu Python Anaconda integrat în Excel.

Detaliile despre organizare, înscriere, format sunt disponibile pe site-ul: https://mecc.college/

La competiție pot participa și elevii de liceu în anumite condiții documentate pe site. Pentru ei există o categorie de fișiere puțin mai simplă: Junior Varsity. Atenție la denumirea fișierelor.

Pe scurt, după înscriere, urmăriți calendarul competiției iar în momentul în care apar etapele de calificare veți primi un email. Competiția se derulează de obicei în zilele de weekend și se poate participa individual sau în echipe. Participarea este gratuită!

Pentru studenții de la UAIC, am creat o echipă de Teams în care vă puteți înscrie utilizând codul 5zx4gq8 Trebuie să deschideți Teams, Join or create team, Join team, Join a team with a code și tastați codul apoi Add team. Acolo veți găsi resurse de pregătire off-line sau în comun. Ca să pot primi informările automat cu privire la rezultate rog studenții să se înregistreze la instituție cu numele: Alexandru Ioan Cuza University indiferent de facultate.

Pentru studenții de anul I, FEAA de la CIG Seria 1 care fac laboratoarele cu mine, vor primi bonificații la laborator pentru obținerea de punctaj la etapa din 20-23 februarie 2025 și sau 27-30 martie 2025.

Pentru prezentarea competiției am decis crearea unei întâlniri pe Teams cu acces public. Prima întâlnire va avea lor în data de 17.02.2025 de la 13:00 la 14:30.

Agenda

  • Prezentarea competiției
  • Înregistrare și acces la materiale
  • Prezentare model de caz (Ianuarie 2025 – Original autor Harry Gross)
  • Explicații instruire – 1. Text_Functions (autor Harry Seiders)
  • Resurse de învățare

Întâlnirea are setată o secțiune de Q/A. În funcție de interes, stabilim următoarele întâlniri și discuții.

Sper să ajungă la cât mai mulți studenți.

Blog la WordPress.com.

SUS ↑