Я периодически на досуге стараюсь решать всяческие программистские микро-задачки, на которые набредаю в интернете. Чисто для поддержания минимальной формы, чтобы к icfcp мозг не успел засохнуть.
На этот раз обнаружил вот такую:
http://wunderfund.io/dev_job - это типа тестовая задача для вакансии разработчика в какой-то мутной конторе.
Ну я, типа, скачал данные, повозился достаточно продолжительное время с решением (мне вообще туго даются задачки олимпиадного типа, которые решаются через динамическое программирование), расчитал ответ, сабмичу - хуй. Думаю: наверно чё-то упустил в задании. Всё внимательно перечитываю, да нет, вроде всё верно. Рефрешу страницу, перекачиваю данные (мож изменились), пересчитываю заново, сабмичу - опять хуй.
Тут меня уже, надо сказать, одолела злоба. Особенно подбешивало описание задачи в разделе вакансии: "Если ты нам подходишь, решение задачки не составит для тебя труда." :) А тут, получается, что решение для меня составляет труд, и моя кандидатура не подходит на вакансию какого-то рядового плюсового разработчика, например.
Ну ладно. Потратил дополнительное время, нагенерил рандомных небольших тесткейсов и сравнил результаты с эталонами, которые получил из брутфорсной реализации. Всё верно же. Ок, опять рефрешу страницу, сабмичу результат - опять хуй.
Ну ок, в итоге совсем забиваю (и так дофига времени потратил) и, в расстроенных чувствах, ухожу спать.
А сегодня меня мне вдруг в голову пришла мысль. Я её проверил, и мои самые страшные подозрения подтвердились!
Короче, дело было так:
Я скачиваю .csv-шку с сайта и открываю её штатным маковским Numbers. Вижу примерно такое:
Ну хорошо, думаю, мак глупый, хочет в качестве разделителя столбцов точку с запятой согласно локали, а там просто запятая. Ну там данные простые, поэтому я не мучаюсь с форматированием, а просто тупо беру и забиваю в коде в данные всё, что после запятой (типа, второй столбец - 7, 688, 682 и тд).
Сегодня до меня дошло посмотреть в исходник .csv-шки. Оказывается, это нихрена не 7 и 688, а 7000 и 6880 =) А табличный процессор терминирующие нули радостно откусил, потому что, согласно тем же настройкам локали, запятая является разделителем дробной части числа. И "0,7000" оказалось не двумя столбцами с "0" и "7000", а одним столбцом с числом "0.7".
Короче, с правильными данными результат у меня-таки сошёлся. Но самое обидное даже не в этом, а в том, что с этими данными никакой код можно было вообще не писать - достаточно просто на них пристально посмотреть и воспользоваться калькулятором :(