Практические занятия по курсу ОиМП: различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 13: Строка 13:
# Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.
# Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.


===Задание 1. Ввод-вывод===
===Задание 1. Ввод-вывод (4.09 - 20.09)===
[http://official.contest.yandex.ru/contest/642/ Задачи.]
[http://official.contest.yandex.ru/contest/642/ Задачи.]


[https://docs.google.com/spreadsheets/d/1LqW4k7heilZ8i1B7NCMGcr41kd5Pz1gIyD5rrOyGZjI/edit?usp=sharing Список обязательных задач для каждого студента.]
[https://docs.google.com/spreadsheets/d/1LqW4k7heilZ8i1B7NCMGcr41kd5Pz1gIyD5rrOyGZjI/edit?usp=sharing Список обязательных задач для каждого студента.]


===Задание 2.===
===Задание 2 (6.09 - 20.09)===
Перед выполнением задания нужно установить библиотеку [http://pillow.readthedocs.org/en/latest/ Pillow].
Перед выполнением задания нужно установить библиотеку [http://pillow.readthedocs.org/en/latest/ Pillow].


Строка 31: Строка 31:
# Напишите свой фильтр для обработки изображений.
# Напишите свой фильтр для обработки изображений.


===Задание 3===
===Задание 3 (13.09 - 27.09)===
Решите 20 любых задач из [http://official.contest.yandex.ru/contest/642/ контеста Ввод-вывод].
Решите 20 любых задач из [http://official.contest.yandex.ru/contest/642/ контеста Ввод-вывод].


Строка 64: Строка 64:
На пересечении i-ой строки и j-ого столбца должно стоять четыре неотрицательных числа --- время работы каждого из четырёх алгоритмов при заданных e и n. Если данное e не взаимно просто с n, поставить прочерк.
На пересечении i-ой строки и j-ого столбца должно стоять четыре неотрицательных числа --- время работы каждого из четырёх алгоритмов при заданных e и n. Если данное e не взаимно просто с n, поставить прочерк.


===Задание 4===
===Задание 4 (18.09 - 2.10)===
Если в Вашей фамилии чётное число букв, то решите все чётные задачи из [http://official.contest.yandex.ru/contest/672/ контеста Обработка текста], иначе все нечётные.
Если в Вашей фамилии чётное число букв, то решите все чётные задачи из [http://official.contest.yandex.ru/contest/672/ контеста Обработка текста], иначе все нечётные.


===Домашнее задание 1===
===Домашнее задание 1 (26.09 - 5.10)===
[http://official.contest.yandex.ru/contest/689/enter/ Первое большое домашнее задание.] Каждому студенту требуется сделать пять задач из 20. Список обязательных задач [https://docs.google.com/spreadsheets/d/1LqW4k7heilZ8i1B7NCMGcr41kd5Pz1gIyD5rrOyGZjI/edit#gid=1902700687 здесь].
[http://official.contest.yandex.ru/contest/689/enter/ Первое большое домашнее задание.] Каждому студенту требуется сделать пять задач из 20. Список обязательных задач [https://docs.google.com/spreadsheets/d/1LqW4k7heilZ8i1B7NCMGcr41kd5Pz1gIyD5rrOyGZjI/edit#gid=1902700687 здесь].

Версия от 12:51, 26 сентября 2014

Полезные ссылки

Для выполнения заданий необходимо установить интерпретатор Python.

Style guide.

Форум.

Задачи, которые точно нужно уметь решать.

Рекомендации по выполнению

  1. Не используйте wildcard imports (from <module> import *), см. PEP8.
  2. Знак присваивания обособляйте пробелами с двух сторон. Плохо: a=b. Хорошо: a = b.
  3. Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.

Задание 1. Ввод-вывод (4.09 - 20.09)

Задачи.

Список обязательных задач для каждого студента.

Задание 2 (6.09 - 20.09)

Перед выполнением задания нужно установить библиотеку Pillow.

Задачи.

Замечание. Доступ к элементам pixels осуществляется так: pixels[i,j].

Бонусные задачи

  1. Реализуйте масштабирование.
  2. Реализуйте отражение.
  3. Реализуйте размытие.
  4. Напишите свой фильтр для обработки изображений.

Задание 3 (13.09 - 27.09)

Решите 20 любых задач из контеста Ввод-вывод.

Бонусное задание. Шифрование RSA

  1. Реализуйте алгоритм создания открытого и секретного ключей.
  2. Реализуйте алгоритмы шифрования и дешифрования. Проверьте, что они работают.
  3. Реализуйте алгоритм взлома. Функция должна принимать аргументы c, n и m (см. обозначения в Википедии) и возвращать d, приватный ключ, такое что m == c^d mod n.
  4. Научитесь замерять время выполнения каждой из четырёх функций (функции генерации ключей, шифрования, дешифрования и взлома).
  5. Выберите некоторое значение m, например, m=100. Выведите таблицу:
n=11*13=143 n=17*31=527 n=109*157=17113 n=3557*2579=9173505 n=3533*3571=12616343
e=3
e=17
e=257
e=65537

На пересечении i-ой строки и j-ого столбца должно стоять четыре неотрицательных числа --- время работы каждого из четырёх алгоритмов при заданных e и n. Если данное e не взаимно просто с n, поставить прочерк.

Задание 4 (18.09 - 2.10)

Если в Вашей фамилии чётное число букв, то решите все чётные задачи из контеста Обработка текста, иначе все нечётные.

Домашнее задание 1 (26.09 - 5.10)

Первое большое домашнее задание. Каждому студенту требуется сделать пять задач из 20. Список обязательных задач здесь.