Комментарии 84
Вот не понимаю я этой любви к всяким "хитрым" задачкам.
В 1, я бы сказал, что gmp/bcmath — единственно верное решение. Но проще было бы просто спросить работал ли человек с большими числами.
Во 2, ну ок… Надеюсь, никогда такого писать не придется в реальной работе.
3 — да, что-то уже близкое к жизни.
В 1 я бы написал что-то вроде
if (function_exists('bcadd')) {
return bcadd($a, $b);
} else if (function_exists('gmp_add')) {
return gmp_strval(gmp_add($a, $b));
} else {
return my_bigint_sum($a, $b);
}
2 — что-то подобное в смысле "конечный автомат со стеком" писать приходится нередко
Но проще было бы просто спросить работал ли человек с большими числами.
Это не совсем то, что мы хотим проверить. Для нас работал ли человек с большими числами или нет — не так важно. Важно, сможет ли он сориентироваться, если работать придётся.
Во 2, ну ок… Надеюсь, никогда такого писать не придется в реальной работе.
Зависит от конкретной области.
Например, некоторые могут не знать о существовании pcntl_fork() в PHP и успешно решать большие крутые задачи, некоторым fork может быть жизненно необходим в повседневной работе.
а вот если ко второй задаче добавить еще и между скобками текст и причем еще добавить escape charter чтобы можно было писать (\{) и это было сбалансированно, то задачку мы усложним и тут уже можно ее решение к автоматам сводить, но только зачем это в пхп ?
и еще почему во второй задаче цикл написан будто бы задачи решали программисты С
for($i = 0; $i < strlen($str); $i++)
Может быть заменено на
foreach ($str as $char)
$str = '12345678';
$strSplitted = str_split($str);
foreach ($strSplitted as $char) {}
а потом уже foreach.
да вы верно дополнили то что я написал во втором пункте сразу не сработает и тогда они правильней строки перебирали, чем конвертить строку в массив
Переходите на современные версии PHP, у нас есть плюшки!
"Считаться" — слишком громко сказано. Это же не сишный null-terminated с O(N), длина строки в PHP — O(1).
(Дикий случай с mbstring overload я, конечно, не рассматриваю).
for($i = 0, $length = strlen($str); $i < $length; $i++)
Тогда функция strlen() будет вызвана только один раз.
Можно, только в PHP смысла в этом не особо много. Оба варианта условия выхода из цикла — O(1). В вашем варианте единичка, правда, поменьше будет немножко :-) но все равно это бессмысленная микрооптимизация.
Так же, как и вариант с постраничным скачиванием страниц:
- если алгоритм достаточно объяснён и даны обоснованные расчёты, то максимально
- если в задаче просто написано "скачаю дамп", то это плохое объяснение
Под "достаточно объяснён" я подразумеваю, что, например, в случае с дампом отсюда https://dumps.wikimedia.org/enwiki/latest/ ещё требуется пояснение, как из XML-файла с разметкой в Wiki-формате будут воссозданы исходные страницы в HTML-разметке, какие мы видим на сайте Википедии.
Так что, боюсь, кто-то понял задание правильно, а вы его развернули, поэтому и так мало справившихся.
Не переживайте! Если кто-то написал 43 975 482 млн, он так же мог получить максимальный балл.
Само число для решения не играет никакой роли, как я писал выше: важно то, как будет объяснён порядок действий и необходимое время.
Хоть это и не играет никакой роли, справедливости ради, изначально в задании подразумевались именно статьи(Content pages из вашей ссылки), которых сейчас 5.5 млн. Оригинальный текст из задания: "download English version of Wikipedia (only pages with articles)"
В итоге прорешал все задачи, стесняюсь спросить, ничего страшного что только email реальный? =)
Ответил на первых три вопроса и приходится уезжать(
Если не хватило пару минут на последнюю задачу, то никто и не напишет? Нужно было решить все?
Сейчас пока рано об этом говорить.
Возможно вы хорошо решили остальное и по сумме баллов окажетесь в списке лучших.
Напишем что-то в любом случае, даже если это "отказ".
На результат не надеялся — сами задачи простые, и очевидно, что многие смогут их решить, так что надо было как-то подойти серьезно. Но отсутствие какого-либо фид-бэка совсем, конечно, огорчает. Получается, что время потрачено совсем впустую.
Тут вообще вспоминаются и довольно курьёзные и смешные случаи, когда народ возится, находит оптимальное решение, когда задача решается мгновенно или достаточно быстро. Но начальству нужны солидные временные затраты. Так ребятам пришлось в основном цикле вычислений выполнять временные задержки. Тогда боссы уходили с проверки с чувством «глубокого удовлетворения». Вот так.
Кстати, последние, скандальные новости про какие-то версии iPhone, где производительность аппаратов специально занижалась, как раз из этой серии
Работодатель зачастую действует просто. Задают к примеру вопрос, знаешь ли ты какой-то там интерфейс в какой-то библиотеке (которых зачастую сотни). Не знаешь — всё, ты нам не подходишь! Т.е. вопрос не ставится, сможешь ли ты решить задачу и сколько времени тебе потребуется. Всё ставится с ног на голову!
Если с вами так поступил работодатель — приходите к нам. :) У нас противоположные ценности: мы впервую очередь обращаем внимание на способность адекватно мыслить, а не на специфические теоретические знания.
Насколько я понял, когда регистрировался здесь, что тут площадка для освещения технических, технологических проблем.
Технический разбор технических задач — разве это не техническое?
Эти три задания — это полный набор фильтров кандидатов или это толко нулевой этап "проверки на адекватность"?
О, а почему @fisher-овский тест (http://php.feedme.ru/) не используете? Он, как по мне, явно намного более адекватен вашим требованиям, чем очень простые задачки из пп.1,2 (хотя третья нормальная). Или его уже никто пройти не может? :-)
Те, кто его круто прошёл, уже были на наших интервью. Но сам тест никто особо не пиарит, потому потока кандидатов с него нет и, как мне кажется, никогда и не было.
но вот некоторые функции, я за 8 лет в пхп ни разу не видел
Можете привести функции, которые вас смутили?
Это только примеры решений — можно обойтись без конкретных функций, применённых в них, или заменить другими. В любом случае, список будет полезен: мы стараемся приводить наиболее понятные решения — ваш фидбек помог бы этому.
Не проблема!
Можно было, например, прислать такое решение без strrev(), rtrim() и intval(). Мы бы его оценили максимальным баллом.
Для нас всё именно так, как вы говорите: в первую очередь важно умение решать задачи, а не энциклопедические знания.
function sum_str($str)
{
list($s1, $s2) = explode(' ', $str);
$l1 = strlen($s1);
$l2 = strlen($s2);
$result = "";
$rest = 0;
for($i = 1; $i <= max($l1, $l2); $i++) {
$d1 = $s1[$l1 - $i] ?? 0;
$d2 = $s2[$l2 - $i] ?? 0;
$sum = $d1 + $d2 + $rest;
$rest = $sum > 9 ? 1 : 0;
$result = ($sum % 10) . $result;
}
if ($rest > 0) {
$result = $rest . $result;
}
return $result;
}
А можно ли так просто делить задержки на 1000 — что с производительностью самой Википедии?
Всегда считал, что программирование это прежде всего мыслительный процесс. И заказчик оплачивает решение его проблемы, а не количество кода и время сидения на стуле и долбания по клаве.
Ну и вилка в оплате более 50% в описании вакансии с головой выдает неадекватного работодателя от которого надо бежать, как от чумы.
А почему с вилкой неадекватно? Можно вводить градации вида джуниор-мидл-сеньор, а можно напрямую оценивать в условных единицах. Не вижу принципиальной разницы.
Если вам нужно три специалиста с разным уровнем подготовки, то потрудитесь создать три конкретные вакансии с определенными для каждой уровнем требований и зарплаты.
Никакой адекватный сеньор не кюнет на вакуху "от тарелки доширака до горы золотые".
Вы получите только неадекватных джуниоров мечтающих о золотых горах.
Всегда считал, что программирование это прежде всего мыслительный процесс
Не нужно ничего считать. Покажите ваши проекты. Не намыслили еще? Очень жаль, мы вам перезвоним.
Фикс. Перепутал темы. Прошу извинения.
Prelude> sum . map read $ words
go [] string where go [] [] = True go acc (x:xs) | x elem "([{" = go (x:acc) xs | x elem ")]}" && not (null acc) && head acc == x = go (tail acc) xs | otherwise = False
- Database_download
Лидер мирового рынка по виртуализации и автор самой популярной в мире виртуальной машины — Parallels. Они на собеседовании специально уточняют видел ли кандидат ту или иную задачу раньше. Им важно проверит ькак работает мозг, а не зубрежка.
Мы в Баду, кстати, тоже так делаем. Это, правда, не отменяет того факта что после простых задач мы обычно спрашиваем задачи на посложнее, в обсуждении которых можно подчас сильно отойти от темы и даже если кандидат её уже решал, обсуждал или видел решение в интернете, это не гарантирует 100% успех.
И вообще, реально ли опытному перловику получить оффер?
На Perl проходить тест, к сожалению, нельзя.
В новом тесте на написание PHP-кода всего 2 задачи. Если вы пишете на PHP хотя бы на базовом уровне и имеете хороший опыт с Perl, то у вас есть все шансы. Каких-то сильно специфичных для PHP вещей мы не спрашиваем в тесте.
Это было сделано намеренно: мы решили оставить "близкие" к PHP языки, чтобы была возможность для прохождения тем, кто программирует на чём-то другом, но готов перейти на PHP.
На каком-то этапе Perl выпал из поля зрения, сейчас уже сложно сказать почему.
После анонса уже не будем менять список языков, чтобы те, кто уже прошли, и те, кто только собирается, были в равных условиях.
Можно было бы переключаться, проще было бы пробежаться, сразу написать решения для простых, и сосредоточиться на чуть более сложных. А так, увы. Жалко немного.
Я второй раз в жизни на хакерранке. Но оптимальная стратегия для таких тестов уже понятна: заходим с левого аккаунта, читаем условие всех задач и спокойно их обдумываем. Потом в режиме эмуляции творческого процесса пишем решения под реальным аккаунтом.
… потом заходим с реального аккаунта и получаем совсем другой набор задач из пула. :)
Если там один набор задач на всех — это fail.
А смысл так делать, дальше же будет очный этап.
$d1 = $s1[$l1 - $i] ?? 0;
$d2 = $s2[$l2 - $i] ?? 0;
Условие всегда будет выполняться. Нужно добавить проверку отрицательных индексов. Например так:
$o1 = $l1 - $i;
$d1 = $o1 >= 0 && $s1[$o1] ? $s1[$o1] : 0;
$o2 = $l2 - $i;
$d2 = $o2 >= 0 && $s2[$o2] ? $s2[$o2] : 0;
Описательная задача интересная, но на описание всех проблем и продумывание решений времени не оставалось.
Поэтому совет тем кто давно в таком режиме ничего не решал: набейте руку на hackerrank сначала немного, чтобы привыкнуть и потом не паниковать в условиях нехватки времени. Тогда 4 задачи с тестами решите быстро и останется достаточно времени на обдумывание описательной задачи.
Не вдаваясь в бытовые подробности (логистика, питание), скажу что все было на хорошем уровне. Впечатления от общения с работниками и ребятами которые проводили собеседования исключительно положительные. В общем, хоть и прошел все круги но оффер не получил (а второе место, как известно, самое обидное) о проделанном пути не жалею, было здорово! Вспоминая негативные комменты о собеседованиях в баду прочитанные ранее, можно сказать испытал легкое недоумение :)
Единственный минус — фидбек почему то так и не получил, ну и ладно, обязательно попробую свои силы через пол года!
Разбор PHP-задач и новый тест. Как получить оффер в Лондон в феврале