Ры (pbl) wrote,
Ры
pbl

Ааа ржунимагу! Израильский диверсант прислал решения моих задачек. Всех. Еще пишет: "Чо так просто?" Задачки у меня, блядь, гениальные, как вопросник соловьевского стряпчего: "Писец - высохший сутяга с желтым, изрытым оспой лицом, вытянутым вперед и по-лисьему заостренным, оказался мастером своего дела: он сочинил восемьдесят шесть вопросов, расположив их с необычайным коварством: будучи последовательно заданными любому человеку, они любого превращали в разбойника, совершителя бесчисленных злодеяний, из которых ночные грабежи по дорогам и детоубийства были еще не самыми худшими".

Gory details для собратьев по несчастью и сочувствующих под катом.

Задачки у меня недаром оформлены как простейшие таски в нашем багтрекере. "Написать функцию, называющуюся так-то и так-то, получающую такие-то параметры и возвращающую нечто". Первое, что я делаю с любыми решениями - засовываю их в автоматическую тестилку as is. И ржу. Почти всегда ржу.

С этой частью полосы препятствий диверсант справился наполовину. То есть, функции назвал, как требовалось, параметры берет как надо. Только функции ничего не возвращают. Никогда. Вообще. Они выводят. Ну и вокруг функций зачем-то нарисован нахрен не нужный хытыымэл. Бла бла бла. У нас можно этих ваших хытымылов вообще не знать. Без них хватает чем заняться.

Ну да ладно, подправил, сунул в проверялку.

Первым делом проверялка высрала примерно сто тыщ нотисов.

Хотя в интре к заданиям русск английским языком написано: будем проверять в режиме предельного концлагеря. E_ALL | E_STRICT, то есть, или аналогичная конфигурация, если решения не на похапе.

Тесты сфейлились чуть менее, чем все, и тогда я сел читать, собственно, код.

Ооооооо.

Самое ужасное - за всем этим есть живой человеческий мозг, и даже не из худших. Но нюааааансыыыы!

1.

В первой задачке "for bonus points" предлагается найти линейный алгоритм вместо квадратичного. Функция пытуемого радостно гадит в стдаут надписями о том, какая она крутая, и как бонусные очки сполна заслужила. А вот если ее прочитать, то в ней обнаруживается незамысловато заныканный внутренний цикл.

Алгоритм, таки да, квадратичный.

На этом месте я почувствовал себя сцукой-преподом, имеющим дело с нерадивым студентом. Тупой же препод не станет код читать, ага-ага? Хуй вам, товарищ израильский агрессор. На такой мякине и палестинского террориста не проведешь, а я собаку съел на чтении чужих диффов.

Еще интереснее вышло, когда я внимательнее посмотрел на результаты тестов. Я-то сначала решил, что алгоритм правильный, поскольку в правильных решениях увидел 1.1, 1.2 и т. д. Но это базовые сэнити чеки, а вот тесты на правильность посложнее алгоритм сфэйлил. Искать ошибку не стал, 0/10.

2.

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

Что было бы простительно и, парадоксальным образом, даже похвально, если бы его самопальный парсер был лучше встроенного. Но он даже кавычки как часть синтаксиса не опознает.

К тому же в результирующем массиве есть какие-то артефактные индексы с NULL'ами в валюях, источник которых я искать уже тоже не стал.

Ну и, естественно, требование метать эксепшны при любых фэйлах было тупо проигнорировано. 3/10.

3.

А вот в третьей задачке как раз и надо было написать примитивный (в страничку) рекурсивный парсер.

Парсер израильская военщина асилила, но не рекурсивный. Да еще снабдила комментарием - мол, вроде не надо же?

Хотя в задании русск английским языком написано - enclosures may be nested. А для самых тяжелых поступающих еще и приведена пачка примеров, не оставляющих места для сомнений.

В общем, как-то оно все работает, но делает совершенно не то, что надо. Ладно хоть не на регэкспах. 2/10.

4.

В четвертой задачке есть некие n и m. Есть очевидный алгоритм O(nm). Дана подсказка - мол, бонус за алгоритм, не зависящий от n. (O(2m) - что при малых m просто чудесненько.)

Кандидат написал очевидный алгоритм (который тесты пройти не может принципиально, ибо они все с огромными n), а потом его, видимо, осенило. И он (в той же функции) написал еще и частный случай второго алгоритма для m = 3. И все правильно написал. Но почему тогда не общий? У меня вот как раз с m = 3 тестов вообще нет. Оп-па.

И зачем было снабжать самодовольным комментарием - вот, мол, суперидеальный алгоритм, в нем ВООБЩЕ ни одного цикла нет!!1! Правда ж я крут?

Циклов-то в имплементации нет, только алгоритм все равно O(2m). Абыдна, да? 5/10.

5.

Ооо, мемоизирующая фибоначча. Сколько ржаки над ней пролито. Она на знание слова "мемоизация" / умение пользоваться гуглом. Причем с уклоном в сторону гугла.

Тут израильский спецназ блеснул по полной программе.

Фибоначча, то есть, считается правильно. Но.

Во-первых, запоминается только результат последнего вычисления. То есть, F(100); F(1); F(100); будет работать как с простым итеративным алгоритмом.

А во-вторых! во-вторых!!1!

Нет, мочи нет, сча проржусь...

Во-вторых, даже эта "мемоизация" - одна видимость.

Кэшируемые значения никогда не используются.

Грандиозная туфта, в общем. 0/10.

6.

А это array_reduce(). Фолд, то есть.

Слово "колбэк" в тексте задания проигнорировано. Море удивления - "Почему так просто?" То есть, ну. Все равно просто, конечно. Но задание-то не выполнено.

Уж о том, что оно считает с ошибками, не стоит и упоминать. Потому что массив у нас всегда начинается с первого индекса. (Дорогой динозавр, не лейте яд на раны за насчет разрушающего воздействия визуального васика - и так страдаю...)

0/10.

Итого 10/60. Для сравнения, уплывший из моих волосатых лап барсук решил только две задачки. Зато правильно, эффективно и по спецификации. Да еще и быстро. За что и получил, образно говоря, 20/20. И на безрыбьи взяли его преохотно, еще и подрались за честь воспитывать...

Ну вот как-то так мы и живем. *sigh*
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 3 comments