N>Есть посвященная как раз этому книга Cracking the Coding Interview.
Там вот в оценках мнения разделились. Можно комментариев? Она не священная вообще? Священная, но с оговорками? Cвященная, только в определенных частях cвета?
Книгу читал и не осуждаю.
Re[8]: Типовые задачи на собеседованиях по программированию с решениями
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]: Типовые задачи на собеседованиях по программированию
Здравствуйте, 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;
}
}
Здравствуйте, antonio_banderas, Вы писали: _>Если цели написать эффективный код нету, то всё нормально (только у нас во всех стайл-гайдах на всех работах инструкцию после условий надо с новой строки писать — иначе очень трудно отладчиком будет ходить; а чаще еще и со скобками). _>Можно сэкономить на делениях (оно дорогое вообще-то):
Здравствуйте, kaa.python, Вы писали:
KP>А где это такие дикие требования встречаются?! И вообще, зачем отладчик в 21 веке, всё легко и изящно решается юнит-тестами и логами
Отладчиком может быть быстрее. Зависит от вариативности входных данных. Экспоненциальный рост количества юнит-тестов никто не отменял.
Re[6]: Типовые задачи на собеседованиях по программированию
Здравствуйте, 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, ну я думаю, вы в курсе
_> }
_>
Здравствуйте, __kot2, Вы писали:
__>ну ладно с новой строки, но зачем скобочек-то поналеплено? знаете, что такое составной оператор?
Знаю.
__>нет? а зачем тогда используете?
Потому что так код удобней читать.
Если что, я поначалу (курсе на 2-3) тоже писал в стиле "письмо домой родителям" — много инструкций в 1 строчку.
__>if (counter5 == 5) кстати, такая запись counter5 == 5 редко, но приводит к опечатке counter5 = 5 что тяжело найти, __>особенно без тестов, которые, я так понимаю, не для вас и рекомундуется писать обратно 5 == counter5
Можно я на ты буду?
Все современные компиляторы при присваивании в условии выдают варнинги.
Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь.
Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век.
__>std::cout << "mod15" << std::endl; вообще обычно используют using namespace std, ну я думаю, вы в курсе
Да, в курсе. Дело вкуса. Кто-то использует, кто-то явно пишет.
Когда в проекте несколько библиотек и у каждой есть похожие сущности, удобней явно писать, что откуда.
__>особенно без тестов, которые, я так понимаю, не для вас
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?
S>Строку перевернуть за О(1) памяти.
это очень легкая задача, такие редко задают.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, 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]: Типовые задачи на собеседованиях по программированию с решениями
S>>Строку перевернуть за О(1) памяти.
RF>Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:
Это очень плохо. Это должно от зубов отскакивать, т.е. что значит O(1), O(n) и т.д. должно от зубов отскакивать. Можно не знать выч. сложность какого-нибудь алгоритма -- по расходуемой памяти или кол-ву операций, но определение знать необходимо. Мат. часть тут
RF>
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, RussianFellow, Вы писали:
S>>>Строку перевернуть за О(1) памяти.
RF>>Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:
S>Это очень плохо. Это должно от зубов отскакивать, т.е. что значит O(1), O(n) и т.д. должно от зубов отскакивать. Можно не знать выч. сложность какого-нибудь алгоритма -- по расходуемой памяти или кол-ву операций, но определение знать необходимо. Мат. часть тут
RF>>