Бу! привыкаем в таком тоне говорить со своими детьмиberlagaB wrote: За себя привыкаем говорить. Вы не сможете, а я смогу.
А _гарантированно_ вы не сможете. И я не смогу. Если повезет - сможем. Не дошло, нет?
Бу! привыкаем в таком тоне говорить со своими детьмиberlagaB wrote: За себя привыкаем говорить. Вы не сможете, а я смогу.
СейчасАццкоМото wrote:а разверните мысль? я не угнался.Alexander Troyansky wrote:Чисто интересно. На задачи типа "преобразовать строку в целое", чтобы показать в что "в теме", надо каким кодом отвечать? Тем, который в три строчки, или тем, который правильный?АццкоМото wrote:ну вот опять прекрасное задание превращается в дрочевоnightmare2 wrote:Смотря для каких целей нанимается кандидат.XpoH wrote:Крутое задание, вопросов нет!
Уверен, что не все программисты пройдут этот фильтр.
Еще важно чего хочет добиться интервью проводящий.
Если бы на соискание позиции Андроид разработчика (читай Java программиста) мне сказали, что пример не будет работать с неинициализированным переменными в JS, я бы пришел к выводу, что меня хотят завалить, причем достаточно тупым способом.
Если уж хотелось углубить, то можно было спросить что изменится если числа будуть с дробной частью?
Какой тип данных для этого лучше использовать и почему?
Чем отличается поведение типов double от decimal ?
На этот вопрос тоже далеко не все ответят.
два момента
1. это фильтр, не более. как фибоначчи или поиск цикла в списке. в идеале достаточно "пароль москва знаешь? знаю. проходи". тонкости ответа никого не интересуют
2. решение чисто математическое, от добавления всяких там типов начинает смердить
кстати, если речь про какие-то три строчки
вот у меня уже третья. тащем-та - вас не затруднит?
Code: Select all
char c[];
int i = 0;
while(c) { i *= 10; i += c -'0'; c++;}
Code: Select all
bool str2int(const char * str, int & res)
{
int tmp;
if (!str || !*str) return false;
bool bNeg = *str == '-';
if (bNeg) str++;
res = -(*str++ - '0');
if (res > 0 || res < -9) return false;
for(;*str;str++) {
char c = *str - '0';
if (c >= 0 && c <= 9) {
if ((tmp = 10*res-c) > res) return false;
else res = tmp;
}
else return false;
}
if (!bNeg)
if (res==MIN_INT) return false;
else res = -res;
return true;
}
уотAlexander Troyansky wrote: Сейчас
я поищу
в архиве.
Среднее между "бе" и "му"? Определитесь.АццкоМото wrote: Бу! привыкаем в таком тоне говорить со своими детьми
Еще раз, за себя. "Сама-сама." Не сможете - ну значит, не судьба. Спрашивайте свой уровень, "пароль москва" и т.п.АццкоМото wrote: А _гарантированно_ вы не сможете. И я не смогу. Если повезет - сможем. Не дошло, нет?
Лучше первым. За второе вас сразу втопчут по ноздри, с первым еще есть шанс выплыть.Alexander Troyansky wrote: Которым из них надо отвечать на так называемый "фильтр"?
См. примерАццкоМото wrote:уотAlexander Troyansky wrote: Сейчас
я поищу
в архиве.
это
да!!!
простите,Alexander Troyansky wrote:См. примерАццкоМото wrote:уотAlexander Troyansky wrote: Сейчас
я поищу
в архиве.
это
да!!!
выше,
пожалуйста.
НуАццкоМото wrote:простите,Alexander Troyansky wrote:См. примерАццкоМото wrote:уотAlexander Troyansky wrote: Сейчас
я поищу
в архиве.
это
да!!!
выше,
пожалуйста.
какой
пример?
Alexander Troyansky wrote:...Которым из них надо отвечать на так называемый "фильтр"?
Code: Select all
int x;
int.TryParse("123", out x);
Обычно просят реализовать этот вот самый TryParse. Причем даже ваше решение тоже ведь зависит от контекста, пральна? Например, в том же С++ TryParse нет. Хотя да, при "фильтровании" надо, я так полагаю, задаватьвопросы, чтоб уточнить чего же именно хочет спрашивающий. А так да, если С# и можно воспользоваться уже готовыми функциями преобразования, то ваш ответ будет в самый раз.nightmare2 wrote:Alexander Troyansky wrote:...Которым из них надо отвечать на так называемый "фильтр"?"Все уже украдено до нас."Code: Select all
int x; int.TryParse("123", out x);
Alexander Troyansky wrote:
Update: Нашёл. Решение "в три строчки":Code: Select all
char c[]; int i = 0; while(c) { i *= 10; i += c -'0'; c++;}
Решение правильное:Code: Select all
bool str2int(const char * str, int & res) { int tmp; if (!str || !*str) return false; bool bNeg = *str == '-'; if (bNeg) str++; res = -(*str++ - '0'); if (res > 0 || res < -9) return false; for(;*str;str++) { char c = *str - '0'; if (c >= 0 && c <= 9) { if ((tmp = 10*res-c) > res) return false; else res = tmp; } else return false; } if (!bNeg) if (res==MIN_INT) return false; else res = -res; return true; }
Которым из них надо отвечать на так называемый "фильтр"?
Ну есть же разница между теми, кто базовые алгоритмы пишет и теми, кто их применяет в прикладных программах.Alexander Troyansky wrote:Обычно просят реализовать этот вот самый TryParse. Причем даже ваше решение тоже ведь зависит от контекста, пральна? Например, в том же С++ TryParse нет. Хотя да, при "фильтровании" надо, я так полагаю, задаватьвопросы, чтоб уточнить чего же именно хочет спрашивающий. А так да, если С# и можно воспользоваться уже готовыми функциями преобразования, то ваш ответ будет в самый раз.
Code: Select all
public static bool MyTryParse(string strNum, out int result)
{
result = 0;
int m = 1;
for (int i = strNum.Length - 1; i >= 0; i--)
{
if (strNum[i] < '0' || strNum[i] > '9')
{
result = 0;
return false;
}
else
{
result += (int)(strNum[i] - '0') * m;
}
m *= 10;
}
return true;
}
Гм, какая неудобная ситуация возникла...АццкоМото wrote:и, кстати, вообще идиотское. там не то, что ошибка, там весь полет мысли указывает на карьеру джанитора
я устану тыкать в каждую строчку
гм. Да, задача не устаревает. На входе "-1". Что будет на выходе?nightmare2 wrote:Ну есть же разница между теми, кто базовые алгоритмы пишет и теми, кто их применяет в прикладных программах.Alexander Troyansky wrote:Обычно просят реализовать этот вот самый TryParse. Причем даже ваше решение тоже ведь зависит от контекста, пральна? Например, в том же С++ TryParse нет. Хотя да, при "фильтровании" надо, я так полагаю, задаватьвопросы, чтоб уточнить чего же именно хочет спрашивающий. А так да, если С# и можно воспользоваться уже готовыми функциями преобразования, то ваш ответ будет в самый раз.
Если подумать немного, но наверное что-то напишу.
Кодировки цифр идут подряд.
Взяв за основу '0'...
Code: Select all
public static bool MyTryParse(string strNum, out int result) { result = 0; int m = 1; for (int i = strNum.Length - 1; i >= 0; i--) { if (strNum[i] < '0' || strNum[i] > '9') { result = 0; return false; } else { result += (int)(strNum[i] - '0') * m; } m *= 10; } return true; }
Alexander Troyansky wrote:Гм, какая неудобная ситуация возникла...АццкоМото wrote:и, кстати, вообще идиотское. там не то, что ошибка, там весь полет мысли указывает на карьеру джанитора
я устану тыкать в каждую строчку
Вообще-то это ваш код...
Который вы вывели из первого, после того как поняли, что первый не работает
ситуация неудобная, даAlexander Troyansky wrote:Гм, какая неудобная ситуация возникла...АццкоМото wrote:и, кстати, вообще идиотское. там не то, что ошибка, там весь полет мысли указывает на карьеру джанитора
я устану тыкать в каждую строчку
Вообще-то это ваш код...
Который вы вывели из первого, после того как поняли, что первый не работает
Да тут много чего не устраивает.Alexander Troyansky wrote:гм. Да, задача не устаревает. На входе "-1". Что будет на выходе?
Да не надо стесняться. Мопед-таки ваш, это раз. Он таки работает и получился самый адекватный из немногих тогда предложенных, это два. Спор тогда был, что за 10 минут нормальную функцию преобразования строки в целое число не напишешь, это три (ипааать из меня Фандорин получился). А если напишешь, то потом будешь полдня вылавливать блох. Мне кажется, что когда проходишь "фильтр", второй вариант всё-таки предпочтиельней, чтобы показать, что действительно "в теме", это четыреАццкоМото wrote:ситуация неудобная, даAlexander Troyansky wrote:Гм, какая неудобная ситуация возникла...АццкоМото wrote:и, кстати, вообще идиотское. там не то, что ошибка, там весь полет мысли указывает на карьеру джанитора
я устану тыкать в каждую строчку
Вообще-то это ваш код...
Который вы вывели из первого, после того как поняли, что первый не работает
во-первых, я зря щитбрикал по поводу "ошибка на ошибке" - признаю
во-вторых - код не может быть моим. я смутно припоминаю разговор на эту тему (почему считаем в негативных числах) сто лет назад, но мопед стопудово не мой
я его откуда-то скопипастил. это не мой мопед.Alexander Troyansky wrote: Да не надо стесняться. Мопед-таки ваш, это раз.
да, я уже признался, что ошибки в этом коде мне приглючились. виноват, затупил и так далее. но третий раз признаваться не буду.Alexander Troyansky wrote:Он таки работает и получился самый адекватный из немногих тогда предложенных, это два.
а возвращаясь к фильтру - меня устраивает первый вариант. второй - это совсем другое. это уже в детали, не самые глубокие, но все же детали.Alexander Troyansky wrote:Спор тогда был, что за 10 минут нормальную функцию преобразования строки в целое число не напишешь, это три (ипааать из меня Фандорин получился). А если напишешь, то потом будешь полдня вылавливать блох. Мне кажется, что когда проходишь "фильтр", второй вариант всё-таки предпочтиельней, чтобы показать, что действительно "в теме", это четыре
Я бы сказал, что тогда с нетерпеньем жду по-всамделишному правильный код от вас лично, написанный если не за 10, то пусть хоть за 30 минут, раз вы 2.5 года назад схитрили, но - нет, не буду, ибо рискую быть посланнымАццкоМото wrote:так, стоп
возможно это и "мой" код. если я основывался на том, что вы, Alexander Troyansky, откомментили так: Ну если никому больше неинтересно, то вот мой вариант -- мне кажется, что решить за 5-10 минут трудно.
но это изменение чужого кода по какому-то признаку, от которого я тогда щитбрикал. очевидно, что сегодня я вижу чужой стиль (код за свой не признаю)
мы вроде выяснили, что код это таки ваш, в котором я исправил очень явные косяки, а вовсе не хитрил. с такой поправкой ваша просьба теряет смыслAlexander Troyansky wrote:Я бы сказал, что тогда с нетерпеньем жду по-всамделишному правильный код от вас лично, написанный если не за 10, то пусть хоть за 30 минут, раз вы 2.5 года назад схитрили, но - нет, не буду, ибо рискую быть посланным .АццкоМото wrote:так, стоп
возможно это и "мой" код. если я основывался на том, что вы, Alexander Troyansky, откомментили так: Ну если никому больше неинтересно, то вот мой вариант -- мне кажется, что решить за 5-10 минут трудно.
но это изменение чужого кода по какому-то признаку, от которого я тогда щитбрикал. очевидно, что сегодня я вижу чужой стиль (код за свой не признаю)
не нужно смешивать два типа интервью с кодированиемAlexander Troyansky wrote:Но хотел бы отметить, что характерные отмазки на интервью типа "я изложил идею и написал пару строчек, а вы по ходу добавили новые требования" - они не больше, чем отмазки, по-моему. Казалось бы... какие могут "новые" требования? Могут целые числа быть отрицательными? Могут. Есть пределы у целочисленных типов, которые надо проверять? Есть. Могут быть ошибочные значения ввода? Могут. Получается никаких "новых" требований нет. А если энторвьюруемый об этом не помнит или не знает, то такой же он "в теме"?
честно говоря, помню настолько плохо, что проще сказать - не помнюAlexander Troyansky wrote:Помните подход Joe Spolsky о найме "Smart and Gets Things Done"? Не буду утверждать, что он единственно верный и бесспорный, но весьма неплох. Так вот, "набросать идею" - это показать, какой я умный. А развить эту идею и напейсать функцию - это и есть "gets things done". Хотя вполне допускаю, что порой бывает иногда нанимают исключительно по первому признаку. Это как повезёт, но я бы не считал это за норму и не шитбрикал на ровном месте от чуть более детальных энторвью.
То, что написал наш дорогой Леонид Ильич, открыв эту тему, - просто не совсем удачная попытка реализации подхода Спольского.