Re[2]: Типовые задачи на собеседованиях по программированию с решениями
От: Arsen.Shnurkov  
Дата: 08.12.16 06:40
Оценка: :)))
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
От: ylem  
Дата: 08.12.16 07:27
Оценка:
N>Есть посвященная как раз этому книга Cracking the Coding Interview.

Там вот в оценках мнения разделились. Можно комментариев? Она не священная вообще? Священная, но с оговорками? Cвященная, только в определенных частях cвета?
Книгу читал и не осуждаю.
Re[8]: Типовые задачи на собеседованиях по программированию с решениями
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 08.12.16 08:01
Оценка:
Здравствуйте, b0r3d0m, Вы писали:

B>Про operator% всё ещё актуально, а остальное нафиг.


Кому как удобно.
1613 г. = 2024 г.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
От: antonio_banderas Россия  
Дата: 08.12.16 08:06
Оценка:
Здравствуйте, Miroff, Вы писали:

M>FizBuzz


The "Fizz-Buzz test" is an interview question designed to help filter out the 99.5% of programming job candidates who can't seem to program their way out of a wet paper bag. The text of the programming assignment is as follows:


А как "to program their way out of a wet paper bag" переводится? Не могут запрограммировать выход из мокрого бумажного мешка?

Из этого перевода дальше будет следовать, кого она таки отсеивает.
Потому что не суметь решить её — я не знаю, как надо вообще не уметь программировать для этого. Её даже школьники решат, причем троечники тоже, имхо. ))

Может, это 99.5% индусов не могут её решить?
Re[5]: Типовые задачи на собеседованиях по программированию
От: antonio_banderas Россия  
Дата: 08.12.16 08:21
Оценка: -2
Здравствуйте, alzt, Вы писали:

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


A>Я бы переписал сл. образом.


A>
A>#include <stdio.h>

A>for (int i=1; i<=100; i++)
A>{
A>    bool mul3 = (i%3)==0;
A>    bool mul5 = (i%5)==0;

A>    if(mul3 && mul5) printf("FizzBuzz\n");
A>    else if(mul3) printf("Fizz\n");
A>    else if(mul5) printf("Buzz\n");
A>    else printf("%d\n",i);
A>}
A>


Если цели написать эффективный код нету, то всё нормально (только у нас во всех стайл-гайдах на всех работах инструкцию после условий надо с новой строки писать — иначе очень трудно отладчиком будет ходить; а чаще еще и со скобками).
Можно сэкономить на делениях (оно дорогое вообще-то):

    for (unsigned i = 1, counter3 = i, counter5 = i; i <= 100; ++i, ++counter3, ++counter5)
    {
        if (counter3 == 3)
        {
            counter3 = 0;
        }
        if (counter5 == 5)
        {
            counter5 = 0;
        }

        if (counter3 == 0 && counter5 == 0)
        {
            std::cout << "mod15" << std::endl;
        }
        else if (counter3 == 0)
        {
            std::cout << "mod3" << std::endl;
        }
        else if (counter5 == 0)
        {
            std::cout << "mod5" << std::endl;
        }
        else
        {
            std::cout << i << std::endl;
        }
    }
Отредактировано 08.12.2016 8:26 antonio_v_krasnom . Предыдущая версия .
Re[6]: Типовые задачи на собеседованиях по программированию с решениями
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 08.12.16 08:26
Оценка: -3
Здравствуйте, antonio_banderas, Вы писали:

_>Если цели написать эффективный код нету, то всё нормально (только у нас во всех стайл-гайдах на всех работах инструкцию после условий надо с новой строки писать — иначе очень трудно отладчиком будет ходить; а чаще еще и со скобками).

_>Можно сэкономить на делениях (оно дорогое вообще-то):

  спрятал кошмар
_>
_>    for (unsigned i = 1, counter3 = i, counter5 = i; i < 100; ++i, ++counter3, ++counter5)
_>    {
_>        if (counter3 == 3)
_>        {
_>            counter3 = 0;
_>        }
_>        if (counter5 == 5)
_>        {
_>            counter5 = 0;
_>        }

_>        if (counter3 == 0 && counter5 == 0)
_>        {
_>            std::cout << "mod15" << std::endl;
_>        }
_>        else if (counter3 == 0)
_>        {
_>            std::cout << "mod3" << std::endl;
_>        }
_>        else if (counter5 == 0)
_>        {
_>            std::cout << "mod5" << std::endl;
_>        }
_>        else
_>        {
_>            std::cout << i << std::endl;
_>        }
_>    }
_>


А где это такие дикие требования встречаются?! И вообще, зачем отладчик в 21 веке, всё легко и изящно решается юнит-тестами и логами
Re[7]: Типовые задачи на собеседованиях по программированию с решениями
От: El Camino Real США  
Дата: 08.12.16 10:14
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>А где это такие дикие требования встречаются?! И вообще, зачем отладчик в 21 веке, всё легко и изящно решается юнит-тестами и логами

Отладчиком может быть быстрее. Зависит от вариативности входных данных. Экспоненциальный рост количества юнит-тестов никто не отменял.
Re[6]: Типовые задачи на собеседованиях по программированию
От: alzt  
Дата: 09.12.16 20:43
Оценка:
Здравствуйте, antonio_banderas, Вы писали:

_>Если цели написать эффективный код нету, то всё нормально (только у нас во всех стайл-гайдах на всех работах инструкцию после условий надо с новой строки писать — иначе очень трудно отладчиком будет ходить; а чаще еще и со скобками).


Придирки к форматированию это почти как придирки к орфографии.

_>Можно сэкономить на делениях (оно дорогое вообще-то):

Оно вообще ничего не стоит. Пользователи не заметят, если ты этот цикл вообще уберёшь.
Этот пример преждевременной оптимизации, которую не надо делать.
Отредактировано 09.12.2016 20:44 alzt . Предыдущая версия .
Re[6]: Типовые задачи на собеседованиях по программированию
От: __kot2  
Дата: 09.12.16 21:27
Оценка:
Здравствуйте, antonio_banderas, Вы писали:
_>
_>    for (unsigned i = 1, counter3 = i, counter5 = i; i <= 100; ++i, ++counter3, ++counter5) 
_>    {
_>        if (counter3 == 3)
_>        { ну ладно с новой строки, но зачем скобочек-то поналеплено? знаете, что такое составной оператор? нет? :) а зачем тогда используете?
_>            counter3 = 0;
_>        }
_>        if (counter5 == 5) кстати, такая запись counter5 == 5 редко, но приводит к опечатке counter5 = 5 что тяжело найти, 
        особенно без тестов, которые, я так понимаю, не для вас и рекомундуется писать обратно 5 == counter5
_>        {
_>            counter5 = 0;
_>        }

_>        if (counter3 == 0 && counter5 == 0)
_>        {
_>            std::cout << "mod15" << std::endl; вообще обычно используют using namespace std, ну я думаю, вы в курсе
_>        }
_>
Отредактировано 09.12.2016 21:31 __kot2 . Предыдущая версия .
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
От: std.denis Россия  
Дата: 09.12.16 23:20
Оценка:
_>А как "to program their way out of a wet paper bag" переводится? Не могут запрограммировать выход из мокрого бумажного мешка?

да
Re[6]: Типовые задачи на собеседованиях по программированию
От: mik1  
Дата: 09.12.16 23:44
Оценка: +1
Здравствуйте, antonio_banderas, Вы писали:

A>>Я бы переписал сл. образом.


Расскажите, как вы это будете тестировать
Re[5]: Типовые задачи на собеседованиях по программированию с решениями
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.12.16 14:53
Оценка: 2 (1) +1
Здравствуйте, alzt, Вы писали:

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


A>Я бы переписал сл. образом.


А я бы так:

for (int i = 1; i <= 100; i ++) {
    printf("%s%s%d\n", (i % 3) ? "" : "Fizz", (i % 5) ? "" : "Buzz", i);
}
Re[7]: Типовые задачи на собеседованиях по программированию
От: antonio_banderas Россия  
Дата: 12.12.16 07:42
Оценка: +1
Здравствуйте, __kot2, Вы писали:

__>ну ладно с новой строки, но зачем скобочек-то поналеплено? знаете, что такое составной оператор?


Знаю.

__>нет? а зачем тогда используете?


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

__>if (counter5 == 5) кстати, такая запись counter5 == 5 редко, но приводит к опечатке counter5 = 5 что тяжело найти,

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

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

__>std::cout << "mod15" << std::endl; вообще обычно используют using namespace std, ну я думаю, вы в курсе


Да, в курсе. Дело вкуса. Кто-то использует, кто-то явно пишет.
Когда в проекте несколько библиотек и у каждой есть похожие сущности, удобней явно писать, что откуда.

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


Почему?
Отредактировано 12.12.2016 7:44 antonio_v_krasnom . Предыдущая версия .
Re[6]: Типовые задачи на собеседованиях по программированию с решениями
От: antonio_banderas Россия  
Дата: 12.12.16 07:48
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А я бы так:


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[7]: Типовые задачи на собеседованиях по программированию
От: antonio_banderas Россия  
Дата: 12.12.16 07:54
Оценка:
Здравствуйте, mik1, Вы писали:

M>Расскажите, как вы это будете тестировать


Есть много способов это тестировать.
А что?
Re: Типовые задачи на собеседованиях по программированию с решениями
От: Sharov Россия  
Дата: 12.12.16 10:59
Оценка:
Здравствуйте, RussianFellow, Вы писали:

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


Строку перевернуть за О(1) памяти.
Кодом людям нужно помогать!
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
От: playnext  
Дата: 12.12.16 13:38
Оценка:
Здравствуйте, Sharov, Вы писали:

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


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


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


это очень легкая задача, такие редко задают.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 12.12.16 13:47
Оценка: :)
Здравствуйте, Sharov, Вы писали:

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


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


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


Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:

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

n = strlen(s);
for (i=0; i<n/2; i++)
{
    c = s[i];
    s[i] = s[n-1-i];
    s[n-1-i] = c;
}
1613 г. = 2024 г.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
От: Sharov Россия  
Дата: 12.12.16 14:08
Оценка:
Здравствуйте, RussianFellow, Вы писали:


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


RF>Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:


Это очень плохо. Это должно от зубов отскакивать, т.е. что значит O(1), O(n) и т.д. должно от зубов отскакивать. Можно не знать выч. сложность какого-нибудь алгоритма -- по расходуемой памяти или кол-ву операций, но определение знать необходимо. Мат. часть тут

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[4]: Типовые задачи на собеседованиях по программированию с решениями
От: playnext  
Дата: 12.12.16 17:39
Оценка: +1
Здравствуйте, Sharov, Вы писали:

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



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


RF>>Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:


S>Это очень плохо. Это должно от зубов отскакивать, т.е. что значит O(1), O(n) и т.д. должно от зубов отскакивать. Можно не знать выч. сложность какого-нибудь алгоритма -- по расходуемой памяти или кол-ву операций, но определение знать необходимо. Мат. часть тут


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>>


S>Похоже на правду.


Обычно задают список перевернуть односвязный. Это чаще встречается.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.