All articles, tagged with “python”

Codeforces Beta Round #83

Сегодня участвовал в — Codeforces Beta Round #83 (второй дивизион). Решал все на Python.

Первую и вторую задачу решил без особых проблем, плюс по второй 4 успешных взлома. Третья задача не понравилась, не решал.

С четвертой (D. Баскетбольная команда) получилось так. Формулу для решения я вывел, вроде бы все верно. Но проблема в том, что там дробь, где в числителе и знаменателе — примерно равные по величине произведения сотни довольно больших целых чисел.

Длинная арифметика для целых в Python из коробки, так что при умножении переполнения не будет. Но для деления двух больших целых чисел в Python 2.6 надо привести их к float (иначе получится обязательно целое) — и имеем OverflowError:

>>> 1.0 * (1000 ** 200) / (1001 ** 200)
OverflowError: long int too large to convert to float

По хорошему, чтобы этого избежать, надо не считать отдельно числитель и знаменатель, а умножать на одно число — делить на одно число (во float) и т.д.

Но в Python 3 можно поделить целые числа и получить float, без проблем переполнения в случае подсчета отдельно числителя и знаменателя:

>>> (1000 ** 200) / (1001 ** 200)
0.8188125757004808

Еще в Python 2.6 можно было бы использовать тип Decimal:

>>> from decimal import Decimal
>>> Decimal(1000 ** 200) / Decimal(1001 ** 200)
Decimal(‘0.8188125757004809207789472534’)

Интересно, что в C++ при включенных оптимизациях (по крайней мере в g++ с -O2) при вычислении отдельно числителя и знаменателя не происходит переполнения double, т.к. используются регистры сопроцессора с большей разрядностью без пересылки промежуточных результатов в память.

Интересные конференции в октябре в Киеве

В октябре в Киеве пройдут аж три конференции, на которые бы мне хотелось сходить.

2 октября: OSDN Conference 2010 — всеукраинская конференция разработчиков и пользователей свободных программ.

16-17 октября: RubyConfUa 2010. Я на Ruby не разрабатываю, но для общего развития интересно. Может потом что-то на Ruby on Rails попробую сделать.

23-24 октября: PyCon Ukraine. Как понятно из названия, посвящена языку программирования Python. Самая полезная в практическом плане для меня должна быть. Но что-то на сайте у них пусто, уже регистрация должна была начаться…

TopCoder: Python пригодился

Выиграл мелкий контест в UI Prototype на TopCoder: Hestia B2B CSS and Image Cleanup (результаты были почти три недели назад, но только сейчас окончательно подтвердили). Сделал скриптами на AWK и Python.

Пожалуй, первый раз, когда мне реально пригодился Python на TopCoder.

Power programming

Power programming” — интересная статья — сравнение подходов к решению на различных языках программирования на примере задачи Round 1B 2009 Google Code Jam Decision Tree.

Сравниваются решения на Python, Lisp, Perl и C++.

Google Code Jam 2009 Round 1 и SRM 448

Несколько запоздалый отчет, но пусть будет для истории. 

Google Code Jam Qualification Round 2009

Решил одну задачу из трех, самую первую — на Python. Задача очень просто решалась при помощи регулярных выражений.

В итоге — 33 балла, почетное семь тысяч пятьсот двадцать седьмое место :-D
Главное, что 33 балла набрал — квалификацию прошел. Протиснулся.

Topcoder AgentMatching Contest, SRM 447 и Member Beta SRM

Небольшой отчет о моих недавних выступлениях на topcoder.
 

Релиз Django 1.1

Сегодня вышла новая версия замечательного написанного на Python веб-фреймворка Django.

Примерно последний год практически вся моя работа и денежные поступления связаны именно с Django.

Django примечателен тем, что SVN-версия trunk достаточно стабильна для использования в боевых условиях, и к официальным релизам практически никто не привязывается. Но все равно, выход новой версии — довольно значимое событие.

Да, список изменений: http://docs.djangoproject.com/en/dev/releases/1.1/

Релиз Mercurial 1.3

Вчера выпущен новый релиз распределенной системы управления версиями — Mercurial 1.3.

Mercurial написана на языке программирования Python и распространяется по лицензии GNU GPLv2.

Очень приятная в работе система, я ее использую для всех проектов, где у заказчика еще не налажена работа с другой системой контроля версий. Даже для мелких личных проектов типа топкодеровских марафонов — в отличие от, например, Subversion (SVN), не надо настраивать сервер, все очень просто и удобно.

В новом релизе разные улучшения, ускорения и прочие плюшки: http://mercurial.selenic.com/wiki/WhatsNew#Version_1.3_-_2009-07-01. Также отказались от поддержки Python 2.3 — теперь нужен Python 2.4 - 2.6.

Встреча Python User Group

Вчера ходил на встречу Python User Group, кратко рассказал о конкурсах и соревнованиях для Python-программистов.

Вот маленькая презентация на четырех страничках: