Поиск удаленной работы. Опыт.

Alexey Mezenin

Новичок
Второй этап 3 теста на 1,5 часа (может путаю по времени, но точно 3 штуки) на codility, тесты покруче чем перевернуть бинарное дерево, но в целом решаемы. (базовые знания алгоритмов)
В этих тестах также учитывается скорость работы твоего решения (perfomance tests), как и в открытых тестах на codility?
 

Alexey Mezenin

Новичок
Что-то я посмотрел решения на пару тестов, решения - одни и те же везде (я имею ввиду те, что на 100/100 баллов), т.е. копипастом гуляют по сети, кто-то даже за свое выдает и ленится изменить хотя бы название переменной. Человек обсирает подход codility, как я понял, это оригинального решения, приведенного ниже. Также пишут, что по сути идет проверка матана, а не алгоритмов:

I don't like too Codility approach. I worked on critical real-time systems sold all over the world for rail, automotive and avionics things tested with every possible mean by TUF, FAA and external testers on object code running and not running, high load (1000reqs/sec systems). May be i'm dumb, my be i don't have degree in math (that's what they are testing imho), but i'm not able to do these kinds of tests...
Как-то хочется согласиться с этим, видя подобные решения:

Есть массив, где от 1 до N идут целые числа, но одно пропущено и нужно узнать это число.

Код:
[2,3,1,5]
Как узнать? Я по-своему, "вебпрограммерскому" думал нужно пройтись по массиву и каждое число проверить на наличие в массиве. Решение рабочее, но неверное. Оно, оказывается, вот так надо:

Код:
$N   = count($A);
$sum = ($N + 2) * ($N + 1) / 2;
for($i = 0; $i < $N; $i++){
    $sum -= $A[$i];
}
return intval($sum);
Где этому "($N + 2) * ($N + 1) / 2;" учат?
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
чтот там перемудрили
PHP:
return ( min($a) + max($a) ) * count($a)/2 - array_sum($a);
сумма арифметической прогрессии (9 класс)
 

Alexey Mezenin

Новичок
чтот там перемудрили
PHP:
return ( min($a) + max($a) ) * count($a)/2 - array_sum($a);
сумма арифметической прогрессии (9 класс)
Я после 9го на 5 экзамены сдал по алгебре и геометрии, но такого в у пор не помню. :)

На codility не проходит.

Код:
function solution($a) {
    return ( min($a) + max($a) ) * count($a)/2 - array_sum($a);
}
 

WMix

герр M:)ller
Партнер клуба
ошибся в count($a), 1 число же потеряно
Код:
function solution($a) {
  return ( min($a) + max($a) ) * (count($a)+1)/2 - array_sum($a);
}
 

Alexey Mezenin

Новичок
ошибся в count($a), 1 число же потеряно
Код:
function solution($a) {
  return ( min($a) + max($a) ) * (count($a)+1)/2 - array_sum($a);
}
Вот также как здесь у меня. Код из примера проходит, потом 4 теста - нет:

https://codility.com/demo/results/trainingRA8AHT-RWQ/

Подскажите кто-нибудь как можно посмотреть их код, которым они твой код тестят?
 

Adelf

Administrator
Команда форума
Не надо думать что вам на какую-то реально сложную математику там задания дают. там на знание обычной математики + смекалку. Плюс еще работа с границами int. Если не можешь решить - значит чего-то не хватает.
 

Adelf

Administrator
Команда форума
В этой задаче дано четкое условие. Диапазон чисел - от 1 до N. Одно пропущено. min и max считать не надо. Ибо пропущены могут быть 1 или N
 

Adelf

Administrator
Команда форума
Внимательное прочтение условий задачи кстати очень хорошо характеризует программиста.
 

Alexey Mezenin

Новичок
Не надо думать что вам на какую-то реально сложную математику там задания дают. там на знание обычной математики + смекалку.
Ну вот честно, до такого без знаний не додумаешься "$sum = ($N + 2) * ($N + 1) / 2;". WMix говорит, что его пример из 9го класса, а вот этот откуда (9ый, 11ый, высший матан)?

Плюс еще работа с границами int. Если не можешь решить - значит чего-то не хватает.
Границы int я знаю, но ты прав - мне чего-то не хватает. Не смотря на то, что я твердо убежден, что матан и алгоритмы веб программисту не нужны, я был бы очень рад что-то почитать и заполнить пробел, но никак не могу выяснить что именно. :) Матан читать? Алгоритмы Скиены? Еще что-то?
 
Последнее редактирование:

Alexey Mezenin

Новичок
В этой задаче дано четкое условие. Диапазон чисел - от 1 до N. Одно пропущено. min и max считать не надо. Ибо пропущены могут быть 1 или N

Внимательное прочтение условий задачи кстати очень хорошо характеризует программиста.
...which means that exactly one element is missing :)
 

Adelf

Administrator
Команда форума
Алгоритмы не помогут. матан тоже. Я тебе давал в личке ссылку на сайт с задачами. там надо тренироваться. это долго, но по-другому я не знаю как этому "научиться".

Арифметические последовательности проходят в школе. Если ты их не проходил, то либо прогулял, либо учился в школе для умственно отсталых.
 

Alexey Mezenin

Новичок
Алгоритмы не помогут. матан тоже. Я тебе давал в личке ссылку на сайт с задачами. там надо тренироваться. это долго, но по-другому я не знаю как этому "научиться".
Там задачки такие же как на Codility. Я ссылку приберег, обязательно мозг погоняю после codility.

Арифметические последовательности проходят в школе. Если ты их не проходил, то либо прогулял, либо учился в школе для умственно отсталых.
Выше писал:

"Я после 9го на 5 экзамены сдал по алгебре и геометрии, но такого в у пор не помню."
А еще, я на мат. олимпиаде 3 место по городу (100 тысяч.) занял в 3 классе. :)

Видимо пора отбирать у кого-то учебник и повторять курс 9го класса.
 

Alexey Mezenin

Новичок
только вроде как 7ой
9ый, Adelf выше ссылку кинул на материал.

Я вот только не пойму, неужели 30-50 летние мужики помнят материал 9го класса (где они учились 15-35 лет назад)? При этом с легкостью вспоминают про сумму арифметической прогрессии, видя задачу с поиском числа в массиве. Сомневаюсь, что кто-то повторял материал, ибо PHP язык веб-дева и подобные задачи там не встречаются, за ну очень редкими исключениями. Мистика какая-то.
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
9ый, Adelf выше ссылку кинул на материал.

Я вот только не пойму, неужели 30-50 летние мужики помнят материал 9го класса (где они учились 15-35 лет назад)? При этом с легкостью вспоминают про сумму арифметической прогрессии, видя задачу с поиском числа в массиве. Сомневаюсь, что кто-то повторял материал, ибо PHP язык веб-дева и подобные задачи там не встречюется, за ну очень редкими исключениями. Мистика какая-то.
Так ищут не PHP-программиста, а программиста ;)
 

fixxxer

К.О.
Партнер клуба
Я вот только не пойму, неужели 30-50 летние мужики помнят материал 9го класса (где они учились 15-35 лет назад)? При этом с легкостью вспоминают про сумму арифметической прогрессии, видя задачу с поиском числа в массиве.
А зачем что-то помнить? Я не помню, но сообразить можно за 5 минут тупо на бумажке с карандашом.
Числа от 1 до N, ну возьмем пример от 1 до 6
1 + 6 =
2 + 5 =
3 + 4 = 7

всего 3 пары, очевидно число пар равно половине размера массива. Пример с 5 показывает что и с нечетным размером логика работает. Дальше с вычитанием очевидно.

Вообще на кодилити практически все задачки решаются на бумажке с карандашом, надо заметить какой-то принцип, симметрию, признак или вроде того, сам код банальный. То, что сразу говорится ожидаемая вычислительная сложность, это само по себе уже большая подсказка. Где-то это просто, где-то (в большинстве случаев) надо голову поломать.
 
Последнее редактирование:
Сверху