Codility, Jaki najtrudniejszy oraz najdłuższy test?

0

zaprosili mnie na test codility z motorolli i ciekawa jestem co mnie czeka. Jaki byl najtrudniejszy challenge codility jaki musieliscie napisac i ile mieliscie na to czasu i jakie wynik?

2

Najdłuższy jaki mialem to 3 zadania, 3h na całość. Ale nie kierowałbym się tym, ten co były 3h zrobiłem w mniej niż godzinę, a miałem też kiedyś taki z chyba jednym zadaniem i limitem 1h i ledwo się wyrobiłem, bo miał jakiś dziwny corner case który wychodził dopiero jak już zaklepałeś rozwiązanie i testowałeś specjalne przypadki i wymagał przemodelowania tego dość mocno, wrzucenia jakichś priority queue i poczarowania trochę.

0

Raz to pisałem, było na to godzina i z tego co pamiętam to było zaimplementować RLE, i coś tam jeszcze rekurencyjnie chyba przechodzenie drzewa inorder, więc raczej niezbyt trudne.

2

Ja miałem 3 zadania i 3h. Generalnie bardzo dobrze sobie przeczytać od razu wszystkie zadania i zacząć od najłatwiejszego.

0

Coś w tym jest. Bo jak się zacznie od najtrudniejszego, to potem można go i tak ani jego nie skończyć, ani reszty.

Swoją drogą taktyka dotycząca zdawania testów powinna być uczona w szkołach - gdzie też trzeba zdawać różnego rodzaju testy, czy maturę - a np. na maturze cholernie dużo zależy nie tylko od strategii (czyli nie tylko od tego, jak się będziesz uczył przed maturą), ale również od taktyki (czyli jak konkretnie będziesz rozwiązywać te testy, w której kolejności, albo co zrobić jak się nie udaje zadanie itp.).

Ja np. nie zdałem dobrze matury, bo miałem kiepską taktykę, i zabrakło mi czasu na rozwiązywanie zadań. Podobnie na testach programistycznych. Mogę umieć programować, ale ze słabą taktyką i tak źle zrobię test (właśnie, mam zrobić dzisiaj test na Devskillerze, ale pewnie mi i tak źle pójdzie)

3

Pisałem testy i na Hackerranku i na Codility. Na Devskillerze jeszcze mi się nie zdarzyło. W moim wypadku wyniki tych testów często były bardzo skrajne. Za to dzisiaj odrzucam wszystkie zapytania, gdzie Codility i Hackerrank są pierwszym etapem rekrutacji. Nie mam na te testy czasu i chęci. Jakbym miał na te syntetyczne zadania tyle czasu, co na studiach, to tak. Dziś nie :-)

0

Raz miałem zadanie gdzie podane były dwa prostokąty, oba w postaci 4 punktów na osi współrzędnych. Trzeba było napisać algorytm, który sprawdza czy te prostokąty nachodzą na siebie (problem kolizji). Czas 15-20min - nie zdałem :D
Trochę przegieli z czasem moim zdaniem i to było zadanie na zasadzie: "jak wiesz jak to zrobisz to zrobisz, jak nie to nie zdążysz rozkminić"

2
Berylo napisał(a):

Raz miałem zadanie gdzie podane były dwa prostokąty, oba w postaci 4 punktów na osi współrzędnych. Trzeba było napisać algorytm, który sprawdza czy te prostokąty nachodzą na siebie (problem kolizji). Czas 15-20min - nie zdałem :D
Trochę przegieli z czasem moim zdaniem i to było zadanie na zasadzie: "jak wiesz jak to zrobisz to zrobisz, jak nie to nie zdążysz rozkminić"

To tylko pokazuje 'sensowność' tych zadań. Sam co jakiś czas siadam i próbuję porozwiązywać coś typowo algorytmicznego chociażby dla siebie. Kolega dostał Codility 3 zadania. Co z tego, że rozwiązał je dobrze skoro wyniki były 80% - 50% - 10%? ;-)

Ja również jak @Brickcloak omijam takie rekrutacje. Wolę pogadać z kimś na żywo i podyskutować nad jakimś problemem nawet na zasadzie pseudokodu jeżeli już tak bardzo chcą ten typ rekrutacji. Chociaż osobiście wolałbym skupiać się na rekrutacji typowo pod wykonywane stanowisko co niestety ma miejsce 1-2 razy na 10.

1

Mi by się podobało gdyby taki code test miał coś wspólnego z tym co rzeczywiście tworzy się w takiej firmie. Czyli jesli aplikacje enterprajs w Springu, to mamy kawałek aplikacji webowej a kolejny mamy dodać, przy czym to prędzej pasowałby na normalnej rozmowie - dobry sposób na sprawdzenie czy ktoś rzeczywiście ktos jest np. into SOLID czy tylko umie pięknie toerię powiedzieć :)

2

Problem z takimi zadaniami jest taki, że często są faktycznie trudne i zajmuje mi chwilę optymalne rozgryzienie problemu ale po zrobieniu podobnego zadania / zobaczeniu rozwiązania każde kolejne podobne rozwiązuje się szybko (i wtedy te limity czasowe mają sens). Czyli często sprowadza się to do pamięciówki i 'grindowania' zadań. Na niektórych forach jest to wręcz nazywane 'leetcode/codility grind'. Od takich zadań wolę dostać zadanie i możliwość dyskusji z rekruterem. Podczas takich rekrutacji wręcz razem dochodziliśmy do wspólnego rozwiązania - oni widzieli że umiem myśleć a ja widziałem jak dobrze się współpracuje.

0

Trzy zadania, jedno proste z algorytmem o złożoności O(n), drugie nieco trudniejsze ze wskaźnikami i optymalnym rozwiązaniem O(nlogn) i trzecie przejebane z teori liczb z ciągiem Fibonacciego - "określ ostatnie chyba 6 cyfr n-tej liczby ciągu Fibonacciego gdzie 1 <= n <= 1000000", jak nie kojarzysz ciągu Pisano to ni-chu-ja. :P

1
cepa napisał(a):

jak nie kojarzysz ciągu Pisano to ni-chu-ja. :P

Piszesz taki test, wymyślasz rozwiązanie, a potem w pracy encja na twarz i pchcasz, a największym wysiłkiem jest ręczny deploy wielgachnej aplikacji, bo nikt nigdy nie miał czasu, żeby to zautomatyzować :-)

1

to co teraz zrobię jest pewnie nie do końca legalne, ale najbardziej popier..... pytanie, jakie miałem na codility to było to:

screenshot-20190212224828.png

przeczytałem to 5 razy, zrobiłem jak umiałem i chyba trochę źle :D
znaczy czegoś tam brakowało, jakiegoś warunkowego ifa.

2
leggo napisał(a):

przeczytałem to 5 razy, zrobiłem jak umiałem i chyba trochę źle :D
znaczy czegoś tam brakowało, jakiegoś warunkowego ifa.

Mi by się nie chciało tego czytać. Po pierwsze dlatego, że wygląda na kolejne zadanie z serii masz X punktów - skonstruuj z nich kamasutrę.
Po drugie dlatego,że po zatrudnieniu w tej firmie prawdopodobnie wszystkie taski z całego roku nie miałyby długości tego zadania, a wtedy zwyczajnie bym się wk...zdenerwował, że zatruwano mój czas czymś czym nie zajmuję się w pracy.
Dalszy scenariusz miałby dwa zakończenia - wymyślający taką rekrutację dostałby w dziób, a zaraz potem papier na stół z wypowiedzeniem. Drugi wariant to papier z wypowiedzeniem i w dziób.

Chyba, że rekrutowałeś się do jakiejś agencji kosmicznej robiącej zaawansowane algorytmy do sterowania statkami kosmicznymi - to wtedy okej :-)

2

Trochę bez sensu to zadanie, bo polega na zauważeniu pewnego matematycznego triku, mianowicie ze jeśli (a - b) mod M == 0 to znaczy, że a mod M == b mod M, więc można przelecieć wszystkie liczby w tablicy i policzyć dla każdej właśnie taką wartość a następnie sprawdzić ile razy ten sam wynik wystąpił i wybrać największy ;]
Jest to o tyle bez sensu że jak wpadniesz na ten trik, to jest do zrobienia w 5 minut w kilku linijkach, a jak nie wpadniesz to dupa.

def solve(A, m):
    counts = collections.defaultdict(int)
    for a in A:
        counts[a%m] +=1
    return max(counts.values())
4

Najtrudniejsze jakie miałem kiedyś na Codility to obliczyć liczbę rodzin, która się zmieści na pokładzie samolotu. Ta, może to powinno być super łatwe, ale nie umiałem wykminić algorytmu w odpowiedniej ramie czasowej. W realnym świecie nawet jeśli wykminienie algorytmu zajęłoby mi pół dnia a nie 30 minut, to nikt by problemu nie robił XD (chodzi mi o to, że w realnym świecie nie planuje się zadań do wykonania w 30 minut, tylko raczej na ileś dni, więc 30 minutowa zamuła w realnej pracy nic nie znaczy).

Odchodząc do Codility, to w Devs'killlerze miałem teraz to zadanie z drzewkiem (jak ktoś miał zadanie JavaScript z drzewkiem w Devs'killlerze, to pewnie to samo). Drugi raz w życiu to samo zadanie dostałem, ale znowu mi się nie udało zrobić (Częciowo dlatego, że Devs'killer miał crasha i rzucał błędami). Dostałem mega dziwną odpowiedź od HRki (że niby doceniają profil, doświadczenie, ale dziękują za udział, czyżby chodziło o słaby test w Devs-killerze? Dziwne to wszystko).

Moim zdaniem to, że komuś się coś nie udało pod presją czasu, w stresie i z mglistymi wymaganiami, nie znaczy, że jest złym developerem.

4

W realnym świecie nawet jeśli wykminienie algorytmu zajęłoby mi pół dnia a nie 30 minut, to nikt by problemu nie robił XD (chodzi mi o to, że w realnym świecie nie planuje się zadań do wykonania w 30 minut, tylko raczej na ileś dni, więc 30 minutowa zamuła w realnej pracy nic nie znaczy).
Moim zdaniem to, że komuś się coś nie udało pod presją czasu, w stresie i z mglistymi wymaganiami, nie znaczy, że jest złym developerem.

To troche tak jakby klub pilkarski zrobil rekrutacje na nowego napastnika i przyszedlby taki Cristiano Ronaldo ze swoim CV.
No bardzo ladne CV panie Ronaldo, duzo doswiadczenia w pilce noznej. Tutaj zapraszamy do naszej testowej drużyny na sparing i ma pan 10 minut zeby strzelic gola z przewrotki.

Oj nie udało się no trudno, faktycznie doswiadczenia pan ma... oddzwonimy ;)

0

Wracając trochę do pierwszego postu, jak to jest, że ja też jestem w trakcie rekrutacji do motoroli i nie miałem testu codility?
@lambdadziara jak Ci poszło?

0

Jest gdzieś zbiór przykładów zadań na codility ?
Mozliwe że będę miał tam zadanie do wykonania i chciałbym popatrzeć jak to mniej więcej wygląda i się rozwiązuje.
Zdaje mi się że to trochę pomyłka bo te zadania nie mają odzwierciedlenia w praktyce programistycznej (nie licząc pewnych wyjątków) no ale co zrobić.

2

Gdyby firma chciała sprawdzić jak sobie człowiek radzi z zadaniami to by go zaprosiła na rozmowę z rozwiązywaniem zadań przy tablicy :)

Testy typu codility to testy psychologiczne.
Równie dobrze mogłyby pytać o zwierzą jakim chcesz być. :)

Test codility ma wyłonić ludzi na tyle zaangażowanych w szukanie pracy, że aż im się chce brać udział w takim wyścigu szczurów. Test po stronie pracodawcy nie angażuje ani ludzi ani czasu; można testować 1oo albo 5oo ludzi.
Po teście 2 tygodnie albo 4 oczekiwania na kolejny etap rekrutacji.
Po czwartym etapie zostaną mierni, bierni ale zdeterminowani; prawdopodobieństwo, że nie nie rzucą pracy nad betonowym projektem w skostniałej organizacji jest rośnie. :)

4

rozmowę z rozwiązywaniem zadań przy tablicy

Rozwiązywanie zadań przy tablicy też badają raczej w dużej mierze cechy psychologiczne - sposób myślenia, inteligencję, odporność na stres, odwagę do przyznania się do niewiedzy (ew. umiejętność zrobienia zadania pomimo własnej niewiedzy, umiejętność snucia domysłów, kombinowania).

No i robienie zadań przy tablicy to też test osób rekrutujących. Warto popatrzeć sobie jak będą reagować, czy np. jak ci coś nie pójdzie, to będą próbowali cię naprowadzać, czy może będą mieć satysfakcję i wzrok typu "ale leszcz, nie umie tego" (jeśli to drugie, to raczej nie warto z nimi pracować).

0

Tam czas wykonania zadania wpływa jakoś na ocenę?

1

Ja tam słabo wychodzę w takich testach, bo w normalnej pracy muszę się rozgrzać najpierw (np. wdrożyć w taska, dopytać o nieścisłości, zrobić research), a dopiero potem mogę zasuwać jak rakieta, jak już ogarniam, co jest do zrobienia i jak to zrobić. Chociaż przy nietrywialnych rzeczach okazuje się, że pierwsza implementacja jest do d**y. Czyli teoretycznie jest trochę dłużej, ale i tak się opłaca, bo potem jest to bardziej utrzymywalne.

Natomiast takie testy badają, czy ktoś potrafi zapieprzać już na wstępie i robić zadania wyczynowo.

Swoją drogą, czy ktoś z was jest dobry w te całe Codility i podobne? Jeśli tak, to czy samo przyszło, czy ćwiczyliście?

Ja muszę powiedzieć, że to mi trochę na ambicję wchodzi, i może poćwiczę sobie zadania, żeby móc np. w 5-10 minut rozwiązywać zadania przeznaczone na kilkadziesiąt minut. I może się nauczę najbardziej spotykane algorytmy, żeby nie musieć kombinować, tylko z pamięci jechać.

Ale jak dla mnie Codility itp. to raczej programowanie wyczynowe niż developerka. Jak ktoś tego używa do rekrutacji to trochę jakby zatrudniano kierowców autobusów na podstawie tego, czy potrafią robić tricki na motocyklu.

0

Zrobiłem:
Lesson 4
Counting Elements

PermCheck

function solution($A) {
    // write your code in PHP7.0
    
    $max = max($A);
    arsort($A);

    foreach($A as $value)
    {
        if($max == $value)
        {
            $max--;
            continue;
        }else
        {
            return 0;
        }
    }
    
    return 1;
}

ale nie kumam czemu tylko 66%, tzn nie wiem co jest nie tak w tym rozwiązaniu

0
zergeling napisał(a):

Zrobiłem:
Lesson 4
Counting Elements

PermCheck

function solution($A) {
    // write your code in PHP7.0
    
    $max = max($A);
    arsort($A);

    foreach($A as $value)
    {
        if($max == $value)
        {
            $max--;
            continue;
        }else
        {
            return 0;
        }
    }
    
    return 1;
}

ale nie kumam czemu tylko 66%, tzn nie wiem co jest nie tak w tym rozwiązaniu

Pewnie przez to, że sortujesz na początku. Ta tablica może przyjmować 1000 000 000 elementów a ty to sortujesz to wynik jest jaki jest

0
zergeling napisał(a):

Zrobiłem:
Lesson 4
Counting Elements

PermCheck

function solution($A) {
    // write your code in PHP7.0
    
    $max = max($A);
    arsort($A);

    foreach($A as $value)
    {
        if($max == $value)
        {
            $max--;
            continue;
        }else
        {
            return 0;
        }
    }
    
    return 1;
}

nie kumam czemu tylko 66%, tzn nie wiem co jest nie tak w tym rozwiązaniu

A co to zadanie miało sprawdzić? Czy tablica to ciąg elementów 1...N?

Może wystarczyłoby coś w stylu (pseudokodem, nie babram się w PHP)?

return A.min() == 1 and A.max() == A.size() and A.toSet().size() == A.size()
0

A non-empty array A consisting of N integers is given.

A permutation is a sequence containing each element from 1 to N once, and only once.

For example, array A such that:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2

is a permutation, but array A such that:

A[0] = 4
A[1] = 1
A[2] = 3

is not a permutation, because value 2 is missing.

The goal is to check whether array A is a permutation.

Write a function:

int solution(int A[], int N);

that, given an array A, returns 1 if array A is a permutation and 0 if it is not.

For example, given array A such that:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2

the function should return 1.

Given array A such that:

A[0] = 4
A[1] = 1
A[2] = 3

the function should return 0.

Write an efficient algorithm for the following assumptions:

N is an integer within the range [1..100,000];
each element of array A is an integer within the range [1..1,000,000,000].

0

Mi ten kod daje 100%, może nie jest najładniejszy ale działa :)

var count = A.Count();
            int[] tab = new int[count];
            for (int i = 0; i < count; i++)
            {
                if (A[i] - 1 < count && tab[A[i]-1]==0)
                    tab[A[i] - 1] = A[i];
                else
                    return 0;
            }
            return 1;
0

Spróbowałem rekrutacji i poległem na codility. W zasadzie poprawność była 100% ale performance na 0% :/. Operacje na tablicach do 100k rekordów i ich wartości liczbowe z bardzo dużych przedziałach ale nie mogę napisać tu treści zadania.

0

Ostatnio miałem Codility - 4 zadania na 2 godziny. Była ostra jazda. Zrobiłem 3,5 zadania i dostałem 66%.

P.S. 1 Pierwszy raz miałem sytuację (nie wiedziałem, że Codility to umożliwia) miałem zadania oprócz C#/C++/Java na FrontEnd (pisane w JQuery) oraz zapytania w SQL. Czyli 2 zadania algorytmiczne + 1 JQuery (zmiana treści na stronie) oraz specjalne zapytanie w SQL. Nie było łatwo.

P.S. 2 Codility to pikuś. Miałem ostatnio okazję zasmakować Codility Live. Generalnie to Codility + goście którzy na żywo patrzą na to co piszesz i proszą, by pisać w edytorze Codility, a nie w Visual Studio, żeby widzieli jak powstaje kod. To w połączeniu z wideo konferencją - bardzo nie polecam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1