Pull to refresh

Comments 16

С задачей про лабиринт были проблемы с тестированием (в конце контеста об этом сообщили и пересчитали результаты) и я потратил много времени на эту задачу. Конечно сказалось отсутствие опыта участия в подобных соревнованиях и правильном распределении усилий на задачи.
В последствии дорешивал задачи, но так и не справился с лабиринтом — видимо всё ещё не поправили.
Очень интересно, с чем же связана проблема и можно ли решить задачу на сто процентов в текущих условиях.
Как и написано в решении, задача «Лабиринт» тестировалась скриншотами. В тесте выставлялся определённый порог с количеством пикселей, на которые присланное решение могло отличаться от авторского (антиалиасинг, мелкие неточности). Сразу было понятно, что абсолютно точное совпадение почти невозможно. Мы внимательно наблюдали за присылаемыми решениями и в какой-то момент поняли, что хорошие решения есть, но они не проходят тест так как планка установлена слишком высоко, тогда мы снизили порог и пересудили все присланные решения. Задача вполне решаемая, но надо было быть очень внимательным к деталям. Большой опыт вёрстки здесь бы очень пригодился.

В первой задаче специально имена подбирались для получения нецензурной регулярки? :)
Спасибо, было интересно оценить такого рода "олимпиадные задачи". Лабиринт понравился особо: некоторое время назад я пилил личный проект (своего рода point-and-click-квест) на Electron + React, и само понимание, сколько всего можно сейчас сделать, по сути, на чистом DOM, разглядел, можно сказать, на практике.

Хм, как-то странно, когда решал задания, то отчетливо помню, что задача в №3 имела совершенно другую картинку, чем та, которая приведена в статье. Как мне помниться, картинка представляла собой полоски под наклоном.
В квалификационном раунде было несколько вариантов. У заданий в разных вариантах были разные условия, но одна суть.
В Задаче 7. Здесь могла быть ваша реклама, была ошибка. Достаточно было сделать абсолютное позиционирование в правый нижний угол, и не смотря на то что текст перекрывался тест проходил успешно.
А в логотипе Яндекс такси (или что то похожее на него) тень под прямоугольником можно было делать хоть под 45 градусов всё равно тест проходил успешно.
В следующий раз внимательней пишите автотесты)

Спасибо за обратную связь! В будущем постараемся лучше тестировать алгоритмы проверки.


Надеюсь, вы не использовали возможность подсунуть некорректное решение и получили удовольствие, решив задачу полностью ;)

Есть возможность предоставить тестовые наборы данных для задач?

Мне попалась третья задача, которая совершенно не сравнима с разобранной задачей по сложности.
Я уже не помню точно, но картинка была примерно такая: прямоугольник с скруглёнными внутрь углами, внутри кайма красного цвета, несплошная и не dotted браузеров.
И белый круг слева по центру, примерно как на изображении:

Ждал разбора исключительно чтобы понять, каким образом сделать такое на одном лишь div.

Если фиксированы размеры, то от кружка (псевдоэлемент) белые тени раскидываешь по углам. А вторым псевдоэлементом с dashed границей прямоугольник внутри.

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

Честно говоря, финал разочаровал своими задачами. В отборочном они были подобраны гораздо лучше — все имели отношение к фронтэнд программированию, не требовали знаний сторонних сервисов, легко тестировались в локальном окружении разработчика и было понятно, что решение будет по минимуму зависеть от проверяющего стенда.
В финале же получился легкий бардак, который был виден даже по чату. Ощущение сложилось, что отборочный составляли энтузиасты, а финал делался «из под палки» :).

Задача 7 — вам уже выше написали, тестовая система пропускала вообще левые решения. Можно было сделать text-direction: rtl;, отступ первой строке, спозиционировать кнопку абсолютом и не было бы даже наложения текста, но решение сразу валится на тексте «ABC.» т.к. rtl точку вперед вынесет. В-общем задаче явно не хватало проверочных тестов.

Задача 8 — в поставленной формулировке совсем тривиальная. Ну куда ж там ограничение в 10кб, гораздо интересней было ограничить количество элементов.

Задача 9 — вообще про node.js :) Не оно конечно знать полезно и для работы надо, но тем у кого бекендом на проектах выступает пхп тут было сложнее. Главный же минус опять в тестовой системе и постановке задачи.
  • Надо разобраться с сервисом ранкит (ничего сложного но пяток минут отдай).
  • 2 и 3 тест имели неоднозначность в плане порядка проверок — если мы еще до вызова .connect() могли проверить отсутствие номера в памяти то зачем дергать этот метод? (а тест проходился только если приходила ошибка подключения, даже если номер отсутствовал).
  • В последнем тесте легко понять в чем состоит задача, но тут как раз имеем проблему с теми кто с нодой не работал — пхп не сохраняет состояние между вызовами, т.е. надо знать принцип работы ноды. Решается кстати глобальной переменной, я конечно понимаю что такое решение попахивает, но здесь же олимпиада на скорость, а не построение хорошего кода :)


Задача 10 — отдельная песня. Я думаю авторы сами пожалели, что добавили ее :) Сама задача интересная, но стенд ведет себя просто непредсказуемо. Я например вымерял все пиксель в пиксель, решение проходит больше половины тестов. Добавляем отступ снизу — решение проходит опять больше половины тестов причем закрывает все непрошедшие в первый раз :) Скрестить два варианта в один мне так и не удалось (я уже думал добивать прямоугльные игровые поля до квадратов отступами, но это влияет лишь на часть тестов и полностью все 100% так и не закрывает). Потратил кучу времени из интереса, но в итоге плюнул так и не добившись результата.

PS За конкурс авторам большое спасибо. И пусть впечатление от финала смазалось, в целом получилось весьма интересно.
тестовая система пропускала вообще левые решения

К сожалению, проверки отработали не совсем корректно. Там довольно сложная логика. В будущем постараемся больше времени уделять тестированию.


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


Задача 8 — в поставленной формулировке совсем тривиальная.

Интересно, каким было ваше решение. Расскажите подробнее.


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

Ограничение в 10кб нужно, чтобы участники не генерировали верстку каритнки отдельными пикселями. А для чего предлагаете ограничение на количество DOM-элементов?

У 8-ой задачи решение в лоб — сверстать все линии по отдельности, мне кажется в 10 кб вполне можно уложиться. Гораздо интереснее решить минимально возможным числом элементов — как это было на отборочном туре, в задаче, где надо только один див использовать.
Интересно, каким было ваше решение. Расскажите подробнее.

Я отправил решение с 11 элементами (11-ым был враппер, но его может body заменить). Вообще легко решалось с 8-ю элементами. Но ради интереса в итоге сделал используя всего 5 дивов — jsfiddle.net/IvAndrew/ro3d08we.

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

Ограничение в 10кб нужно, чтобы участники не генерировали верстку каритнки отдельными пикселями.

Не очень понял, что вы под пикселями подразумевали? Я ради интереса попробовал решение с js (генерация канвас или добавление кучи дивов), но стенд не пропускает. Если же должен пропускать, то такое решение легко укладывается в 10 кб — картинка представлена в виде карты с квадратами 10*10.
С canvas — jsfiddle.net/IvAndrew/nmtqyb16
C генерацией кучи дивов — jsfiddle.net/IvAndrew/gkxvu5on
Под пикселями подразумевал квадраты 10х10 (или любого другого размера), сгенерированные по картинке. Этот вариант не подходит под формулировку «сверстать макет», поэтому решения с JS стенд не пропускает, а нагенерированные решения не помещаются в лимит 10кб.

Про решение с использованием минимального количества элементов — интересная идея! Будем иметь в виду в будущем.
UFO just landed and posted this here
Sign up to leave a comment.