August 28th, 2007

qr

Алгоритм избавления от лишних пробелов

Очень частая ситуация при любом редактировании текста на компьютере - нужно поудалять в тексте двойные, тройные и более длинные серии пробелов, оставив между каждыми двумя словами ровно один пробел. Моё традиционное решение - глобальная замена по тексту двух пробелов на один.
Думаю, что и все остальные компьютерщики поступают именно так.
Минус такого решения состоит в том, что приходится делать эту замену в несколько проходов (если заранее не считать, какова длина наибольшей цепочки пробелов, то и число проходов узнать заранее нельзя; приходится повторять замены до тех пор, пока число замененных цепочек не станет равно нулю, т.е. неопределенное число раз).

Сегодня пришло в голову решение, лишенное этого недостатка. И даже удивительно, что я не придумал его раньше.

1. Заменим каждый пробел на сочетание двух символов, не встречающееся в тексте. Например, на ^&.
2. Заменим каждое сочетание &^ на пустую строку.
3. Заменим ^& на пробел.

Не правда ли, элегантно?

PS. Спустя три года после опубликования изменил Subj, добавив в него слово "Алгоритм".
До этого пост был 9-м в выдаче Яндекса. Посмотрим, что будет через неделю
qr

29 февраля 1900

Очень давно я написал статью "Мифы и размышления" (http://www.geocities.com/CapeCanaveral/4344/214.html), в которой, в частности, проехался по MS-продуктам:

Кстати, массовое незнание того календаря, по которому мы живем, имеет и свои компьютерные продолжения. Так, в Windows (у меня стоят Win 3.1, но я думаю, что этот баг унаследован и последующими версиями) двухтысячный год почему-то считается невисокосным. А именно, "окошки" ("Панель управления", утилитка "Дата/время") показывают только две младших цифры года, и при этом не позволяют указать дату 29-02-00. Может быть, подразумевается, что "00" - это 1900-й год, я не знаю. Зато я точно знаю, что после 31 декабря "99" года (надо полагать, 1999-го) наступает 1 января этого самого года "00".

А MS Excel 5.0, наоборот, отлично понимает разницу между 1900 и 2000 годом, но при этом вполне спокойно "заглатывает" дату 29 февраля 1900 года - то есть день, которого в календаре нет! Воистину, это было бы очень смешно, если б не было так грустно.

Задачка 3. В каком году фирма Microsoft заметит и исправит эти ошибки? (Имею я, в конце концов, право задать вопрос, ответ на который мне не известен?!)


А вот сегодня мне показали ссылочку на статью, в которой объяснено не только то, откуда "баг 29-02-1900" попал в MS Excel, но и то, почему его так и не исправили. Весьма поучительная и занимательная история.
http://local.joelonsoftware.com/mediawiki/index.php/%D0%9C%D0%BE%D1%8F_%D0%BF%D0%B5%D1%80%D0%B2%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%91%D0%B8%D0%BB%D0%BB%D0%B0_%D0%93
qr

Положение о всероссийской олимпиаде

См. мое сообщение
http://community.livejournal.com/ru_olymp_math/45166.html
и ссылку http://www.kknop.com/math/pologenie.html,
приведенную в нем.

Прежде всего хочется убить авторов пунктов 24-25 и 34-35.
В качестве противоядия я уже предложил коллегам считать, что каждое
полное решение задачи стоит один балл (в крайнем случае - два,
чтобы за ползадачи можно было давать один балл). Иначе у каждой
олимпиады будет ровно один победитель и ровно один призёр -- такого
дебилизма не случалось даже в самые худшие времена.
qr

Мой третий ЧМ, или за одного битого...

Этот ЧМ был для меня третьим. В позапрошлом году в Ярославле я был в роли редактора и члена ИЖ. Замечательная роль, никакого напряга во время турнира... и никакого адреналина в результате. Год назад в Калининграде впервые влез в шкуру игрока. Честно говоря, всю игру провёл как в тумане - что-то брал сам, где-то добивал версии сокомандников, но из головы выветривалось всё практически сразу. До того, что зимой не сумел вспомнить, как же назывался университет Кенигсберга, тот самый, в котором Кант работал. Хотя абсолютно точно знаю, что на экскурсии всё это и многое другое видел своими глазами...

Сейчас в Светлогорске ощущения противоположны. Всю игру, а также кучу внеигровых моментов 23-25 августа, помню в мелочах. Память вырубилась от переполнения стека только 26-го, когда всё уже было позади. Да и то, удалось запомнить парочку смешных анекдотов, которые рассказывал водитель автобуса, возивший нас на Куршскую косу.

"Как потопить шведскую подводную лодку?
(далее идет ответ с растянутым шведско-эстонским акцентом)
"Просстто посстучитте, вам обязаттельно откроютт..."

Своей игрой недоволен очень. Давненько не был настолько бесполезным игроком.
Игрой команды доволен даже в еще большей степени. Ребята молодцы, и наше место в финале - это не только двойное везение (провал всех конкурентов в последнем четвертом туре отборочного турнира и глупая ошибка Санникова при формулировке ответа на восьмом вопросе в перестрелке), но и заслуга всех игроков ЮМЫ, выдиравших зубами это место изо всех сил все 60x15 секунд последнего тура. Перед ним мы были 13-ми и имели -4 к Санникову. После него - обошли шесть команд и сравнялись с Санниковым.

Очень понравились вопросы, особенно первые 30.

Восхитила игра в финале и Поташева, и Губанова. Это было что-то необыкновенное. Турнирная таблица отражает накал борьбы только очень и очень приблизительно.

Церемония закрытия была аналогична прощлогодней, но чуть-чуть менее интересной. Не знаю, почему так получилось. Даже шествие по главной улице с оркестром и флагами не сделало эту церемонию лучше.

Город Светлогорск понравился значительно меньше Юрмалы. Впрочем, я пристрастен: я не люблю матерных надписей на заборах и не люблю, когда центральнаяя улица отдана не пешеходам, а автомобилистам. В Юрмале есть улица Йомас и нет мата на заборах, а в Светлогорске - улица Ленина и мат. В остальном же города очень похожи...

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