Так сложилось, что на момент борьбы с этой задачкой я профайлерами пользоваться ещё не умел.
С другой стороны, когда на протяжении недели живёшь в куске кода, размером в пару страниц, он особо и не нужен.
Вообще, если бы я решал эту задачу (алкотестер в Facebook), то я бы не решал её исключительно методом анализа количества допущенных ошибок. Куда интереснее было бы рассмотреть не сам текст, а то, как пользователь его вводит (скорость набора, количество исправлений при наборе). Особой эффективности этот метод добивался бы в случае, если для пользователя хранилась история его скорости набора и исправлений в виде каких-то коэффициентов по дням. Тогда сильное отклонение этих двух коэффициентов в совокупности срабатывало бы как вполне себе неплохой алкотестер (пользователь часто промахивается и набирает медленнее, чем обычно). Правда тут программирование было бы возможно только на Javascript (в рамках этой социальной сети).
Да, согласен, что со словарем сравнивать ошибочно, ведь есть ОЛБАНСКИЙ!11 язык, да и, собственно, язык оно может неправильно определить, а тогда уж ошибок не оберешься.
Если человек заходит на фейсбук только в нетрезвом виде, то как поступим? Может, пусть сам решает, что делать, а чего не делать? А то получится как с антиблокировочной системой (ABS) у автомобилей, водители слишком стали полагаться на эту систему и ездить более рискованно, вследствие чего количество аварий на дорогах не уменьшилось, а увеличилось, поскольку ABS не всегда срабатывает, да и уменьшает тормозной путь не одинаково в разных ситуациях.
Я считаю, что нужно приучать людей к ответственности, а не перекладывать ее на плечи автоматики.
Пусть лучше сервис ошибки исправляет у двоечников, а то иногда так пишут, что читать невозможно… ;)
Я до сих пор удивляюсь, когда сталкиваюсь с мнением о том, что предназначение ABS — уменьшить тормозной путь. И ведь сталкиваюсь с этим просто постоянно! Самое хреновое, что бывает так: «Не топи так, не успеем затормозить.» — «Да, фигня, у меня ABS, быстрее затормозим!».
Хотя основное назначение ABS это сохранить управляемость при торможении, но она также сокращает тормозной путь, кроме ряда случаев например, при торможении на рыхлых поверхностях.
так-то, автор выше прав – если говорить о предназначении ABS с точки зрения тормозного пути, то эта система старается препятствовать его значительному увеличению, потому что срабатывает она тогда, когда тормозной путь рискует увеличиться в несколько раз за счет того, что заблокированные тормозами колеса просто скользят по дорожному покрытию, как кросовки с плоской подошвой по льду.
Позанудствую. Задача ABS — предотвращать полную блокировку колес. Не для того, чтобы менять длину тормозного пути, а единственно для того, чтобы сохранять управляемость машины. Чтобы можно было давить тормоз в пол и объезжать препятствие.
я же отметил, что «с точки зрения тормозного пути» :) так-то, да – одной из решаемых антиблокировочной системой проблем является сохранение возможности маневрировать во время экстренного торможения. но проблема эта не единственная, так как движение юзом при торможении обеспечивает не только отсутствие маневренности, но и значительное увеличение тормозного пути, занос задней оси и не самые страшные, но все же последствия ввиде повышенного и неравномерного износа резины.
таким образом (если уж занудствовать), ABS борется не с потерей маневренности или увеличением тормозного пути при экстренном торможении, а с возникновением юза при превышении тормозного усилия над силой сцепления резины с дорогой.
кстати, на поездах тоже есть своеобразная антиблокировочная система, целью которой является именно предотвращение увеличения тормозного пути и истирания колесных пар (которые начинают потом повышено шуметь) – маневренность рельсовому транспорту, как вы понимаете, ни к чему, а вот максимально короткий тормозной путь и максимально круглые колеса большим поездам достаточны важны.
и если уж совсем оффтопить, то… меня при неисправности ABS на поздно замеченном повороте градусов под 110, на заснеженной трассе, на скорости 100 км/ч огорчило не только отсутствие маневренности (при сильном повороте руля вправо траектория движения изменилась совсем незначительно), но и значительное увеличение тормозного пути, который при снижении скорости километров до 70 закончился столкновением с припаркованным на обочине МАЗом :) я бы даже сказал, что меня бы больше спасло именно уменьшение тормозного пути.
Если бы я знал об этом повороте, то обязательно бы снизил скорость заблоговременно до допустимой, но если бы да кабы… Работающая ABS помогла бы мне значительно эффективнее снизить скорость и при этом изменить траекторию движения так, чтобы избежать столкновения.
Хотя насчет траектории в моем случае я не очень уверен, так как на скользкой поверхности заднеприводные авто даже при вращении всех колес не очень маневренны, но это в худшем случае был бы сугроб, а не МАЗ :)
А я, к сожалениею, не соблюдаю. Для меня странно ехать 90. Это конечно не отменяет того факта, что я мудак и упоролся в стоячий МАЗ, но в допустимых условиях я считаю нормальным ехать и 160.
Кстати, 85 называется отвратительным словом «тошнить».
Как бы основная масса транспорта именно что едет с такой скоростью и это самая стандартная скорость потока. Если этот поток кому то и мешает, то это проблемы этих выскочек.
А где вы видели допустимые условия? Я знаю только одно такое место — немецкий автобан и то далеко не на всех участках.
Да нет же, как вы определяете слово «правильное» из словаря, на которое данное слово похоже? Или там не обязательно, чтобы программа правильно определяла нужное слово, можно и совсем другое, но с меньшим расстоянием (кол-вом исправлений)?
По условиям задачи поиск «правильного» слова не нужен, нужно найти, до какого слова из словаря дистанция меньше и посчитать эту самую дистанцию, а в конце вывести сумму для всех слов текста.
Тоже на чистом PHP. Только я в другую сторону оптимизировал, нежели автор:
After running your solution to breathalyzer (received on March 26, 2011, 7:23 am), I have determined it to be correct. Your solution ran for 4952.985 ms on its longest test case.
шикарный результат, поделитесь кодом потестирую на своей машине, у меня есть подозрение что когда бот принимающий решения не нагружен, он быстрее отрабатывает решения, и результаты получаются выше.
Статья, безусловно, хорошая, но я согласен с предыдущим комментарием, ведь количество ошибок при наборе может быть и очень незначительно. Человек, к примеру, может оставить простой комментарий «Awesome!» там, где этого делать совсем не нужно. Или же просто «f**k you». Думаю даже сильно пьяный человек врятли сделает в этих словах ошибки.
А автору хотелось бы намекнуть, что код хорошо было бы комментировать. Разбираться в незнакомом языке крайне тяжело.
Есть ли особый смысл в использовании if dic[edit.length] ? dic[edit.length].include?(edit) : false
вместо if dic[edit.length] && dic[edit.length].include?(edit)
?
я не уверен в порядке выполнения if dic[edit.length] && dic[edit.length].include?(edit). Если dic[edit.length]==nil, то второе выражение вызовет ошибку. Чтобы гарантировать порядок выполнения вычисления, я использую тернарный оператор.
Работа сделана, безусловно, с толком и расстановкой, но, к сожалению, IMHO, базируется она на изначально ложном предположении об увеличении количества орфографических ошибок от опьянения.
Наверное, мне не следует проводить аналогий между собой и другими людьми, но мои наблюдения за собой говорят, что трезвый и пьяный я пишу одинаково хорошо. Разница наблюдается лишь в многословии и экспрессивности. :)
Очень интересный анализ. Однако, Puzzle Master предлагает решившим не спойлить решения, а помогать только такими советами, которые не уменьшат сложность задачи.
В Android 2.3 от Cyogen есть «пьяный режим» на группы контактов. Для возможность позвонить контактам из указанного режима — это решить некоторые математические задачки. Решил — звони, не решил — пей дальше…
Ох уж эти математические задачки… Поставил себе будильник xtreme, который предлагает их решить, чтоб была возможность выключить, но мозг адаптировался за неделю, и сейчас решает их практически во сне (((
Алкотестер от facebook