Практические занятия по курсу ОиМП: различия между версиями
Нет описания правки |
Нет описания правки |
||
| Строка 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.
Задачи, которые точно нужно уметь решать.
Рекомендации по выполнению
- Не используйте wildcard imports (from <module> import *), см. PEP8.
- Знак присваивания обособляйте пробелами с двух сторон. Плохо: a=b. Хорошо: a = b.
- Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.
Задание 1. Ввод-вывод (4.09 - 20.09)
Список обязательных задач для каждого студента.
Задание 2 (6.09 - 20.09)
Перед выполнением задания нужно установить библиотеку Pillow.
Замечание. Доступ к элементам pixels осуществляется так: pixels[i,j].
Бонусные задачи
- Реализуйте масштабирование.
- Реализуйте отражение.
- Реализуйте размытие.
- Напишите свой фильтр для обработки изображений.
Задание 3 (13.09 - 27.09)
Решите 20 любых задач из контеста Ввод-вывод.
Бонусное задание. Шифрование RSA
- Реализуйте алгоритм создания открытого и секретного ключей.
- Реализуйте алгоритмы шифрования и дешифрования. Проверьте, что они работают.
- Реализуйте алгоритм взлома. Функция должна принимать аргументы c, n и m (см. обозначения в Википедии) и возвращать d, приватный ключ, такое что m == c^d mod n.
- Научитесь замерять время выполнения каждой из четырёх функций (функции генерации ключей, шифрования, дешифрования и взлома).
- Выберите некоторое значение 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. Список обязательных задач здесь.