Ры (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*
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments