Re: Типовые задачи на собеседованиях по программированию с решениями
От: IT Россия linq2db.com
Дата: 12.12.16 20:15
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?


http://problembook.net/
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: Типовые задачи на собеседованиях по программированию
От: __kot2  
Дата: 12.12.16 20:53
Оценка:
Здравствуйте, antonio_banderas, Вы писали:
_>Потому что так код удобней читать.
не только я один считаю, что твой код из-за кучи скобочек стал нечитаемым

_>Если что, я поначалу (курсе на 2-3) тоже писал в стиле "письмо домой родителям" — много инструкций в 1 строчку.

я не про это, я про ненужные скобочки

_>Все современные компиляторы при присваивании в условии выдают варнинги.

_>Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь.
_>Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век.
аркгументы, конечно, интересные. но вот мой gcc 4.9.3 — полтора года назад зарелизен варнинг не дает.

__>>особенно без тестов, которые, я так понимаю, не для вас

_>Почему?
попробуй, напиши тесты к своему коду
Отредактировано 12.12.2016 21:02 __kot2 . Предыдущая версия .
Re: Типовые задачи на собеседованиях по программированию с решениями
От: licedey  
Дата: 13.12.16 03:05
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?

RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)

Мне в жизни не приходилось передвинуть бит! (с)
Вариации: посчитать биты в числе, возвести 2 в степень N без циклов

На последних интервью надо было:
— Проверить правильно расставлены скобки ({<>}) в строке
— Перевернуть односвязный список

Если компания зарубежная, рекомендую этот ресурс.
Re[7]: Типовые задачи на собеседованиях по программированию с решениями
От: alzt  
Дата: 13.12.16 07:37
Оценка:
Здравствуйте, antonio_banderas, Вы писали:

Pzz>>
Pzz>>for (int i = 1; i <= 100; i ++) {
Pzz>>    printf("%s%s%d\n", (i % 3) ? "" : "Fizz", (i % 5) ? "" : "Buzz", i);
Pzz>>}
Pzz>>


_>Одна неточность:


_>

_>But for multiples of three print “Fizz” instead of the number ...



Подумалось — решение красиво, но вот менять код будет не так-то просто.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
От: alzt  
Дата: 13.12.16 07:44
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>
RF>char *s; // или char s[80];
RF>int  i, n;
RF>char  c;

RF>n = strlen(s);
RF>for (i=0; i<n/2; i++)
RF>{
RF>    c = s[i];
RF>    s[i] = s[n-1-i];
RF>    s[n-1-i] = c;
RF>}
RF>


Задавая такие задачи ожидают что-то вроде использования двух указателей с инкрементом/декрементом.
Re[9]: Типовые задачи на собеседованиях по программированию
От: antonio_banderas Россия  
Дата: 13.12.16 11:43
Оценка:
Здравствуйте, __kot2, Вы писали:

_>>Все современные компиляторы при присваивании в условии выдают варнинги.

_>>Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь.
_>>Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век.
__>аркгументы, конечно, интересные. но вот мой gcc 4.9.3 — полтора года назад зарелизен варнинг не дает.

Нужно флажок -Wall дать, по умолчанию варнинги отключены.
Для гарантированного отсутствия варнингов можно -Werror. ))

__>>>особенно без тестов, которые, я так понимаю, не для вас

_>>Почему?
__>попробуй, напиши тесты к своему коду

Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 13.12.16 12:38
Оценка: +1
Здравствуйте, playnext, Вы писали:

S>>Строку перевернуть за О(1) памяти.

P>это очень легкая задача, такие редко задают.
Тогда тебя не затруднит превести работающий код.
Sic luceat lux!
Re[4]: Типовые задачи на собеседованиях по программированию с решениями
От: GarryIV  
Дата: 13.12.16 13:16
Оценка:
Здравствуйте, Kernan, Вы писали:

S>>>Строку перевернуть за О(1) памяти.

P>>это очень легкая задача, такие редко задают.
K>Тогда тебя не затруднит превести работающий код.

Если в языке строки immutable то никак, тут O(N) без вариантов.
Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?
WBR, Igor Evgrafov
Re[5]: Типовые задачи на собеседованиях по программированию с решениями
От: playnext  
Дата: 13.12.16 15:25
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Здравствуйте, Kernan, Вы писали:


S>>>>Строку перевернуть за О(1) памяти.

P>>>это очень легкая задача, такие редко задают.
K>>Тогда тебя не затруднит превести работающий код.

GIV>Если в языке строки immutable то никак, тут O(N) без вариантов.

GIV>Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?

Если immutable то например:
const char* reverseString(char* s) {
  if (!s || !*s) {
    return s;
  }
  char* first = s;
  char* last = s;
  for (; *last; ++last) {}
  --last;

  for (; first < last; ++first, --last) {
    char temp = *first;
    *first = *last;
    *last = temp;
  }

  return s;
}



Тут пямять Q(1)
Re[6]: Типовые задачи на собеседованиях по программированию с решениями
От: playnext  
Дата: 13.12.16 15:26
Оценка:
Здравствуйте, playnext, Вы писали:

P>Здравствуйте, GarryIV, Вы писали:


GIV>>Здравствуйте, Kernan, Вы писали:


S>>>>>Строку перевернуть за О(1) памяти.

P>>>>это очень легкая задача, такие редко задают.
K>>>Тогда тебя не затруднит превести работающий код.

GIV>>Если в языке строки immutable то никак, тут O(N) без вариантов.

GIV>>Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?

P>Если immutable то например:

P>
P>const char* reverseString(char* s) {
P>  if (!s || !*s) {
P>    return s;
P>  }
P>  char* first = s;
P>  char* last = s;
P>  for (; *last; ++last) {}
P>  --last;

P>  for (; first < last; ++first, --last) {
P>    char temp = *first;
P>    *first = *last;
P>    *last = temp;
P>  }

P>  return s;
P>}
P>



P>Тут пямять Q(1)


Если mutable, извиняюсь, слова перепутал.
Re[10]: Типовые задачи на собеседованиях по программированию
От: __kot2  
Дата: 13.12.16 15:54
Оценка:
Здравствуйте, antonio_banderas, Вы писали:
_>Нужно флажок -Wall дать, по умолчанию варнинги отключены.
_>Для гарантированного отсутствия варнингов можно -Werror. ))
нууу, знаешь, приходить в проект, а потом говорить — а давайте вы мне мои недефолтные опции компилятора подключим, это не дело

_>Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.

no hire! следующий
Re: Типовые задачи на собеседованиях по программированию с решениями
От: playnext  
Дата: 14.12.16 16:16
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?

RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)

Вот например, весьма примитивная задача. Решается за 5 максимум 10 минут.
Есть стек элементов произвольного типа (тип можно выбрать самому).
Необходимо отсортировать элементы в первом стеке используя еще один такой же стек (изначально он тоже может быть непустой).
Само собой нельзя использовать другие коллекции кроме этого дополнительного стека.
Re[10]: Типовые задачи на собеседованиях по программированию
От: AlexGin Беларусь  
Дата: 14.12.16 16:30
Оценка:
Здравствуйте, antonio_banderas, Вы писали:

_>Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.

А почему же не сделать сохранение результатов в коллекции — например в коллекции типа std::vector<string>
и в юнит-тесте уже данную коллекцию с выходными результатами крутить?

std::vector<string> vectOutStrings;
for (int i=1; i<=100; i++)
{
    bool mul3 = (i%3)==0;
    bool mul5 = (i%5)==0;

    if(mul3 && mul5)
    { 
    printf("FizzBuzz\n");
    vectOutStrings.push_back("FizzBuzz");
    }    
    else if(mul3) 
    {
    printf("Fizz\n");
    vectOutStrings.push_back("Fizz");
    }
    else if(mul5) 
    {
    printf("Buzz\n");
    vectOutStrings.push_back("Buzz");
    }
    else 
    {
    printf("%d\n",i);
    std::stringstream ss;
    ss << i;
    std::string s = ss.str();
    vectOutStrings.push_back(s);
    }
}


Как вариант — это сохранение в вектор подключать через опцию препроцессора.
Отредактировано 14.12.2016 16:42 AlexGin . Предыдущая версия .
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
От: Философ Ад http://vk.com/id10256428
Дата: 14.12.16 18:06
Оценка:
Здравствуйте, licedey, Вы писали:

L>Здравствуйте, RussianFellow, Вы писали:


RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?

RF>>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)

L>Мне в жизни не приходилось передвинуть бит! (с)

L>Вариации: посчитать биты в числе, возвести 2 в степень N без циклов

типа этого _mm_popcnt_u32?
ЗЫ: на плюсах не пишу
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
От: licedey  
Дата: 14.12.16 23:09
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Здравствуйте, licedey, Вы писали:


L>>Мне в жизни не приходилось передвинуть бит! (с)

L>>Вариации: посчитать биты в числе, возвести 2 в степень N без циклов

Ф>типа этого _mm_popcnt_u32?

Ф>ЗЫ: на плюсах не пишу

Простите, вы о чем вообще? Погуглил и то не понял.
Re[4]: Типовые задачи на собеседованиях по программированию с решениями
От: licedey  
Дата: 14.12.16 23:40
Оценка:
Здравствуйте, licedey, Вы писали:

L>Здравствуйте, Философ, Вы писали:


Ф>>типа этого _mm_popcnt_u32?

Ф>>ЗЫ: на плюсах не пишу

L>Простите, вы о чем вообще? Погуглил и то не понял.


А, понял. Только на собеседованиях это надо ручками на листочке сделать в цикле for.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
От: VladFein США  
Дата: 16.12.16 20:34
Оценка: +1 :)
Здравствуйте, Miroff, Вы писали:

M>FizBuzz


Почему-то самого простого решения никто не предложил:

printf("1\n2\nFizz\n\4\nBuzz\Fizz\n7 ...");
Re[11]: Типовые задачи на собеседованиях по программированию
От: antonio_banderas Россия  
Дата: 19.12.16 13:46
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>А почему же не сделать сохранение результатов в коллекции — например в коллекции типа std::vector<string>

AG>и в юнит-тесте уже данную коллекцию с выходными результатами крутить?

Потому что код должен быть един — для основной задачи и для тестов.
А у тебя для основной задачи один код (printf), а для тестов другой код (vectOutStrings.push_back).
Чем это плохо? Тем, что по факту тесты не проверяют основной код. Они проверяют код для тестов.

AG>Как вариант — это сохранение в вектор подключать через опцию препроцессора.


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

Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять.

std::string composeTask()
{
  // здесь мы всё накидываем в строку.
}

void printTask()
{
  std::cout << composeTask() << std::endl;
}

SOME_TEST_MACRO()
{
  std::string result = composeTask();
  // а здесь разбираем и оцениваем result.
}
Re[12]: Типовые задачи на собеседованиях по программированию
От: __kot2  
Дата: 19.12.16 15:38
Оценка:
Здравствуйте, antonio_banderas, Вы писали:
_>Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять.
ладно, не буду больше таить интригу — тест не может тестировать результат цикла целиком
Re[13]: Типовые задачи на собеседованиях по программированию
От: antonio_banderas Россия  
Дата: 19.12.16 16:07
Оценка:
Здравствуйте, __kot2, Вы писали:

_>>Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять.

__>ладно, не буду больше таить интригу — тест не может тестировать результат цикла целиком

Почему?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.