Re[3]: сгруппировать символы в строке - собеседование
От: Alexéy Sudachén Чили  
Дата: 18.03.13 22:37
Оценка:
EP>Оригинальный in-place — если за 5 мин — то .
EP>Но он O(N^3). Переводится в O(N^2) добавлением break в if, после memmove.

блин, точно! про бряк забыл )))
Re[4]: сгруппировать символы в строке - собеседование
От: Evgeny.Panasyuk Россия  
Дата: 18.03.13 22:43
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

EP>>Оригинальный in-place — если за 5 мин — то .

EP>>Но он O(N^3). Переводится в O(N^2) добавлением break в if, после memmove.
AS>блин, точно! про бряк забыл )))

я когда делал на время, вообще про стабильность забыл
Автор: Evgeny.Panasyuk
Дата: 22.02.13

template<typename BidirectionalIterator>
void group(BidirectionalIterator first,BidirectionalIterator last)
{
    while(first!=last)
        first = stable_partition( first, last, _1 == *first );
}
Re[3]: сгруппировать символы в строке - собеседование
От: Alexéy Sudachén Чили  
Дата: 18.03.13 22:45
Оценка:
RNS>Если просили придумать решение задачи, то 5 минут более чем достаточно. Задача решается со скоростью речи, т.е. можно мыслить вслух. Если им нужен был именно код на бумаге, то мне такая вакансия скорее всего была бы совершенно не интересна. Набирание кода на время — скучно.

Знать путь и пройти его — зело разные вещи )

Могу точно сказать — ты не программист ) Манагер, аналитЕГ, или просто философ? Я к тому, что когда сам проводил собеседования, в первую очередь смотрел сможет ли подопытный написать код, причём совершенно любой. Пока нет демонстрации что есть способность писать код, о философии говорить бесполезно. Как бы у программера результатом работы является код, а не философские трактаты о пользе сортировке в задачах частичного упорядочивания сферических объектов в вакууме.
Re[4]: сгруппировать символы в строке - собеседование
От: RiNSpy  
Дата: 18.03.13 23:20
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

RNS>>Если просили придумать решение задачи, то 5 минут более чем достаточно. Задача решается со скоростью речи, т.е. можно мыслить вслух. Если им нужен был именно код на бумаге, то мне такая вакансия скорее всего была бы совершенно не интересна. Набирание кода на время — скучно.


AS>Знать путь и пройти его — зело разные вещи )


AS>Могу точно сказать — ты не программист ) Манагер, аналитЕГ, или просто философ? Я к тому, что когда сам проводил собеседования, в первую очередь смотрел сможет ли подопытный написать код, причём совершенно любой. Пока нет демонстрации что есть способность писать код, о философии говорить бесполезно. Как бы у программера результатом работы является код, а не философские трактаты о пользе сортировке в задачах частичного упорядочивания сферических объектов в вакууме.


Всё, конечно, зависит от задач, которые нужно решать, но мне важнее оценить способность адекватно мыслить, умение быстро обучаться и желание работать. А знание конкретных языков и технологий вторично — эти навыки легко подхватить, если, конечно, проект не хардкорный. Но я набирал людей себе в стартап, небольшую команду. И я наверное да, не программист — на порядок больше времени уходит на думание и исследование, чем на собственно написание кода. Если бы я набирал людей на написание кода под спецификации, я бы с вами согласился — важно было бы именно оценить умение написание хорошего кода.
Re[5]: сгруппировать символы в строке - собеседование
От: Alexéy Sudachén Чили  
Дата: 19.03.13 06:11
Оценка:
RNS>Всё, конечно, зависит от задач, которые нужно решать, но мне важнее оценить способность адекватно мыслить, умение быстро обучаться и желание работать. А знание конкретных языков и технологий вторично — эти навыки легко подхватить, если, конечно, проект не хардкорный. Но я набирал людей себе в стартап, небольшую команду. И я наверное да, не программист — на порядок больше времени уходит на думание и исследование, чем на собственно написание кода. Если бы я набирал людей на написание кода под спецификации, я бы с вами согласился — важно было бы именно оценить умение написание хорошего кода.

Ну, как бы умение программировать ни есть знание языка и технологий. Это скил уровня умения думать. Опыт пропущенный через призму сознания. Такой штуке нельзя научиться за пару дней, недель, месяцев... годы нужны. Опять же хороший код это что-то из области литературы. ) Штука сильно субьективная. Код должен быть написанным за оговоренное время, соответствовать гайдлайнам и ТЗ, ну и самое главное — работать.

Как бы я тоже в основном занимаюсь исследованиями. Даже кода я читаю в несколько раз больше чем пишу ))). Что по времени, что по объёму. Но у меня очевидно нет проблем решить задачку на 5 мин не методом выпускника ФМШ'а и без запарок на тему 'хорошего' кода ))))
Re[4]: recursive stable in-place divide and conqueror grouping
От: Evgeny.Panasyuk Россия  
Дата: 19.03.13 15:08
Оценка:
recursive stable in-place divide and conqueror grouping
  • повороты теперь делаются для целых групп/подгрупп, а не по одному элементу за раз
  • возможность распараллелить
  • возможность использовать non-inplace алгоритм на нижних уровнях, допустим на константной, логарифмической или линейной длине от общей.
    // _____________________[ recursive stable group ]___________________________ //
    
    // stable merge of adjacent groups
    template<typename BidirectionalIterator>
    void merge_groups(BidirectionalIterator first,BidirectionalIterator middle,BidirectionalIterator last)
    {
        typedef reverse_iterator<BidirectionalIterator> ReverseIterator;
        BidirectionalIterator i=middle,current,sub_last,next_to_same;
        while(i != last)
        {
            current = i++;
            sub_last=find(i,last,*current);
            if(sub_last!=last)
                i = sub_last;
            next_to_same = find(ReverseIterator(current),ReverseIterator(first),*current).base();
            if(next_to_same!=first)
               rotate(next_to_same,current,i);
        }
    }
    
    template<typename BidirectionalIterator>
    void stable_group(BidirectionalIterator first,BidirectionalIterator last)
    {
        if(first!=last)
        {
            BidirectionalIterator middle=first;
            typename iterator_traits<BidirectionalIterator>::difference_type range_size = distance(first,last);
            if(range_size>2)
            {
                advance(middle,range_size/2);
                stable_group(first,middle);
                stable_group(middle,last);
                merge_groups(first,middle,last);
            }
        }
    }
    
    // __________________________________________________________________________ //

      full
    #include <functional>
    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <ostream>
    #include <string>
    
    using namespace std;
    
    // _____________________[ recursive stable group ]___________________________ //
    
    // stable merge of adjacent groups
    template<typename BidirectionalIterator>
    void merge_groups(BidirectionalIterator first,BidirectionalIterator middle,BidirectionalIterator last)
    {
        typedef reverse_iterator<BidirectionalIterator> ReverseIterator;
        BidirectionalIterator i=middle,current,sub_last,next_to_same;
        while(i != last)
        {
            current = i++;
            sub_last=find(i,last,*current);
            if(sub_last!=last)
                i = sub_last;
            next_to_same = find(ReverseIterator(current),ReverseIterator(first),*current).base();
            if(next_to_same!=first)
               rotate(next_to_same,current,i);
        }
    }
    
    template<typename BidirectionalIterator>
    void stable_group(BidirectionalIterator first,BidirectionalIterator last)
    {
        if(first!=last)
        {
            BidirectionalIterator middle=first;
            typename iterator_traits<BidirectionalIterator>::difference_type range_size = distance(first,last);
            if(range_size>2)
            {
                advance(middle,range_size/2);
                stable_group(first,middle);
                stable_group(middle,last);
                merge_groups(first,middle,last);
            }
        }
    }
    
    // __________________________________________________________________________ //
    
    template<typename BidirectionalIterator>
    void group_gold(BidirectionalIterator first,BidirectionalIterator last)
    {
        typedef typename iterator_traits<BidirectionalIterator>::value_type value_type;
        while(first!=last)
            first = stable_partition(first, last, bind1st(equal_to<value_type>(),*first));
    }
    
    template<typename Range>
    void test_with_gold(const Range &s)
    {
        Range p = s;
        do
        {
            next_permutation(begin(p),end(p));
            auto gold = p, recursive = p;
            group_gold(begin(gold),end(gold));
            stable_group(begin(recursive),end(recursive));
            if(gold!=recursive)
            {
                cout << "Error, gold and recursive result differs" << endl;
                cout << "Gold=" << gold << endl;
                cout << "Recursive=" << recursive << endl;
            }
        }while(p!=s);
    }
    
    int main()
    {
        string tests[] =
        {
            "vvabcbbcc",
            "asdfrrafdsr",
            "abcdefgijkl",
            "010101010101",
            "totobobolol"
        };
        for(auto &&s : tests)
        {
            test_with_gold(s);
            stable_group(begin(s),end(s));
            cout << s << endl;
        }
    }

  • Re[4]: Чисто для понимания кухни вопрос
    От: Dym On Россия  
    Дата: 19.03.13 18:45
    Оценка:
    А>Если реальной вакансии нет, то кто платит рекрутеру за пропускание через себя людей?
    А>Т. е. откуда "физически" берутся эти деньги?
    Ежегодно выделяется некоторый бюджет на HR, они должны его освоить. Если не освоят, на следующий год не дадут.
    Счастье — это Glück!
    Re: сгруппировать символы в строке - собеседование
    От: alexanderfedin США http://alexander-fedin.pixels.com/
    Дата: 20.03.13 18:50
    Оценка:
    Здравствуйте, Vzhyk, Вы писали:

    V>On 21.02.2013 17:30, Аноним 471 wrote:


    >> например есть "vvabbcbcc"

    >> Надо получить строку где сохранена "последовательность" — т.е. "vvabbbccc"
    >> Есть какой-то быстрый способ? Мне дали 5 минут написать метод
    V>За такую постановку задачи только в морду плюнуть. Или она на
    V>собеседовании была не так поставлена?

    O(N * Log(N)):

    using System;
    using System.Collections.Generic;
    
    namespace GroupChars
    {
        class Program
        {
            static void Main(string[] args)
            {
                var chars = "vvabbcbcc".ToCharArray();
    
                var orders = new Dictionary<char, int>();
                for (int i = 0; i < chars.Length; ++i)
                {
                    var ch = chars[i];
                    if (!orders.ContainsKey(ch))
                        orders.Add(ch, i);
                }
    
                Array.Sort(chars, (a, b) => orders[a] - orders[b]);
    
                Console.WriteLine(new string(chars));
            }
        }
    }
    Respectfully,
    Alexander Fedin.
    Re[6]: сгруппировать символы в строке - собеседование
    От: Sharowarsheg  
    Дата: 20.03.13 22:16
    Оценка:
    Здравствуйте, Vzhyk, Вы писали:

    >> Это кстати не O(n^2) а O(2n)

    V>Оооооо, можно сразу просить название конторы, куда идти не следует, если
    V>там такие спецуги работают.

    Заметь, кстати, что если типичное время вычисления меряется не десятками секунд, а днями или неделями, через некоторое время все начинают применять O(5*n) совершенно естественно. Формально вроде как и неправильно, но пренебрегать константами выходит еще более неправильно. Формально правильная запись была бы, конечно, t~5*n, но никто особо не парится.
    Re[7]: сгруппировать символы в строке - собеседование
    От: Vzhyk  
    Дата: 21.03.13 07:40
    Оценка:
    On 21.03.2013 1:16, Sharowarsheg wrote:

    > Заметь, кстати, что если типичное время вычисления меряется не десятками

    > секунд, а днями или неделями, через некоторое время все начинают
    > применять O(5*n) совершенно естественно. Формально вроде как и
    > неправильно, но пренебрегать константами выходит еще более неправильно.
    > Формально правильная запись была бы, конечно, t~5*n, но никто особо не
    > парится.
    Я в ауте. Не, точно, сейчас, чем меньше знаний и умении и опыта, тем
    лучше, главно гномиков переворачивать, как начальник попросит.
    Posted via RSDN NNTP Server 2.1 beta
    Re[3]: сгруппировать символы в строке - собеседование
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 21.03.13 13:52
    Оценка:
    Здравствуйте, Vzhyk, Вы писали:

    >> Если надо сделать in place , тоже не могу быстрого решения придумать.

    V>Но зачем?

    V>То бишь все уперлось в некорректную постановку задачи.


    На собеседовании задачу не надо давать в максимально корректной форме, можно даже в некорректной форме. Если кандидат нашел нестыковки и уточняет свойства, ограничения, то это половина правильного ответа.

    Дело в том, что заказчик большей частью никогда не дает задачи в корректной форме. Если ты работаешь кодером не включая мозг, то конечно, иди ищи того, кто будет тебе ставить задачи в максимально корректной форме.

    Да и вообще, у инженера большей частью все задачи с неполным, нечетким и тд. условием.

    Поэтому если человек встаёт в позу из за некорректной постановки, то в реальном проекте этим кандидатом можно пренебречь, поработает от силы год и уйдет.

    Поиски максимально корректных заданий это просто форма ухода от ответственности.

    P.S. Собтсвенно бизнес-приложения все до одного "иди туда не знаю куда, принеси то не знаю что".
    Re[4]: сгруппировать символы в строке - собеседование
    От: Vzhyk  
    Дата: 21.03.13 13:59
    Оценка:
    On 21.03.2013 16:52, Ikemefula wrote:

    > P.S. Собтсвенно бизнес-приложения все до одного "иди туда не знаю куда,

    > принеси то не знаю что".
    Зуб даешь что у всех? Или только у вас?
    Posted via RSDN NNTP Server 2.1 beta
    Re[5]: сгруппировать символы в строке - собеседование
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 21.03.13 14:11
    Оценка:
    Здравствуйте, Vzhyk, Вы писали:

    >> P.S. Собтсвенно бизнес-приложения все до одного "иди туда не знаю куда,

    >> принеси то не знаю что".
    V>Зуб даешь что у всех? Или только у вас?

    У "нас" в моем случае это несколько контор-гигантов, которые на своих рынках занимают лидирующие позиции.

    А если тебя интересуют масштабы, то эта проблема нашла отражение буквально во всех Agile-методологиях.
    Re[6]: сгруппировать символы в строке - собеседование
    От: Vzhyk  
    Дата: 21.03.13 14:27
    Оценка:
    On 21.03.2013 17:11, Ikemefula wrote:

    > У "нас" в моем случае это несколько контор-гигантов, которые на своих

    > рынках занимают лидирующие позиции.
    Понятно MS, Google, Apple и все твои.
    Posted via RSDN NNTP Server 2.1 beta
    Re[7]: сгруппировать символы в строке - собеседование
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 22.03.13 09:57
    Оценка:
    Здравствуйте, Vzhyk, Вы писали:

    >> У "нас" в моем случае это несколько контор-гигантов, которые на своих

    >> рынках занимают лидирующие позиции.
    V>Понятно MS, Google, Apple и все твои.

    Это не единственные конторы-гиганты. Гигант это скажем 10000+ человек. Что касается Микрософта и Гугла, то есть там знакомые, вобщем с их слов ситуация ровно такая же — никто тебе не будет разжовывать досконально, беззубые никому не нужны.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.