Ako želite posao u Twitteru, pripremite odgovor na ovo zbunjujuće pitanje o kiši

Michael Kozakov, student računalnih znanosti na Sveučilištu Toronto, prije nekoliko tjedana predao je molbu za posao u Twitteru.

21.12.2013.
15:58
VOYO logo

Srećom za nas, Kozakov je napisao blog o svom iskustvu. Budući da je aplicirao za poziciju programera, Kozakov je dobio zadatak da kreira model za rješavanje matematičkog problema, u formi koda.

Problem se na prvi pogled čini nevjerojatno lakim. Ali to je ono što razlikuje studente slobodnih umjetnosti od štrebera računalnih znanosti.

Tekst se nastavlja ispod oglasa

Pokušali smo ga pojednostaviti što je više moguće.

Pogledajte sljedeću sliku koja predstavlja hrpu zidova različitih visina:

Tekst se nastavlja ispod oglasa

Kozakovu je u Twitteru rečeno: "Sada zamisli da pada kiša. Koliko će se vode nakupiti u lokvama između zidova?" (Točan odgovor je na samom kraju ovog teksta.)

Kozakovo rješenje sastojalo se od pisanja komada koda koji će detektirati maksimalne visine vode za svaki zid, a zatim punjenje vodom tog volumena koji bi stajao između zidova. To je očito i izgleda ovako:

Međutim, oni koji su intervjuirali Kozakova, rekli su mu da on nije shvatio najjednostavnije rješenje problema, jer su potrebna dva "prolaza" kroz informacije: Pronalaženje maksimalne visine svakog zida, a potom izračunavanje volumena između svakog od njih.

Zapravo, postoji rješenje koje zahtijeva samo jedan "prolaz" kroz problem. Zamislite da zidovi nisu raspoređeni kao gore odgovarajuća "kanta" koja prikuplja vodu, već nasumično kao na slici dolje:

Tekst se nastavlja ispod oglasa

Jednostavno pronalaženje volumena između mjesnih vrijednosti maksimalnih visina zida daje vam nešto što izgleda ovako:

No, točan rezultat bi trebao biti jedna lokva između dvaju najviših tornjeva:

Tekst se nastavlja ispod oglasa

Ovdje je najelegantnije rješenje koje je Kozakov napisao na svom blogu :

"Rješenje u jednom prolazu ... izbjegava pronalaženje maksimalne vrijednosti pomicanjem dva pokazivača sa suprotnih krajeva niza jednog prema prema drugome. Ako je najveća vrijednost lijevo od lijevog pokazivača manja nego najveća vrijednost koja se nalazi desno od desnog pokazivača, tada pomaknite pokazivač ulijevo jedan indeks na desnoj strani, U suprotnom, pomaknite desni pokazivač jedan indeks ulijevo. Ponovite sve dok se dva pokazivača ne presijeku . (To je opširno objašnjenje , ali kod je jako jednostavan)."

Ako nemate pojma o kodiranju, ove upute je lakše razumjeti ako držite dva prsta kao pokazivače dok čitate dijagram. Drugim riječima, rješenje je u osnovi pronaći dva najviša tornja koja su najdalja lijevo i najdalja krajnje na desnoj strani dijagrama i zatim izračunajte volumen između njih. Ili?

http://qandwhat.apps.runkite.com/i-failed-a-twitter-interview/

Tekst se nastavlja ispod oglasa
pikado
Gledaj odmah bez reklama
VOYO logo