ННГУ, методы программирования, практика по курсу 2023 года
Презентация по курсу (обновляемая)
Для работы необходим python 3.9 и выше. Библиотеки: numpy, pandas, matplotlib, tensorflow, Pillow, scipy.signal. Редактор любой. Из неплохих: IDLE (родной, идёт вместе с установщиком), Visual Studio Code, notepad++, PyCharm, vim (для любителей сначала страдать, потом наслаждаться).
Работа с блокнотами онлайн, с возможностью подключения удалённых мощностей гугла (GPU, TPU): https://colab.research.google.com/
Таблица, где я буду отмечать сданные работы: 2023-Методы программирования
Сервер в Дискорд, где буду дублировать: https://discord.gg/MzPkCYf4Dh (получить роль в канале "Основной") Мой контакт: [email protected]
Внутри папки группы создать папку имени себя (фамилия и имя). В своей папке можете делать все что угодно, в чужие не залезать, в корневую тоже. Я буду ориентироваться на файлы, где в названии будет номер лабораторной.
Исходные данные:
- свои ФИО, число, месяц, год рождения в виде кортежа;
- предметы в школьном аттестате (не меньше 14), как словарь из названия и оценки (можно мокать);
- имена (только) ближайших (до двоюродных включительно) родственников в списке и их год рождения через пробел (в одной строке);
- имя, которое вы бы дали своей домашней пушистой киве (строка).
Действия:
-
вывести среднюю оценку в аттестате;
-
вывести уникальные имена среди своих родственников (включая свое);
-
общая длина всех названий предметов;
-
уникальные буквы в названиях предметов;
-
имя вашей домашней пушистой кивы в бинарном виде;
-
отсортированный по алфавиту (в обратном порядке) список родственников;
-
количество дней от вашей даты рождения до текущей даты (должна быть всегда актуальной);
-
FIFO очередь, в которую можно добавлять предметы по вводимому с клавиатуры индексу (до команды остановки), после введения - вывести все;
-
по введеному индексу, поменять имя в отсортированном списке родственников на имя ацтекского правителя (смотреть по списку всех на странице https://en.wikipedia.org/wiki/List_of_rulers_of_Tenochtitlan) под номером, получаемым из вашей даты рождения: number = (day + month**2 + year) % 21 + 1;
-
создать связный список, например, как словарь, где ключ - имя родственника, а значение (ссылка на следующий элемент) - индекс следующего имени по исходному списку, упорядоченному по их (родственников) годам рождения), исходный список при этом должен остаться неизменным;
-
написать функцию-генератор, свой вариант определяется как number = len("ФИО") * len (family_names) % 4:
- аликвотной последовательности;
- последовательности Сильвестра;
- числа трибоначчи;
- числа Леонардо.
- список целых чисел от 0 до 999999;
- список из 99999 случайных вещественных чисел в диапазоне [-1, 1];
- 42000 разных точки комплексной плоскости, лежащие внутри окружности радиуса r = birth_day / birth_month (можно случайных, можно равномерно распределённых), сортировать по модулю числа;
- отрывок из книги (любой, на свой выбор) не менее 10000 слов, разбитый в список по словам.
Реализовать для каждого из исходных списков один из представленных алгоритмов сортировки (подробнее почитать о них тут). Выбор тех четырех алгоритмов, которые будут использованы конкретно у вас:
import random
random.sample(range(1, 18), 4) # вернет список из 4 случайных значений в заданном диапазоне
- shaker sort, сортировка перемешиванием;
- bubble sort, сортировка пузырьком;
- comp sort, сортировка расческой;
- insertion sort, сортировка вставкой;
- Shellsort, сортировка Шелла;
- tree sort, сортировка деревом;
- Gnome sort, гномья сортировка;
- selection sort, сортировка выбором;
- Heapsort, пирамидальная сортировка;
- Quicksort, быстрая сортировка;
- Merge sort, сортировка слиянием;
- Counting sort, сортировка подсчетом;
- Bucket sort, блочная (карманная) сортировка;
- Radix sort, поразрядная сортировка;
- least significant digit;
- most significant digit;
- bitonic sort, битонная сортировка;
- timsort, гибридная сортировка.
- файл с текстовым представлением лабиринта;
- координаты аватара (если задали в стене, то переместить в любую соседнюю свободную);
- координаты ключа от выхода (если задали в стене, то переместить в любую соседнюю свободную);
- координаты выхода (на одной из внешних границ);
- правила нахождения пути до ключа и до выхода.
-
В папке _3 запустить скрипт gen_lab_origin.py, подождать его работу несколько минут;
-
Полученный файл maze-for-u.txt переместить в свою папку;
-
Найти любой маршрут от начальной координаты аватара до ключа, используя (выбрать или все, или по номеру сезона, в который вы родились, начиная с зимы):
a. алгоритм Дейкстры; b. поиск в ширину; c. поиск в глубину; d. жадный алгоритм.
-
Используя А* со следующими параметрами (вес g(x), вес h(x), максимальная длина хранимого списка возможных шагов), найти оптимальный путь до ближайшего выхода;
-
Сохранить в файл 'maze-for-me-done.txt', в котором точка ключа будет указана как '*', а сам маршрут построен точками к ключу и запятыми от него к выходу.