Как стать автором
Обновить

Комментарии 55

Как выполнить тестовое задание если у меня мак?

Даже так, как выполнить задание, если нет возможности проверить в VS 2013? У меня на всех доступных компах — Linux :-)

НЛО прилетело и опубликовало эту надпись здесь
Здравствуйте, при получении задания мы автоматически cбилдим Ваш код на двух платформах — Windows msvc2013 и Linux gcc 5.4.0, в случае фейла, вы получите лог сборки, сможете исправить и прислать код еще раз, до победного success. Этакий удаленный CI. Удачи!
Можно использовать язык в рамках стандарта, те. C++ и ещё STL.

в рамках какого стандарта?

С++11
Можно использовать C++11 регулярки? Ведь они входят в 11 стандарт.

Можно использовать всё, что скомпилируется на MSVC 2013 или gcc 5.4.0 из коробки.

Выглядит интересно, но многое непонятно. Зачем VS2013, почему не к стандарту языка привязаться? Пользовался пару раз этой средой, винды нету, про особенности реализации и поддержки стандартов не в курсе. Какие ограничения по времени, памяти, входным данным? От этого же здорово зависит, каким будет решение. На видео показаны лекции? Кроме них какие-то материалы выдаются?

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


Было весьма неприятно узнать об этом, имея на руках готовое решение, сделанное с расчётом на оценивание человеком: с Boost.Coroutine и Boost.Range, разбиением функциональности на кучу классов, комментариями и coverletter на английском. Написал им на мыло — код смотреть даже не стали.

Пожалуйста, извините за неудобство — отлаживаем новую систему автоматизированной проверки входных заданий, с требованиями проморгали момент :( На будущее учтем.
Зачем VS2013, почему не к стандарту языка привязаться? Пользовался пару раз этой средой, винды нету, про особенности реализации и поддержки стандартов не в курсе.

Все задания автоматически проверяются первично на компилируемость в двух средах: Windows / VS 2013 и Linux / GCC 5.4.0. Если задание удастся скомпилировать хотя бы на одной из указанных конфигураций, его уже дальше оцениваем на предмет корректности и производительности.

Какие ограничения по времени, памяти, входным данным? От этого же здорово зависит, каким будет решение.

Чем быстрее — тем лучше. Памяти желательно не больше 8 ГБ потреблять. Пример входных данных приведен, но проверять будем на более объемных файлах.

На видео показаны лекции? Кроме них какие-то материалы выдаются?

На видео — фрагмент лекций, да. Помимо них, курсантам рассылаются e-mail с конспектами и заданиями.
А без вступительных заданий, без «обучения» — просто обучающие материалы уже прошедшего курса можно почитать/посмотреть?

Да, после второго набора лекции планируем выкладывать в публичный доступ. Первый набор был репетицией, сейчас будет "чистовик". Но это случится, скорее всего, уже после окончания курса, в конце лета.

Важный UPD:
Было много комментариев про приём заданий под Linux, так что мы скорректировали требования к сдаче тестов. Теперь программу для входного теста можно компилировать и под Windows MSVC 2013, и под Linux gcc 5.4.0.


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


Еще раз просим прощения у всех, кто пострадал от калибровки приёма заданий. Сейчас всё окончательно починили, можно пользоваться.

Запилите потом статью с бенчмарками, top быстрейших решений задачи?

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

Вы обещались написать про SSRTGI, когда будет пост?

Скорее всего, после SIGGRAPH. Мы туда едем на Real-Time Live в конце июля, как раз показывать и рассказывать про SSRTGI.

Несколько вопросов по заданию
1. Нужны ли, могут ли быть потоки?
2. Если -n не задано, считать N=0 и не выводить статистику? Или нужно вывести всю статистику?
3. Можно ли считать, что все пути\домены влазят в оперативную память? Т.е. можно ли работать чисто в памяти, или же нужно заморачиваться с работой в рамках выходного файла?
4. Могут ли встречаться «некорректные url», и как их рассматривать в этом случае. Например «http://google.com:88/search?q=free+software». Считать ли в этом случае что разбор адреса должен быть закончен с любого символа не входящего явно в перечисление допустимых для домена и отличающегося от "/" или нужно какое-то иное поведение?

Мне кажется что вчера в задании было явное описание «общей статистики», кроме примера, но могу ошибаться…

Отвечает Шодан. :)


  1. Потоки в смысле threads или C++ streams? Threads нет, streams да.
  2. Нет, выбрать разумное N на ваше усмотрение и выводить.
  3. Да, можно.
  4. Да, могут, рассматривать как специфицировано: прекращать на первом непонятном символе.
Извините, не совсем ясно по пункту 4: если обнаружен такой символ, то считать URL некорректным и исключить его из рассмотрения или же, наоборот — считать корректным, но только до той части, где был обнаружен неизвестный символ?
Сейчас уже немного поздно менять задание, но я был удивлён пришедшим логом с ошибкой «error: use of ‘auto’ in lambda parameter declaration only available with -std=c++14 or -std=gnu++14». Можно было догадаться, конечно, из-за MSVS 2013, но всё-таки.

Ещё в задании написано «URL-ом считается подстрока». В такой формулировке «blablahttp://ya.ru» будет верным URL с доменом «ya.ru» и путём "/". Может, всё-таки, с разделителя начинать поиск?

После заполнения формы и отправки задания на проверку пропадает ссылка на текст задания. Осталась только в истории браузера.

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


Формулировка про URL

Скрытый текст
так специально хитро задумана, никому не говорите!


А на страницу с заданием можно вернуться по ссылке «Нет, не готов! Верните задание!».
Простите, что значит — формулировка специально задумана?
Точно так же, как со значением N без указания поведения по умолчанию.
Это тест на умение додумывать за автора, или на написание программ на C++?
Почему не сформулировать задание максимально полно и корректно?

Это значит, что сформулировано преднамерянно и в задачке специально оставлен небольшой подводный камень, чтобы посмотерть, а как люди думают и как его обойдут.


Хотя в здании изначальном действительно были неточности, и спасибо тем, кто на них указал. Но сейчас там ровно так, как всё должно быть. :)

Я просто вырезал regex'ом полагая что строка в задании «URL-ом считается подстрока» однозначно просит нас вырезать любые подстроки URL, ну например для сбора статистики, или же известно что в логе URL будут отделены пробелами.

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

Да, до конца дня понедельника можно перезалить задание заново, если есть желание.

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

Это, конечно, было бы полезно. Но этом этапе еще раз фиксить условия задачи — это посеять еще больше хаоса и разрушения. Ну и тем у кого есть вопросы по заданию, мы всем отвечаем.

А чтобы было совсем кошерно можно еще время дедлайна с указанием таймзоны добавить. :)

Добавили в видном месте на сайте дедлайн сдачи с часовым поясом. :)

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

Уточните пожалуйста вот этот пункт:
Обратите внимание, путь "/" в составе 4 разных URL из 4 разных доменов это 4 разных упоминания.

  • Тут есть некий подвох и нужно сообразить самому?
  • Это нужно понимать буквально (только для пути "/" и/или 4 раза)?
  • Или это пример для всех путей и в любых количествах? Т.е. любой путь считается отличным от другого если они одинаковы, но разные домены?
«упоминания» где? В общей статистике или а топе? Или и там и там?


Подписываюсь.
В выходном файле нужно вывести общее количество:
1) total urls — количество URL, общее число ссылок на страницы в документе.
2) domains — количество уникальных доменов
3) paths — количество уникальных URL (domain+path), количество упомяеутых страниц.
Так правильно?
Если под path подразумевается только путь (то что идет после домена), и в статистике нужно привести их общее количество, то оно будет равно total urls.
Прошу уточнить!
С учетом противоречивости задания и соответственно вероятностного решения задачи, вспоминается анекдот:
Два HR-менеджера смотрят на стопку резюме.
Молодой менеджер:
— да… изучать это надолго…
Опытный берет половину и кидает в шредер.
Молодой:
— ?????
Опытный:
— А зачем нам нужны неудачники?!

Уточнения получены, рассказываю:


В выходном файле нужно вывести общее количество:
1) total urls — количество URL, общее число ссылок на страницы в документе.
2) domains — количество уникальных доменов

Да. Причем неуникальных.


3) paths — количество уникальных URL (domain+path), количество упомяеутых
страниц.

Нет. Количество уникальных просто paths, без учета домена. Иначе да,
это называлось бы уникальным URL, но по условиям интересуют не они.


Если под path подразумевается только путь (то что идет после домена), и в
статистике нужно привести их общее количество, то оно будет равно total
urls.

Нет, не будет. count(distinct url) != count(distinct path) !=
count(url). Это три разных числа. Нужны последние два.

Это к тому, что любой путь (один и тот же) должен засчитаться в таком случае именно 4 раза, а не 1 раз.
Что каждое такое вхождение пути считается отдельным ("разным") новым упоминанием, а не как-то еще, не схлопывается почему-то.


Эту часть в задании, кстати, поправили почти сразу.

Подскажите пожалуйста как будет выглядеть вызов программы с флагов/ кол-вом топов и без указания данных параметров.

Вопрос не очень понятен.
Например, как test.exe -n 12345
myinputfile.txt myoutputfile.txt и соответственно test.exe -n
myinputfile.txt myoutputfile.txt


Дорасшифруйте, что имеется ввиду.

А разве такой вызов валиден?:
main.exe -n in.txt out.txt

Имхо, исходя из описания допустимы только варианты:
main.exe -n 10 in.txt. out.txt
main.exe in.txt out.txt

Флаг без значения это что-то странное.
Про какие именно параметры идет речь — не могли бы вы уточнить?
Вроде где-то отвечали: взять topN какой-то по умолчанию на свое усмотрение, и использовать если не задан явно.

да, это я видел. Я про то, как будет выглядеть запуск программы:
Mytest.exe -n 10 in.txt out.txt
Или же
Mytest.exe [-n 10] in.txt out.txt
А если не указывать кол-во то:
Mytest.exe in.txt out.txt

[-n NNN] взято в квадратные скобки. Это значит «необязательный параметр», который можно не указывать.
Следовательно возможно два запуска:

Mytest.exe -n 10 in.txt out.txt
и
Mytest.exe in.txt out.txt
эх, а я сдал как раз с [-n 12] параметром
Задавал вопрос про регистрозависимость в личке. Вот ответ на него:
  • Домены — нерегистрозависимы
  • Paths — регистрозависимы


Еще в тексте задания вроде нигде явно не сказано, что домен должен быть невырожденным и содержать как минимум хотя бы один символ. Вроде очевидно, что да, но хочется пруфа.
А сколько тестовых заданий поступило ради интереса не скажете?
Получили 345 разных заданий, наибольшее количество — за последние 24 часа. Из 345 исходников не удалось собрать только 4, остальные же сейчас изучаем и отбираем участников :)
У меня 4го июля юбилей, мне повезет! Кстати, во сколько планируете отправить письма счастья?
Планируем сегодня (до 23:55 MSK) уложиться точно :)
Не, не повезло, хотя сказали что ответ был правильный. Ну да ладно.
Если есть возможно получить информацию о том, на что обратить в след раз внимание — было бы здорово.
Если у вас редкая ситуация с попаданием в 17% участников (код которых показывает хороший результат как на маленьком, так и на «большом» тестах), то тут, наверное, поможет только прокачивание скилла удачи :)

Если же нет, то мы постарались собрать в письме типичные ошибки, но, к сожалению, без персонализации.
Вы планируете выложить все видео одним скопом только после окончания курса? Не рассматривали ли вариант еженедельной выкладки (в идеале с текстом домашек ;)?
Вы планируете выложить все видео одним скопом только после окончания курса?

Хотим выложить все видео после курса, да.

Не рассматривали ли вариант еженедельной выкладки (в идеале с текстом домашек ;)?

Скорее всего, в каком-то виде домашние задания будут присутствовать, но пока мы еще не придумали до конца как это будет выглядеть.Ближе к концу курса будет ясно :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий