Четыре зарубки
Точно не помню в каком, то ли в 10м, то ли в 11м классе, я участвовал в районной олимпиаде по, как это тогда называлось, информатике. Поскольку во всех районах были одни и те же задания, а мы все были более или менее знакомы друг с другом, то некоторые из заданий просочились "в прессу". Уклон всех задач был алгоритмическим, как, наверное, и надо. Одна из задач формулировалась так: посчитать количество счастливых билетов в диапазоне 500000-600000. Счастливым признавался билет, в котором 1я, 3я и 5я цифра в сумме давали то же число, что сумма 2й, 4й и 6й цифры. В то время я был юный монстр бейсика для Вектор-06ц и ассемблера для x86. Как жулик, узнав о задача накануне, я, после созвона с товарищами по команде стал думать, как это сделать. В голове крутились мысли одна другой краше, самая запавшая в голову и вот уже 16 лет там сидящая - вот (дело прошлое, сейчас уже не так стыдно): сформировать строку-эквивалент числа,
разбирать его разрядам, проводить суммирование полученных цифр и пр. Трудоёмкость оценить не берусь, но как минимум она далека от требовавшейся (практически надо реализовывать это дело на Ямахах MSX-1, кто помнит).
Понятное дело, что работа со строками и на нынешних балалайках - не самое быстрое занятие, а тогда-то...Короче, отводилось на всё мероприятие кажется 6 часов, по моим прикидкам программа написанная по этому прэлэстному алгоритму работала бы дня 2 как минимум. Не пойдёт? Не пойдёт.
Говоря честно, я сидел и предавался как Догилева в "Блондинке за углом" псисимизму - нет смысла связываться с такой реализацией, как вдруг... Мы же складываем цифры! Самоё число не интересует вообще. Нужно получить только 5 цифр для суммирования и вердикта. А это значит
for I = 0 to 9
for J = 0 to 9
for K = 0 to 9
for L = 0 to 9
for M = 0 to 9
if 5 + J + L = I + K + M ...В момент, когда это сверкнуло, мне подумалось, что не может быть, чтобы так просто всё решалось. Это была, как говорил Анатолий Маркуша в своих "Чудесах на колёсах" (Царствие Небесное, великий был человек), первая зарубка.Надо сказать, что ничто меня не выматывает сильнее, чем проблемы на пустом месте, когда логическим путём дойти до их сути не можешь.Терялись ответы и всё тут. Сокеты работали как часы, товарищ В.Ч. на них даже игру какую-то многопользовательскую сбацал. Не то Го, не то Реверси. Факт, что работало. Уверенность насчёт прочего была не меньшая. Что делать? Не сдавать нельзя. Что исправлять - непонятно. И я запаниковал. Внёс предложение переписать пару сомнительных с моей точки зрения фрагментов и проверить. Переписать и проверить. Был готов сделать это единолично и самостоятельно. Но более хладнокровные товарищи, товарищ, точнее, отказался: у нас всё работает. Мы не будем переписывать, пойдём сейчас поиграем в настольный теннис, а когда вернёмся, просмотрим весь код от начала до конца. ...Ошибка была в закладывании в буфер: закладывалось на 1 байт меньше, чем нужно, из-за этого пришедший на сервер пакет не распознавался как правильный, но он не был и неправильным с точки зрения передачи по сети. Сдались мы вовремя, всё было нормально. Уже больше 9ти лет я не кидаюсь переписывать то, что не работает и бью по рукам тех, кто лезет чинить то, что не ломалось и исправлять то, что не содержит никакого дефекта. Это был самый комплексный урок, наверное: не бояться, не паниковать, даже на пике общей суматохи не отступать от плана.

Комментариев нет:
Отправить комментарий