Публикации в категории “Программирование”

Генерация подмножеств множества

Алгоритмы теории множеств нередко применяются в программировании. В этой статье я хочу поговорить о генерации подмножеств множества. Множество — это набор элементов. Все элементы множества различны, то есть один элемент не может встретиться в множестве дважды. Программно реализовать множество можно разными способами: в виде класса, в виде массива с функциями для операций над ним и т.д. В языке Pascal имеется готовая реализация и синтаксис для работы со множествами.

Генерация подмножеств множества может пригодиться, допустим, в логике игры, когда из набора персонажей необходимо выбрать случайную их группу. Допустим, имеется множество M = {1, 2, 3}. Все подмножества множества M (их совокупность называют булеаном) следующие:

{}
{1}
{2}
{3}
{1, 2}
{1, 3}
{2, 3}
{1, 2, 3}

Читать далее >

Задача о ящике

И снова всем привет! После вводной статьи самое время рассмотреть какую-нибудь задачку. Для первого раза возьмем простенькую, чтобы, так сказать, войти в курс дела.

Итак, задача о ящике. Условие задачи взято из системы Cats сайта ДВГУ. Оно на английском языке, я кратко опишу суть. Имеется шесть досок определенного размера (ширина и высота). Необходимо определить, можно ли из этих досок собрать ящик. Входной файл box.in содержит шесть строк, каждая описывает размер доски и состоит из двух чисел w и h — ширины и высоты. Выходной файл box.out должен содержать слово POSSIBLE, если возможно из данных шести досок собрать ящик, либо IMPOSSIBLE, если это невозможно. Ограничение по времени выполнения: 2 секунды, по памяти: 64 Mb. 1 ≤ w, h ≤ 10000.

Читать далее >

Создание PDF в .NET

PDF (Portable Document Format) — этот формат хорошо подходящий для документов, имеющих четкую заранее определенную структуру (квитанции, анкеты и т.д.). Для работы с PDF в .NET существуют свободная библиотека PDF Clown, опытом работы с которой я и поделюсь в этой статье.

Читать далее >

Экскурс в ACM/ICPC

ICPC LogoACM/ICPC (или просто ICPC) — крупнейшая студенческая командная олимпиада по программированию. Это мероприятие приравнивается к чемпионату мира по программированию. Данная статья открывает новую одноименную категорию на сайте, где мы будем разбирать интересные олимпиадные задачи.

Начну с небольшого экскурса в историю и правила проведения чемпионата. Четвертьфинальные и полуфинальные этапы чемпионата проходят независимо в своих регионах, победители которых проходят в следующий этап. Лучшие команды из каждого региона по итогам полуфинала собираются вместе в одном из городов мира и выясняют отношения в финале. Чемпионат командный, в каждой команде три участника. В распоряжении команды один ПК, некоторое количество времени (обычно 5 часов) и ряд поставленных задач (как правило, 5-10 задач). Каждая задача имеет условие, формат входных и выходных данных, ограничение по времени и по памяти. Решением задачи является программа, написанная на одном из доступных правилами языков программирования (обычно пишут на C). Программы-решения проверяются в автоматическом режиме. Система автоматической проверки выполняет несколько тестов, подавая проверяемой программе входные данные и анализируя выходные согласно условию задачи. Если программа на выходе дает неправильный ответ, превышает лимит допустимой оперативной памяти, выполняется дольше положенного времени (не компилируется, выпадает в runtime error, ну и так далее), то тест не пройден. Задача считается решенной, если программа удачно проходит все тесты, предложенные системой. Вариантов “почти решенная”, “наполовину решенная”, как вы понимаете, нет. При подсчете баллов учитывается количество решенных задач, время и количество попыток, затраченных на их решение.

Читать далее >

C++ и парсинг HTML на Qt

Здравствуйте. Сегодня я опишу создание приложения для слежения за посылками от доблестной и уважаемой “Почты России”. Я раскрою такие темы:

  • С++ & QtCreator
  • Разбор DOM-дерева полученной страницы
  • Работа с QDateTime, получение текущей даты в Qt
  • Работа с FireBug
  •    Работа с формами
  •    Отслеживание POST-запросов

Статья написана для одного моего замечательного друга — Алексея. Надеюсь, он поймет и усвоит весь материал, который я опишу в этой статье.

Читать далее >

Опыт внедрения SQLite в .NET приложение

SQLite — легкая встраиваемая база данных, отлично подходит для хранения небольших объемов информации. В этой статье я опишу свой опыт внедрения этой замечательной библиотеки в свое dotnet/C# приложение. В основном все прошло достаточно гладко, однако были и некоторые неожиданные особенности.

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

Читать далее >

Cross domain AJAX в плагинах

Недавно мне нужно было написать плагин для браузера Google Chrome. Суть была в анализе активной страницы и получении всевозможной SEO-информации. Под катом я опишу неприятную ситуацию, вызванную кроссдоменным ajax-запросом, а так же листинг кода для получения количества страниц в кеше яндекса для указанного домена.

Читать далее >

Скрипт накрутки рейтинга (голосов)

Продолжим написание постов по использованию Python и UrlLib. Может, плохо рассказывать о таких вещах как накрутке, но это весьма интересно. Опять же не забуду напомнить, что всё это исключительно в учёбных целях!

Что я рассмотрю в этой статье:

  • Авторизация на сайте через UrlLib
  • Работа с Cookies в UrlLib
  • Составление POST-запросов
  • Разбор html через Beautiful Soup
  • Загрязнение совести

Читать далее >

Работа с UrlLib. Скрипт накрутки рекламы

Python LogoПриветствие! Сегодня напишем программу по накручиванию рекламы, которая сможет скрывать свои реальные данные (ip, user-agent, гео-положение). Хочу заметить, что всё это исключительно в учёбных целях.

В этой статье я разберу:

  • UrlLib, базовая информация
  • Подмена user-agent
  • Proxy в UrlLib
  • Анонимизация через Tor
  • Выборка элементов из массива
  • Использование библиотеки Beautiful Soup для работы с html
  • Работа с DOM в Python

Читать далее >

Основы Assembler для i8086

Здравствуйте. На предмете Архитектура ЭВМ в целях ознакомления с принципами работы компьютера нас обучили основам ассемблера под i8086 процессор (большинство современных процессоров с ним совместимы). Я подумал, что не будет лишним рассказать здесь все, о чем узнал.

Читать далее >