Campionatul national de tirnacop viteza

Azi in Codexpertia a avut loc Campionatul National de Tirnacop Viteza. Bineinteles nu a lipsit de la eveniment multiplul medaliat la sol, Silviu Ardelean HD nominalizat acum la sectiunea “Eu propun”.

Cum nu de mult timp a devenit somer in JAVA, el a tinut sa explice motivele pentru care tirnacopul l-a ales pe el si nu invers. Medaliat la sectiunea Un CertainĀ Retard pentru inovatia adusa metodei aflarii numarului de bytes dintr-un fisier, premiat la sectiunea Facepalm D’or cu simularea functiei atoi() in timp patrat, Silviu a deschis prelegerea cu problema numararii bitilor 1 dintr-un numar.

Cu Silviu in mina, tirnacopul s-a pus peĀ treaba. Dupa o lovitura bine aplicata lui Google s-a si intrezarit raspunsul la problema minerului in link-ul 2 (ca primul link l-a luat Marius Bancila care a si apucat sa ia cuvintul inaintea lui la dezbatere, futu-i). Asa ca a copiat repede codul prin metoda clasica a schimbarii numelor de variabile si si-a deschis prelegerea cu clasicul “Eu plagiezEu propun

Eu propun o varianta mai clasica.

int counter(int nr)
{
   int i = 0;  

   while (0 != nr)
   {
    i += (nr & 1);
    nr >>= 1;
   }  

  return i;
}

Desi este o metoda clasica, ea nu e functionala si tinem sa precizam ca operatorul >> a fost inventat intr-o perioada neo-nazista, de unde probabil si tenta mai nationalista de a opera cu numere pozitive.

Ceva amuzant s-a intimplat in pauza prelegerii. Cineva a pus o intrebare care l-a facut pe Silviu sa priveasca in jur, pentru a gasi pe cineva pe care sa-l aprobe. Intrebarea a fost asta:

Intrebarea este cum apelez functia sum fara sa modific clasa A.

class A
{
   private:
      A(){};
      ~A(){};

   public:
      int sum(int a, int b){return a + b;}
};

Primul care s-a aventurat a propus un:

#define private public

moment in care Silviu a simtit cum se scutura de certitudinile vietii. Nedorind sa creada ca aceste doua cuvinte, public si privat, nu sint de fapt magico-atomice asa cum a invatat el la Hidrocentrala pe vremea cind era pasionat de apa si peste, el a pus compilatorul capra si i-a virit acest #define pe git, sa vada daca si inghite, nu doar provoaca.

Ca dupa orice finalizare, oboseala incepe sa-si spuna cuvintul si uitind ca a lasat in cod acel #define, el ne propune rezolvarea:

O varianta mai curata dar nu imaculata:

class B : public A
{
public:
   B() {}
   ~B() {}

   int sumX(int a1, int b1) {
      return sum(a1,b1);
      }
};

int main()
{
   B z;
   z.sumX(2,3);
}

Deci daca vrei sa apelezi o metoda dintr-o clasa care nu poate fi instantiata, poti “propune” compilatorului sa-i dai o clasa derivata care sa apeleze metoda clasei de baza. Poate cineva de acolo din cartile pe care le citeste Silviu ne poate ajuta cu un

#pragma eupropun

in fata manevrelor de acest gen.

Mai mult decit atit, Silviu a declarat oficial ca a fost pacalit cind a propus rezolvarea sa, deoarece Zlatomir s-a grabit sa raspunda primul si a introdus subversiv in discutie acel #define private public obligindu-l efectiv sa-l aduca cu copy/paste in codul sau. Daca nu exista acest Butterfly Effect, codul lui Silviu era bun. De fapt stai, nu codul initial linie cu linie, ci codul pe care Silviu nu l-a scris dar l-a Gindit si din pacate un mirsav i-a ghicit gindul si i-a sugerat la noi pe site EXACT la ce s-a gindit el initial, dar nu a scris. Intelegeti voi.

PS. Multumim corespondentului Felics aflat in Codexpertia pe durata CNTV.

Tags: , , , , , , , , , , , ,

2 Responses to “Campionatul national de tirnacop viteza”

  1. mc hammer Says:

    Nu zic nimic de tarnacop, ca s-a zis destul. Dar observ ca in Codexpertia sunt la mare moda sculele grele. Cu Bancila in mina, ciocanul s-a pus pe treaba: “Din ce am citit, se pare ca cea mai buna metoda e Hammering weight (sau popcount).”[1] The Hammering weight is named after Richard Hammering? Richard Hammer? MC Hammer? WTF?

    [1] http://www.codexpert.ro/forum/viewtopic.php?f=13&t=1679#p11755

    Sau o fi fost subtil si eu sunt prea obosit sa ma prind?

  2. jos8cal Says:

    Ne-ai citit gindul ca tocmai pregateam ziarul pentru miine cu dedicatie pentru MC Hammer.

Leave a Reply

Optionally add an image (JPEG only)