|
![]() |
#1 |
Участник
|
Цитата:
а почему вы считаете, что спрашивают подобные задачи и не спрашивают паттерны? |
|
![]() |
#2 |
Участник
|
Поэтому самый лучший способ заполучить нужную работу - запросить меньше денег, чем объявил работодатель.
Потому что все равно ты не догадаешься, что у работодателя в голове сидит золотое сечение ![]() Последний раз редактировалось Ace of Database; 10.02.2017 в 15:43. |
|
|
За это сообщение автора поблагодарили: AlexSD (3). |
![]() |
#3 |
Участник
|
Цитата:
Панкуете, ребяты... Это все равно как не знать героев мультфильма Ну, погоди. Или Тома и Джерри. Конечно, возможно, что не знают. Ничего плохого в этом нет. Просто, если человек не знает как связан ряд Фибоначчи и золотое сечение... Это характеристика кандидата. Прочь грусть, прочь уныние, прочь тоску... )))) |
|
![]() |
#4 |
Участник
|
Я не думаю, что тот же EVGL знал что это такое, когда в Клумбе начинал программировать. И я не думаю, что это характеризует его как плохого разработчика или консультанта.
|
|
![]() |
#5 |
Участник
|
Это свободная страна - пусть спрашивают что хотят, хоть дату смерти Пушкина (сегодня 180 лет, кстати, с этой печальной даты).
Если хотят взять светлую голову - стажера, то данная задача - прекрасный вариант. Как и вопрос "сколько заправок в Челябинске". Есть ищут человека со знанием системы, я бы задавал несколько иные вопросы, исходя из собственного опыта. |
|
![]() |
#6 |
Участник
|
Прекрасный пример ИЛИ-ИЛИ логики. ))))
Кстати, тоже отличный маркер и характеристика кандидата. На самом деле, в свободной стране никто не запрещает спросить И эту задачи, И задать иные вопросы. |
|
![]() |
#7 |
Участник
|
С одной стороны, ряд Фибоначчи у меня вызывает доверие - потому что он состоит только из целых чисел (судя по начальному тексту в википедии).
С другой стороны, ряд Фибоначчи вызывает у меня недоверие - потому что он таинственным образом связан с золотым сечением, и всякими таинственными оговорками Маззи о применимости целых чисел. Резюме: я бы на собеседовании заявил бы об этом дуализме ряда Фибоначчи, и что я осознал этот дуализм в беседе с моим испытателем (или как называется тот, кто главный на собеседовании ?). И осторожно намекнул бы, что хочу чуть меньше денег, чем объявлено в вакансии. |
|
![]() |
#8 |
Участник
|
можно.
а можно заявить об ограниченности представления целых чисел в компьютере. и о том, как эту ограниченность можно преодолевать... нужно ли, в какие сроки, какой ценой. видите, вот так и проявляется "хорошесть" кандидата, его система ценностей )))) |
|
![]() |
#9 |
Moderator
|
Цитата:
![]() |
|
|
За это сообщение автора поблагодарили: mazzy (10). |
![]() |
#10 |
Участник
|
Да, прости. Так как обсуждение попалось мне на форуме по Дакс, я имел неосторожность предположить, что данная задача попалась кандидату на разработчика именно этой системы. Есть просто на программиста, то пример - отличный.
Цитата:
Чем данные вопросы отличаются от вопроса сколько заправок в городе? Цель одна и та же - посмотреть цепочку рассуждений. И желание это делать. |
|
![]() |
#11 |
Участник
|
Написал джоб, который генерирует первые 10 тысяч чисел фибоначчи. Длина 10-тысячного числа составляет около 2000 цифр. Вообще, приблизительная длина любого n-ного числа фибоначчи составляет примерно n/5 цифр. Так как надо сложить 1+2+3+5+8 = 5 чисел, чтобы к числу прибавился новый разряд.
Джоб у меня отработал примерно за 20 минут. На генерацию одного n-ного члена ряда, у которого n близко к 10000, уходит примерно 0,2 секунды. На генерацию первой тысячи элементов ряда уходит 5-10 секунд. Поэтому для удобства тестируйте этот джоб для 1000 элементов. Если переписать этот джоб на языке C++ и пользоваться указателями и массивами, то быстродействие увеличится в тысячи раз. И можно будет вычислять миллионные члены ряда Фибоначчи. X++: static void Job119(Args _args) { int fibonacciSize = 10000; //сколько надо получить чисел Фибоначчи str x; str y; str total; int i; SysOperationProgress p = new SysOperationProgress(); str sumStrings(str _a, str _b) { str ret; int result; int digit; int j; int a; int b; int n; ; for (j = (strLen(_a) > strLen(_b) ? strLen(_a) : strLen(_b)); j >= 1; j--) { n ++; if (strLen(_a) >= n) a = str2int(subStr(_a, strLen(_a) - n + 1, 1)); else a = 0; if (strLen(_b) >= n) b = str2int(subStr(_b, strLen(_b) - n + 1, 1)); else b = 0; result = digit + a + b; digit = result / 10; result = result mod 10; ret = int2str(result) + ret; } if (digit) ret = int2str(digit) + ret; return ret; } ; p.settotal(fibonacciSize); p.update(true); x = "0"; y = "1"; info(x); info(y); while (fibonacciSize) { p.incCount(); p.update(true); fibonacciSize --; total = sumStrings(x, y); info(total); [x, y] = [y, total]; } } Последний раз редактировалось Ace of Database; 11.02.2017 в 15:59. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#12 |
Участник
|
Цитата:
Цитата:
еще не все из x++ выжато. Предложения по улучшению: 1. вполне достижим результат "меньше 1 минуты". (для измерения скорости можно отказаться от SysOperationProgress) 2. "j = (strLen(_a) > strLen(_b) ? strLen(_a) : strLen(_b))" - фи, моветон. и strlen вычисляется дважды для каждой строки. лучше j = max(strlen(_a), strlen(_b)) 3. операции со строками очень медленные. и сильно нагружают сборщик мусора. лучше использовать массив 4. сложение огромных чисел - это отдельная задача для собеседований ))))) там главная хитрость - оперировать не отдельными цифрами, а группами цифр. в одном int32 легко можно хранить до 9 полноценных разрядов (числа до +2147483647). Что в совокупности с массивом вместо строки, может дать увеличение производительности раз в 10. а ведь есть еще int64 и bigint ))) 5. деление - очень дорогостоящая операция ))) когда исчерпаете варианты оптимизации, попробуйте заменить деление сравнением и сложением/вычитанием. Дополнительный цикл не понадобится ))) 6. особенность x++ - вызов вложенной функции в X++ выполняется непропорционально долго по сравнению с вызовом обычного метода. попробуйте переделать, сами удивитесь. 7. особенность x++ - Конейнер - это сериализация-десериализация. Контейнер очень дорогостоящая операция для банального swap. Попробуйте избавиться от контейнера. ))))) и еще: будете играться с типами int32, int64 попробуйте разные режимы - на клиенте/на сервере. со включенным CIL и с выключенным. это тоже особенность X++ Последний раз редактировалось mazzy; 11.02.2017 в 18:36. |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
![]() |
#13 |
Участник
|
ок, попробую вместо строк использовать массив int64. В ближайшее время, когда почувствую вдохновение
|
|
![]() |
#14 |
Участник
|
|
|
![]() |
#15 |
Участник
|
Числа Фибоначчи никогда рекурсией не считают. Это задачка первого курса программирования.
https://www.youtube.com/watch?v=OQ5jsbhAv_M - Лекция в MIT по алгоритмам, в которой эта задача разбирается. Это один из самых популярных вопросов на собеседованиях на позицию разработчика (за пределами России, понятно). |
|
![]() |
#16 |
Участник
|
|
|
![]() |
#17 |
Участник
|
Начался флуд как обычно.
Действительно, для чего изобрели рекурсию - исключительно, чтобы считать ей числа Фибоначчи! Больше то нечего ей считать. Вы модерато форума разработчиков. Вы Кнута "Искусство программирования" почитайте как-нибудь на досуге. А то получается, что вы оспариваете анналы теории алгоритмов, которые преподают во всех университетах последние лет 30-40 наверное. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#18 |
Участник
|
|
|
![]() |
#19 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Diman (1). |
![]() |
#20 |
Участник
|
Опс. Спасибо. Выделил в отдельную ветку.
|
|