bash.im ithappens.me zadolba.li
1982

Брутфорсом по Эйнштейну

20 января 2010, 09:00

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

Вот по такой схеме несколько лет назад к нам в контору попала загадка Эйнштейна. Вкратце: есть пять домов разных цветов, в которых живут люди, обладающие независимыми свойствами (национальность, любимый напиток, марка сигарет и любимое животное). В условиях — сочетания признаков (англичанин в красном доме, датчанин пьёт чай). Задача в том, чтобы определить подходящие под условия сочетания.

За пару месяцев до этого нам как раз привезли новый сервак под базу данных — «15-тысячник» Sun, и мы были по уши в оптимизации базы и запросов под такое количество процессоров и памяти. Раньше база обитала на двухпроцессорном сервере, и на новой мощной железяке стали вылезать совсем другие узкие места. Когда задача добралась до нашего отдела, нам стало интересно, за какое время осилит новый сервер решение этой задачи?

Был разработан скрипт, генерирующий все возможные варианты, проведён диспут, надо ли генерировать bitmap-индексы в таблице для ускорения запроса или при данном объёме оперативки это лишняя трата времени, и написан запрос, включающий условия задачи. Вместе с кодингом уложились в 15 минут — сервак вернул результат, содержащий все варианты решения задачи.

Во время эксперимента ни один рабочий процесс не пострадал.