piątek, 1 czerwca 2012

Codility - sprawdzanie wiedzy programistów

Portal codility.com zajmuje się testowaniem umiejętności programistów.  Pierwszy raz spotkałem się z nim w artykule "Codility wygrało!" opisującym wygraną polskich (!!!) twórców serwisu Codility w konkursie TechCrunch Europe.

Sam idea sprawdzania wiedzy programistów poprzez serwis bardzo mi się spodobała.

Testy Codility badają jedynie zdolność tworzenia algorytmów - znajomość konkretnych technologii, bibliotek a także umiejętność współpracy w grupie i pracy w stresie trzeba już weryfikować w inny sposób.

Miałem okazję zapoznać się z takim "zestawem zadań rekrutacyjnych". Problemy przedstawiane są według stopnia trudności, każdy z nich ma zostać rozwiązany w określonym czasie.
Rozwiązywanie polega na stworzeniu algorytmu poprzez edytor online w jednym z wybranych języków (całkiem pokaźny zestaw C#, C++, Java, Python itd.).
Gotowy algorytm przesyłamy na serwer i zlecający otrzymuje wynik naszego testu.

Jednym z dwóch "rozgrzewkowych" zadań (drugiego nie pamiętam), było rekurencyjne obliczanie wysokości drzewa binarnego.

    public class Tree
    {
        public int x;
        public Tree l;
        public Tree r;
    };

    public int TreeHeight(Tree node)
    {
        if (node == null)
            return 0;
        if (node.l == null && node.r == null)
            return 0;
        return 1 + Math.Max(treeHeight(node.l), treeHeight(node.r));
    }

Z każdym następnym zadaniem poziom trudności wzrastał, głównym problemem było rozwiązanie algorytmów z żądaną przez autorów złożonością czasową.

Kolejnym zadaniem było obliczenie ilości uzupełniających się par ze złożonością O(n) oraz szukanie najmniejszej różnicy miedzy wartościami z dwóch tablic. Ale to następnym razem...

2 komentarze:

  1. Mógłbys wytłumaczyć kod w ostatnim returnie?

    OdpowiedzUsuń
  2. 46 year-old Systems Administrator II Jedidiah Longmuir, hailing from Picton enjoys watching movies like Joe and Poi. Took a trip to Gondwana Rainforests of Australia and drives a Ferrari 250 GT SWB "Competition" Berlinetta Speciale. katalog

    OdpowiedzUsuń