├── White_Belt ├── Количество_уникальных_строк │ ├── README.md │ └── Unique.cpp ├── Чтение_и_вывод_таблицы │ ├── input.txt │ ├── Table.cpp │ └── README.md ├── Работа_с_файлами │ ├── Часть1 │ │ ├── input.txt │ │ └── FileFirst.cpp │ ├── Часть2 │ │ ├── input.txt │ │ ├── output.txt │ │ └── FileSecond.cpp │ └── README.md ├── materials │ ├── W1P4.pdf │ ├── W2P1.pdf │ ├── W2P2.pdf │ ├── W3P1.pdf │ ├── W3P2.pdf │ ├── W3P3.pdf │ ├── W4P1.pdf │ ├── W4P2.pdf │ ├── W4P3.pdf │ └── W4P4.pdf ├── Класс_Rational │ ├── drobi1task.cpp │ ├── drobi2task.cpp │ ├── drobi3task.cpp │ ├── drobi4task.cpp │ ├── drobi5task.cpp │ └── README.md ├── Ежемесячные_дела │ ├── NewMounthTask.cpp │ └── README.md ├── Имена_и_фамилии-1 │ ├── nameClassFinal.cpp │ └── README.md ├── Имена_и_фамилии-2 │ ├── nameClassFinal.cpp │ └── README.md ├── Имена_и_фамилии-3 │ ├── nameClassFinal.cpp │ └── README.md ├── Исключения_в_классе_Rational │ ├── drobi.cpp │ └── README.md ├── Финальная_задача_курса │ └── finalWhiteProject.cpp ├── Двоичные_числа │ ├── README.md │ └── binSystem.cpp ├── Наибольший_общий_делитель │ ├── README.md │ └── NOD.cpp ├── AplusB │ ├── Hello.cpp │ └── README.md ├── Разворот_последовательности-2 │ ├── README.md │ └── Reverse.cpp ├── Минимальная_строка │ ├── README.md │ └── compairingOfStrings.cpp ├── Перемещение_строк │ ├── README.md │ └── MoveStrings.cpp ├── Второе_вхождение │ ├── README.md │ └── secondF_inString.cpp ├── Факториал │ ├── README.md │ └── Factorial.cpp ├── Максимизатор │ ├── README.md │ └── UpdateIfGreater.cpp ├── Средняя_температура │ ├── README.md │ └── Temperature.cpp ├── Сортировка_без_учета_регистра │ ├── README.md │ └── strSort.cpp ├── Сортировка_целых_чисел_по_модулю │ ├── README.md │ └── absSort.cpp ├── Анаграммы │ ├── README.md │ └── Anagramas.cpp ├── Уравнение │ ├── README.md │ └── quadraticEquation.cpp ├── Отбор_палиндромов │ ├── README.md │ └── PalindromFilter.cpp ├── Автобусные_остановки-2 │ ├── README.md │ └── bus_stops_2.cpp ├── Синонимы │ ├── README.md │ └── Synonimus.cpp ├── Обратимая_функция_с_умножением_и_делением │ └── README.md ├── Автобусные_остановки-3 │ ├── README.md │ └── bus_stops3.cpp ├── Автобусные_остановки-1 │ └── README.md ├── Очередь │ └── README.md ├── Работа_с_сервером_времени │ ├── GetCurrentTime.cpp │ └── README.md └── Структура_LectureTitle │ ├── README.md │ └── LectureTitle.cpp ├── spec_logo.jpg ├── Red_Belt ├── materials │ ├── 1.pdf │ ├── 2.pdf │ ├── 3.pdf │ ├── 4.pdf │ ├── 5.pdf │ └── Stuff │ │ └── Profile │ │ └── profile.h ├── week_6 │ ├── final_project_first_part.zip │ ├── final_project_second_part │ │ ├── synchronized.h │ │ ├── iterator_range.h │ │ ├── parse.h │ │ ├── profile_advanced.cpp │ │ ├── profile_advanced.h │ │ ├── parse.cpp │ │ └── search_server.h │ └── final_project_first_part │ │ ├── iterator_range.h │ │ ├── parse.h │ │ ├── profile_advanced.cpp │ │ ├── profile_advanced.h │ │ ├── search_server.h │ │ └── parse.cpp ├── week_5 │ ├── Сортировка слиянием-3 │ │ ├── MergeSort_3part │ │ └── MergeSort_3part.cpp │ ├── Move-семантика в SimpleVector │ │ └── README.md │ ├── Оператор присваивания для SimpleVector │ │ ├── simple_vector.cpp │ │ └── README.md │ ├── ConcurrentMap │ │ └── profile.h │ ├── Суммирование матрицы │ │ └── README.md │ └── Считалка Иосифа │ │ └── README.md ├── week_4 │ ├── Статистика web-сервера │ │ ├── solution │ │ │ ├── solution.zip │ │ │ ├── stats.h │ │ │ └── stats.cpp │ │ ├── http_request.h │ │ ├── stats.h │ │ └── stats.cpp │ ├── AirportCounter │ │ └── profile.h │ ├── Спортсмены │ │ ├── README.md │ │ └── athlets.cpp │ ├── StackVector │ │ └── stack_vector.h │ └── Translator │ │ └── translator.cpp ├── week_1 │ ├── Введение в макросы │ │ ├── Плохой макрос │ │ │ ├── README.md │ │ │ └── print_values.cpp │ │ ├── Макрос UNIQ_ID │ │ │ ├── uniq_id.cpp │ │ │ └── README.md │ │ ├── Генератор компараторов │ │ │ └── airline_ticket.h │ │ ├── Макрос UPDATE_FIELD │ │ │ └── airline_ticket.h │ │ └── Макрос LOG │ │ │ └── README.md │ ├── Шаблоны классов │ │ ├── Дек на основе двух векторов │ │ │ └── README.md │ │ └── Таблица │ │ │ ├── README.md │ │ │ └── table.cpp │ └── Максимальный элемент по предикату │ │ └── README.md ├── week_2 │ ├── Сортировка студентов по рейтингу │ │ ├── Optimized │ │ │ └── student.h │ │ ├── Original │ │ │ ├── student.h │ │ │ └── sort_students.cpp │ │ └── README.md │ └── Изучение нового языка │ │ ├── README.md │ │ └── learner.cpp └── week_3 │ ├── Пишем свой вектор │ └── simple_vector.h │ └── Swap, SortPointers, ReversedCopy │ └── README.md ├── Brown_Belt ├── week_5 │ ├── ТЗ_Личный_бюджет │ │ ├── ТЗ_Личный-бюджет_home-desktop-version │ │ │ ├── EteTests │ │ │ │ ├── 1.ans │ │ │ │ └── 1.dat │ │ │ ├── main.cpp │ │ │ ├── tools.h │ │ │ ├── tools.cpp │ │ │ ├── Makefile │ │ │ ├── date.cpp │ │ │ └── budget.h │ │ └── ТЗ_Личный-бюджет_professional-desktop-version │ │ │ ├── EteTests │ │ │ ├── 2.ans │ │ │ ├── 1.ans │ │ │ ├── 1.dat │ │ │ └── 2.dat │ │ │ ├── main.cpp │ │ │ ├── tools.h │ │ │ ├── Makefile │ │ │ ├── tools.cpp │ │ │ ├── date.cpp │ │ │ └── budget.h │ ├── Т_Эксперссы │ │ └── README.md │ ├── Т_Трекер-задач │ │ └── README.md │ ├── Т_Электронная-книга │ │ └── README.md │ └── Т_Система-бронирования-отелей │ │ └── README.md ├── week_3 │ ├── З_Конвейер │ │ └── a.out │ ├── З_Константность в шаблоне ConcurrentMap │ │ ├── concurrent_map_2 │ │ └── profile.h │ ├── Т_Зоопарк │ │ ├── animals.h │ │ └── zoo.cpp │ ├── З_Дерево выражений │ │ └── Common.h │ ├── З_operator[] в классе Polynomial │ │ └── profile.h │ └── З_Шаблон LazyValue │ │ └── lazy_value.cpp ├── materials │ ├── Notes │ │ ├── week_1.pdf │ │ ├── week_2.pdf │ │ ├── week_3.pdf │ │ ├── week_4.pdf │ │ └── week_5.pdf │ └── Stuff │ │ └── Profile │ │ └── profile.h ├── week_2 │ ├── З_Реструктуризация кода │ │ ├── StatsAgregators.zip │ │ ├── Makefile │ │ └── main.cpp │ ├── З_Библиотека работы с INI-файлами │ │ ├── INIanswer.rar │ │ ├── Makefile │ │ ├── ini.h │ │ └── ini.cpp │ ├── З_Двойная диспетчеризация │ │ ├── Makefile │ │ └── game_object.h │ ├── Т_Рефакторинг чужого кода │ │ ├── Makefile │ │ ├── json.h │ │ └── xml.h │ ├── Т_Загрузка расходов из формата JSON │ │ └── json.h │ └── Т_Загрузка расходов из формата XML │ │ └── xml.h ├── week_6-final │ ├── Транспортный-справочник_часть-A │ │ └── EteTests │ │ │ ├── 1.ans │ │ │ └── 1.dat │ ├── Транспортный-справочник_часть-B │ │ └── EteTests │ │ │ ├── 1.ans │ │ │ ├── 2.ans │ │ │ ├── 1.dat │ │ │ └── 2.dat │ ├── Транспортный-справочник_часть-C │ │ └── EteTests │ │ │ ├── 1.ans │ │ │ ├── 2.ans │ │ │ ├── 3.ans │ │ │ ├── 1.dat │ │ │ ├── 2.dat │ │ │ └── 3.dat │ └── Транспортный-справочник_часть-D │ │ ├── EteTests │ │ ├── json2.dat │ │ ├── json3.dat │ │ └── json1.ans │ │ └── Makefile └── week_4 │ ├── З_Cache │ └── Makefile │ ├── З_Текстуры │ ├── Makefile │ └── Textures.h │ └── З_RAII Booking │ ├── booking.h │ ├── new_trip_manager.h │ └── old_booking_providers.h ├── Yellow_Belt ├── materials │ ├── week1.pdf │ ├── week2.pdf │ ├── week3.pdf │ ├── week4.pdf │ ├── week5.pdf │ └── html │ │ └── Сводная таблица по алгоритмам поиска _ Coursera_files │ │ ├── allStyles.6b654a5736bc271bf5b4.js │ │ ├── AWS-GluonCV-HPP-unit.png │ │ ├── TensorFlow_DataDevelopment_Assets_2Promo-Unit.png │ │ ├── bfe8c8aa-f7a6-46f4-5ede-db5a212ce2cc │ │ ├── bfe8c8aa-f7a6-46f4-5ede-db5a212ce2cc(1) │ │ ├── bfe8c8aa-f7a6-46f4-5ede-db5a212ce2cc(2) │ │ └── 4.5418151e901dcba9488b.js ├── week_4 │ ├── Поиск ближайшего элемента │ │ ├── FindNearestElement │ │ ├── FindNearestElement.o │ │ └── FindNearestElement.cpp │ ├── Группировка строк по префиксу │ │ ├── Часть 1. Группировка по символу │ │ │ ├── FindStartsWith.o │ │ │ └── FindStartsWith.cpp │ │ └── Часть 2. Группировка по префиксу │ │ │ ├── FindStartsWith2.o │ │ │ └── FindStartsWith2.cpp │ ├── Перебор перестановок │ │ ├── README.md │ │ └── MakePermutations.cpp │ ├── Удаление повторов │ │ ├── RemoveDuplicates.cpp │ │ └── README.md │ ├── Часть вектора │ │ ├── README.md │ │ └── PartOfVector.cpp │ ├── Часть множества │ │ ├── PartOfSet.cpp │ │ └── README.md │ ├── Сортировка слиянием │ │ ├── MergeSort_1part.cpp │ │ └── MergeSort_2part.cpp │ ├── Разбиения на слова │ │ ├── SplitIntoWords.cpp │ │ └── README.md │ └── Построение арифметического выражения │ │ ├── Часть 1 │ │ └── BuildExpression.cpp │ │ └── Часть 2 │ │ └── BuildExpression2.cpp ├── week_3 │ ├── Декомпозиция программы — 2 │ │ ├── Декомпозиция программы — 2.rar │ │ ├── query.h │ │ ├── bus_manager.h │ │ ├── responses.h │ │ ├── main.cpp │ │ ├── bus_manager.cpp │ │ ├── query.cpp │ │ └── responses.cpp │ ├── Реализовать_функции_объявленные_в_заголовочном_файле │ │ ├── sum_reverse_sort.h │ │ ├── sum_reverse_sort.cpp │ │ └── README.md │ ├── Написать_объявление_класса │ │ ├── rectangle.h │ │ └── README.md │ └── Реализовать класс_объявленный_в_заголовочном_файле │ │ ├── phone_number.cpp │ │ └── phone_number.h ├── week_6 │ └── Курсовой проект │ │ ├── condition_parser.h │ │ ├── Answer │ │ ├── condition_parser.h │ │ ├── token.h │ │ ├── database.h │ │ ├── date.h │ │ └── node.h │ │ ├── CMakeLists.txt │ │ ├── token.h │ │ ├── database.h │ │ ├── date.h │ │ └── node.h ├── week_5 │ ├── Наследование своими руками │ │ ├── Animal.cpp │ │ └── README.md │ ├── Грамотно рефакторим код │ │ └── README.md │ └── Отправка уведомлений │ │ └── SmsAndEmailNotifiers.cpp ├── week_1 │ ├── Ссылка_на_элемент │ │ ├── README.md │ │ └── ItemLink.cpp │ ├── Масса_блоков │ │ ├── MassOfBlocks.cpp │ │ └── README.md │ ├── Все_в_квадрат │ │ └── ShablonSqrAnswer.cpp │ └── Средняя_температура - 2 │ │ ├── README.md │ │ └── AverageTemperature.cpp └── week_2 │ └── Тесты_для_функции_IsPalindrom │ └── README.md └── README.md /White_Belt/Количество_уникальных_строк/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /White_Belt/Чтение_и_вывод_таблицы/input.txt: -------------------------------------------------------------------------------- 1 | 3 3 2 | 1,2,3 3 | 4,5,6 4 | 7,8,9 -------------------------------------------------------------------------------- /White_Belt/Работа_с_файлами/Часть1/input.txt: -------------------------------------------------------------------------------- 1 | Keep calm 2 | and 3 | learn C++ 4 | -------------------------------------------------------------------------------- /White_Belt/Работа_с_файлами/Часть2/input.txt: -------------------------------------------------------------------------------- 1 | Keep calm 2 | and 3 | learn C++ 4 | -------------------------------------------------------------------------------- /White_Belt/Работа_с_файлами/Часть2/output.txt: -------------------------------------------------------------------------------- 1 | Keep calm 2 | and 3 | learn C++ 4 | -------------------------------------------------------------------------------- /spec_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/spec_logo.jpg -------------------------------------------------------------------------------- /Red_Belt/materials/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/materials/1.pdf -------------------------------------------------------------------------------- /Red_Belt/materials/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/materials/2.pdf -------------------------------------------------------------------------------- /Red_Belt/materials/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/materials/3.pdf -------------------------------------------------------------------------------- /Red_Belt/materials/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/materials/4.pdf -------------------------------------------------------------------------------- /Red_Belt/materials/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/materials/5.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W1P4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W1P4.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W2P1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W2P1.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W2P2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W2P2.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W3P1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W3P1.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W3P2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W3P2.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W3P3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W3P3.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W4P1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W4P1.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W4P2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W4P2.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W4P3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W4P3.pdf -------------------------------------------------------------------------------- /White_Belt/materials/W4P4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/materials/W4P4.pdf -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/EteTests/1.ans: -------------------------------------------------------------------------------- 1 | 20 2 | 18.96 3 | 28.96 4 | 27.2076 5 | -------------------------------------------------------------------------------- /Yellow_Belt/materials/week1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/materials/week1.pdf -------------------------------------------------------------------------------- /Yellow_Belt/materials/week2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/materials/week2.pdf -------------------------------------------------------------------------------- /Yellow_Belt/materials/week3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/materials/week3.pdf -------------------------------------------------------------------------------- /Yellow_Belt/materials/week4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/materials/week4.pdf -------------------------------------------------------------------------------- /Yellow_Belt/materials/week5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/materials/week5.pdf -------------------------------------------------------------------------------- /Brown_Belt/week_3/З_Конвейер/a.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/week_3/З_Конвейер/a.out -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/EteTests/2.ans: -------------------------------------------------------------------------------- 1 | 20 2 | 18.96 3 | 8.46 4 | 8.46 5 | -------------------------------------------------------------------------------- /Brown_Belt/materials/Notes/week_1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/materials/Notes/week_1.pdf -------------------------------------------------------------------------------- /Brown_Belt/materials/Notes/week_2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/materials/Notes/week_2.pdf -------------------------------------------------------------------------------- /Brown_Belt/materials/Notes/week_3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/materials/Notes/week_3.pdf -------------------------------------------------------------------------------- /Brown_Belt/materials/Notes/week_4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/materials/Notes/week_4.pdf -------------------------------------------------------------------------------- /Brown_Belt/materials/Notes/week_5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/materials/Notes/week_5.pdf -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/EteTests/1.ans: -------------------------------------------------------------------------------- 1 | 20 2 | 18.96 3 | 28.96 4 | 27.2076 5 | -------------------------------------------------------------------------------- /White_Belt/Класс_Rational/drobi1task.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Класс_Rational/drobi1task.cpp -------------------------------------------------------------------------------- /White_Belt/Класс_Rational/drobi2task.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Класс_Rational/drobi2task.cpp -------------------------------------------------------------------------------- /White_Belt/Класс_Rational/drobi3task.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Класс_Rational/drobi3task.cpp -------------------------------------------------------------------------------- /White_Belt/Класс_Rational/drobi4task.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Класс_Rational/drobi4task.cpp -------------------------------------------------------------------------------- /White_Belt/Класс_Rational/drobi5task.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Класс_Rational/drobi5task.cpp -------------------------------------------------------------------------------- /White_Belt/Чтение_и_вывод_таблицы/Table.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Чтение_и_вывод_таблицы/Table.cpp -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_first_part.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/week_6/final_project_first_part.zip -------------------------------------------------------------------------------- /White_Belt/Ежемесячные_дела/NewMounthTask.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Ежемесячные_дела/NewMounthTask.cpp -------------------------------------------------------------------------------- /White_Belt/Имена_и_фамилии-1/nameClassFinal.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Имена_и_фамилии-1/nameClassFinal.cpp -------------------------------------------------------------------------------- /White_Belt/Имена_и_фамилии-2/nameClassFinal.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Имена_и_фамилии-2/nameClassFinal.cpp -------------------------------------------------------------------------------- /White_Belt/Имена_и_фамилии-3/nameClassFinal.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Имена_и_фамилии-3/nameClassFinal.cpp -------------------------------------------------------------------------------- /White_Belt/Исключения_в_классе_Rational/drobi.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Исключения_в_классе_Rational/drobi.cpp -------------------------------------------------------------------------------- /Red_Belt/week_5/Сортировка слиянием-3/MergeSort_3part: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/week_5/Сортировка слиянием-3/MergeSort_3part -------------------------------------------------------------------------------- /White_Belt/Финальная_задача_курса/finalWhiteProject.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/White_Belt/Финальная_задача_курса/finalWhiteProject.cpp -------------------------------------------------------------------------------- /Red_Belt/week_4/Статистика web-сервера/solution/solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Red_Belt/week_4/Статистика web-сервера/solution/solution.zip -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Реструктуризация кода/StatsAgregators.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/week_2/З_Реструктуризация кода/StatsAgregators.zip -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Поиск ближайшего элемента/FindNearestElement: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/week_4/Поиск ближайшего элемента/FindNearestElement -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Библиотека работы с INI-файлами/INIanswer.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/week_2/З_Библиотека работы с INI-файлами/INIanswer.rar -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Поиск ближайшего элемента/FindNearestElement.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/week_4/Поиск ближайшего элемента/FindNearestElement.o -------------------------------------------------------------------------------- /White_Belt/Двоичные_числа/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Двоичные числа 2 | 3 | На вход дано целое положительное число N. Выведите его в двоичной 4 | системе счисления без ведущих нулей. -------------------------------------------------------------------------------- /White_Belt/Наибольший_общий_делитель/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Наибольший общий делитель 2 | 3 | В stdin даны два натуральных числа. 4 | Выведите в stdout их наибольший общий делитель. -------------------------------------------------------------------------------- /Brown_Belt/week_3/З_Константность в шаблоне ConcurrentMap/concurrent_map_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Brown_Belt/week_3/З_Константность в шаблоне ConcurrentMap/concurrent_map_2 -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Двойная диспетчеризация/Makefile: -------------------------------------------------------------------------------- 1 | CC=g++ 2 | CFLAGS= -std=c++1z -Wall 3 | SOURCES=collide.cpp geo2d.cpp 4 | OBJECTS=collide.o 5 | 6 | all: 7 | $(CC) $(CFLAGS) -o $(OBJECTS) $(SOURCES) 8 | 9 | -------------------------------------------------------------------------------- /White_Belt/AplusB/Hello.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | int main() { 5 | long A, B; 6 | 7 | cin >> A; 8 | cin >> B; 9 | 10 | cout << A+B << endl; 11 | return 0; 12 | } 13 | -------------------------------------------------------------------------------- /White_Belt/AplusB/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: A + B 2 | 3 | На вход программе через стандартный ввод передаются два целых числа, по модулю не превышающие 100000. 4 | Выведите в стандартный вывод их сумму. -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/Декомпозиция программы — 2.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/week_3/Декомпозиция программы — 2/Декомпозиция программы — 2.rar -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Библиотека работы с INI-файлами/Makefile: -------------------------------------------------------------------------------- 1 | CC=g++ 2 | CFLAGS= -std=c++1z -Wall 3 | SOURCES=test_ini.cpp ini.cpp 4 | OBJECTS=test_ini.o 5 | 6 | all: 7 | $(CC) $(CFLAGS) -o $(OBJECTS) $(SOURCES) 8 | 9 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/Т_Эксперссы/README.md: -------------------------------------------------------------------------------- 1 | Решение можно найти тут: 2 | 3 | [Экспрессы](https://github.com/Jerma066/Coursera_MIPT_Cpp/tree/master/Red_Belt/week_2/%D0%AD%D0%BA%D1%81%D0%BF%D1%80%D0%B5%D1%81%D1%81%D1%8B) 4 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/Т_Рефакторинг чужого кода/Makefile: -------------------------------------------------------------------------------- 1 | CC=g++ 2 | CFLAGS= -std=c++1z -Wall 3 | SOURCES=refactoring.cpp json.cpp xml.cpp 4 | OBJECTS=refactoring.o 5 | 6 | all: 7 | $(CC) $(CFLAGS) -o $(OBJECTS) $(SOURCES) 8 | 9 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-A/EteTests/1.ans: -------------------------------------------------------------------------------- 1 | Bus 256: 6 stops on route, 5 unique stops, 4371.02 route length 2 | Bus 750: 5 stops on route, 3 unique stops, 20939.5 route length 3 | Bus 751: not found 4 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-B/EteTests/1.ans: -------------------------------------------------------------------------------- 1 | Bus 256: 6 stops on route, 5 unique stops, 4371.02 route length 2 | Bus 750: 5 stops on route, 3 unique stops, 20939.5 route length 3 | Bus 751: not found 4 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-C/EteTests/1.ans: -------------------------------------------------------------------------------- 1 | Bus 256: 6 stops on route, 5 unique stops, 4371.02 route length 2 | Bus 750: 5 stops on route, 3 unique stops, 20939.5 route length 3 | Bus 751: not found 4 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-D/EteTests/json2.dat: -------------------------------------------------------------------------------- 1 | { 2 | "base_requests": [ 3 | {"type": "Bus", "name": "828", "stops": ["Biryulyovo Zapadnoye"], "is_roundtrip": true}], 4 | "stat_requests": [] 5 | } 6 | -------------------------------------------------------------------------------- /Red_Belt/week_4/Статистика web-сервера/http_request.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | using namespace std; 6 | 7 | struct HttpRequest { 8 | string_view method, uri, protocol; 9 | }; 10 | 11 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Реструктуризация кода/Makefile: -------------------------------------------------------------------------------- 1 | CC=g++ 2 | CFLAGS= -std=c++1z -Wall 3 | SOURCES=stats_aggregator_test.cpp stats_aggregator.cpp main.cpp 4 | OBJECTS=main.o 5 | 6 | all: 7 | $(CC) $(CFLAGS) -o $(OBJECTS) $(SOURCES) 8 | 9 | -------------------------------------------------------------------------------- /Brown_Belt/week_4/З_Cache/Makefile: -------------------------------------------------------------------------------- 1 | CXX=g++ 2 | 3 | SOURCES = Solution.cpp main.cpp 4 | FLAGS = -std=c++1z -pthread 5 | 6 | all : 7 | $(CXX) $(CXXFLAGS) $(FLAGS) -o main $(SOURCES) 8 | ./ main 9 | 10 | clean : 11 | rm main 12 | -------------------------------------------------------------------------------- /Brown_Belt/week_4/З_Текстуры/Makefile: -------------------------------------------------------------------------------- 1 | CXX=g++ 2 | 3 | SOURCES = Solution.cpp Textures.cpp main.cpp 4 | FLAGS = -std=c++1z 5 | 6 | all: 7 | $(CXX) $(CXXFLAGS) $(FLAGS) -o main $(SOURCES) 8 | ./main 9 | 10 | clean: 11 | rm main 12 | -------------------------------------------------------------------------------- /Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/allStyles.6b654a5736bc271bf5b4.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([["allStyles"],[]]); 2 | //# sourceMappingURL=allStyles.6b654a5736bc271bf5b4.js.map -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Группировка строк по префиксу/Часть 1. Группировка по символу/FindStartsWith.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/week_4/Группировка строк по префиксу/Часть 1. Группировка по символу/FindStartsWith.o -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Группировка строк по префиксу/Часть 2. Группировка по префиксу/FindStartsWith2.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/week_4/Группировка строк по префиксу/Часть 2. Группировка по префиксу/FindStartsWith2.o -------------------------------------------------------------------------------- /Brown_Belt/week_5/Т_Трекер-задач/README.md: -------------------------------------------------------------------------------- 1 | Полное решение данной задачи можно найти тут: 2 | 3 | [Трекер задач](https://github.com/Jerma066/Coursera_MIPT_Cpp/tree/master/Yellow_Belt/week_1/%D0%A2%D1%80%D0%B5%D0%BA%D0%B5%D1%80_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87) 4 | 5 | -------------------------------------------------------------------------------- /White_Belt/Разворот_последовательности-2/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Разворот последовательности — 2 2 | 3 | Реализуйте функцию vector Reversed(const vector& v), возвращающую 4 | копию вектора v, в которой числа переставлены в обратном порядке. -------------------------------------------------------------------------------- /Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/AWS-GluonCV-HPP-unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/AWS-GluonCV-HPP-unit.png -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/main.cpp: -------------------------------------------------------------------------------- 1 | #include "budget.h" 2 | 3 | #include 4 | 5 | int main() { 6 | size_t n; 7 | std::cin >> n; 8 | BudgetManager bm; 9 | bm.Process(n, std::cin); 10 | return 0; 11 | } 12 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/Т_Электронная-книга/README.md: -------------------------------------------------------------------------------- 1 | Решение можно найти тут: 2 | 3 | [Электроная книга](https://github.com/Jerma066/Coursera_MIPT_Cpp/tree/master/Red_Belt/week_2/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BD%D0%B8%D0%B3%D0%B0) 4 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/main.cpp: -------------------------------------------------------------------------------- 1 | #include "budget.h" 2 | 3 | #include 4 | 5 | int main() { 6 | size_t n; 7 | std::cin >> n; 8 | BudgetManager bm; 9 | bm.Process(n, std::cin); 10 | return 0; 11 | } 12 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Реализовать_функции_объявленные_в_заголовочном_файле/sum_reverse_sort.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | int Sum(int x, int y); 9 | string Reverse(string s); 10 | void Sort(vector& nums); 11 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/condition_parser.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "node.h" 4 | 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | shared_ptr ParseCondition(istream& is); 11 | 12 | void TestParseCondition(); 13 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/Answer/condition_parser.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "node.h" 4 | 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | shared_ptr ParseCondition(istream& is); 11 | 12 | void TestParseCondition(); 13 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/tools.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | namespace tools { 8 | 9 | std::vector SplitBy(std::string_view str, char sep); 10 | 11 | } // tools 12 | -------------------------------------------------------------------------------- /White_Belt/Минимальная_строка/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Минимальная строка 2 | 3 | В стандартном потоке даны три строки, разделённые пробелом. Каждая строка 4 | состоит из строчных латинских букв и имеет длину не более 30 символов. 5 | Выведите в стандартный вывод лексикографически минимальную из них. -------------------------------------------------------------------------------- /White_Belt/Перемещение_строк/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Перемещение строк 2 | 3 | Напишите функцию MoveStrings, которая принимает два вектора строк, source и destination, 4 | и дописывает все строки из первого вектора в конец второго. После выполнения функции 5 | вектор source должен оказаться пустым. -------------------------------------------------------------------------------- /Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/TensorFlow_DataDevelopment_Assets_2Promo-Unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jerma066/Coursera_MIPT_Cpp/HEAD/Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/TensorFlow_DataDevelopment_Assets_2Promo-Unit.png -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.15) 2 | project(_) 3 | 4 | set(CMAKE_CXX_STANDARD 17) 5 | 6 | add_executable(_ main.cpp token.cpp token.h condition_parser.cpp condition_parser.h date.cpp date.h database.cpp database.h node.cpp node.h condition_parser_test.cpp test_runner.h) -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-B/EteTests/2.ans: -------------------------------------------------------------------------------- 1 | Bus 256: 6 stops on route, 5 unique stops, 4371.02 route length 2 | Bus 750: 5 stops on route, 3 unique stops, 20939.5 route length 3 | Bus 751: not found 4 | Stop Samara: not found 5 | Stop Prazhskaya: no buses 6 | Stop Biryulyovo Zapadnoye: buses 256 828 7 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-C/EteTests/2.ans: -------------------------------------------------------------------------------- 1 | Bus 256: 6 stops on route, 5 unique stops, 4371.02 route length 2 | Bus 750: 5 stops on route, 3 unique stops, 20939.5 route length 3 | Bus 751: not found 4 | Stop Samara: not found 5 | Stop Prazhskaya: no buses 6 | Stop Biryulyovo Zapadnoye: buses 256 828 7 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Написать_объявление_класса/rectangle.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class Rectangle { 4 | public: 5 | Rectangle(int width, int height); 6 | 7 | int GetArea() const; 8 | int GetPerimeter() const; 9 | int GetWidth() const; 10 | int GetHeight() const; 11 | 12 | private: 13 | int width_, height_; 14 | }; 15 | -------------------------------------------------------------------------------- /White_Belt/Второе_вхождение/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Второе вхождение 2 | 3 | Дана строка. Найдите в этой строке второе вхождение буквы f и выведите индекс этого 4 | вхождения. Если буква f в данной строке встречается только один раз, выведите число -1, 5 | а если не встречается ни разу, выведите число -2. Индексы нумеруются с нуля. -------------------------------------------------------------------------------- /White_Belt/Факториал/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Факториал 2 | 3 | Напишите функцию, которая 4 | 5 | *называется Factorial 6 | *возвращает int 7 | *принимает int и возвращает факториал своего аргумента. Гарантируется, 8 | что аргумент функции по модулю не превышает 10. Для отрицательных аргументов 9 | функция должна возвращать 1. -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-C/EteTests/3.ans: -------------------------------------------------------------------------------- 1 | Bus 256: 6 stops on route, 5 unique stops, 5950 route length, 1.361239 curvature 2 | Bus 750: 5 stops on route, 3 unique stops, 27600 route length, 1.318084 curvature 3 | Bus 751: not found 4 | Stop Samara: not found 5 | Stop Prazhskaya: no buses 6 | Stop Biryulyovo Zapadnoye: buses 256 828 7 | -------------------------------------------------------------------------------- /White_Belt/Максимизатор/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Максимизатор 2 | 3 | Напишите функцию UpdateIfGreater, которая принимает два целочисленных аргумента: 4 | first и second. Если first оказался больше second, Ваша функция должна записывать 5 | в second значение параметра first. При этом изменение параметра second должно быть 6 | видно на вызывающей стороне. -------------------------------------------------------------------------------- /Brown_Belt/week_5/Т_Система-бронирования-отелей/README.md: -------------------------------------------------------------------------------- 1 | Полное решение данной задачи можно найти тут: 2 | 3 | [Система бронирования отелей](https://github.com/Jerma066/Coursera_MIPT_Cpp/tree/master/Red_Belt/week_2/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%20%D0%B1%D1%80%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%BE%D1%82%D0%B5%D0%BB%D0%B5%D0%B9) 4 | 5 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/EteTests/1.dat: -------------------------------------------------------------------------------- 1 | 8 2 | Earn 2000-01-02 2000-01-06 20 3 | ComputeIncome 2000-01-01 2001-01-01 4 | PayTax 2000-01-02 2000-01-03 5 | ComputeIncome 2000-01-01 2001-01-01 6 | Earn 2000-01-03 2000-01-03 10 7 | ComputeIncome 2000-01-01 2001-01-01 8 | PayTax 2000-01-03 2000-01-03 9 | ComputeIncome 2000-01-01 2001-01-01 10 | -------------------------------------------------------------------------------- /White_Belt/Средняя_температура/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Средняя температура 2 | 3 | Даны значения температуры, наблюдавшиеся в течение N подряд идущих дней. 4 | Найдите номера дней (в нумерации с нуля) со значением температуры выше 5 | среднего арифметического за все N дней. 6 | 7 | Гарантируется, что среднее арифметическое значений температуры является 8 | целым числом. -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/EteTests/1.dat: -------------------------------------------------------------------------------- 1 | 8 2 | Earn 2000-01-02 2000-01-06 20 3 | ComputeIncome 2000-01-01 2001-01-01 4 | PayTax 2000-01-02 2000-01-03 5 | ComputeIncome 2000-01-01 2001-01-01 6 | Earn 2000-01-03 2000-01-03 10 7 | ComputeIncome 2000-01-01 2001-01-01 8 | PayTax 2000-01-03 2000-01-03 9 | ComputeIncome 2000-01-01 2001-01-01 10 | -------------------------------------------------------------------------------- /Brown_Belt/week_4/З_Текстуры/Textures.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Common.h" 4 | 5 | #include 6 | 7 | std::unique_ptr MakeTextureSolid(Size size, char pixel); 8 | 9 | std::unique_ptr MakeTextureCheckers(Size size, char pixel1, 10 | char pixel2); 11 | 12 | std::unique_ptr MakeTextureCow(); 13 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/EteTests/2.dat: -------------------------------------------------------------------------------- 1 | 8 2 | Earn 2000-01-02 2000-01-06 20 3 | ComputeIncome 2000-01-01 2001-01-01 4 | PayTax 2000-01-02 2000-01-03 13 5 | ComputeIncome 2000-01-01 2001-01-01 6 | Spend 2000-12-30 2001-01-02 14 7 | ComputeIncome 2000-01-01 2001-01-01 8 | PayTax 2000-12-30 2000-12-30 13 9 | ComputeIncome 2000-01-01 2001-01-01 10 | -------------------------------------------------------------------------------- /White_Belt/Сортировка_без_учета_регистра/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Сортировка без учёта регистра 2 | 3 | В стандартном потоке дана одна строка, состоящая из числа N и следующих за ним N строк S. 4 | Между собой число и строки разделены пробелом. 5 | 6 | Отсортируйте строки S в лексикографическом порядке по возрастанию, игнорируя регистр букв, 7 | и выведите их в стандартный поток вывода. -------------------------------------------------------------------------------- /White_Belt/Сортировка_целых_чисел_по_модулю/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Сортировка целых чисел по модулю 2 | 3 | В стандартном потоке дана одна строка, состоящая из N + 1 целых чисел. 4 | Первым числом идёт само число N. Далее следуют ещё N чисел, обозначим 5 | их за массив A. Между собой числа разделены пробелом. 6 | 7 | Отсортируйте массив А по модулю и выведите его в стандартный поток. -------------------------------------------------------------------------------- /White_Belt/Анаграммы/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Анаграммы 2 | 3 | Слова называются анаграммами друг друга, если одно из них можно получить перестановкой букв в другом. 4 | Например, слово «eat» можно получить перестановкой букв слова «tea», поэтому эти слова являются 5 | анаграммами друг друга. Даны пары слов, проверьте для каждой из них, являются ли слова этой пары 6 | анаграммами друг друга. -------------------------------------------------------------------------------- /White_Belt/Уравнение/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Уравнение 2 | 3 | На вход вашей программы в стандартном потоке ввода подаются действительные 4 | коэффициенты A, B и C уравнения Ax² + Bx + C = 0. Выведите все его 5 | различные действительные корни в поток вывода в любом порядке, при этом 6 | разделяя корни пробелами. Гарантируется, что хотя бы один из коэффициентов 7 | уравнения не равен нулю. -------------------------------------------------------------------------------- /White_Belt/Класс_Rational/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Класс Rational 2 | 3 | В этой задаче вам надо разработать класс для представления рациональных 4 | чисел и внедрить его в систему типов языка С++ так, чтобы им можно было 5 | пользоваться естественным образом. Задание состоит из нескольких частей. 6 | К каждой части приложен файл с заготовкой программы, который имеет 7 | следующую структуру ... -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Реализовать_функции_объявленные_в_заголовочном_файле/sum_reverse_sort.cpp: -------------------------------------------------------------------------------- 1 | #include "sum_reverse_sort.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | int Sum(int x, int y) { 7 | return x + y; 8 | } 9 | 10 | string Reverse(string s) { 11 | reverse(s.begin(), s.end()); 12 | return s; 13 | } 14 | 15 | void Sort(vector& nums) { 16 | sort(nums.begin(), nums.end()); 17 | } 18 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Введение в макросы/Плохой макрос/README.md: -------------------------------------------------------------------------------- 1 | ## Задание по программированию: Плохой макрос 2 | 3 | Вам дан макрос, который распечатывает два переданных ему значения в переданный поток вывода. В реализации макроса есть недостаток, ограничивающий его применимость в реальных программах. Вам требуется найти и устранить недостаток. 4 | ```cpp 5 | #define PRINT_VALUES(out, x, y) out << (x) << endl; out << (y) << endl 6 | ``` 7 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/tools.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace tools { 10 | 11 | std::vector SplitBy(std::string_view str, char sep); 12 | 13 | } // tools 14 | 15 | std::ostream& operator<< (std::ostream& output, const std::pair& pair); 16 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-D/Makefile: -------------------------------------------------------------------------------- 1 | CXX=g++ 2 | SOURCES= json.cpp main.cpp 3 | TESTFLAGS= -std=c++1z 4 | TEST_SOURCES= json.cpp transport_d.cpp 5 | 6 | all: 7 | $(CXX) $(TESTFLAGS) $(CXXFLAGS) -o main $(SOURCES) 8 | 9 | test: 10 | $(CXX) $(TESTFLAGS) -o ete_test $(TEST_SOURCES) 11 | ./ete_test < EteTests/json1.dat 12 | rm ete_test 13 | 14 | debug: 15 | $(CXX) $(TESTFLAGS) -g $(TEST_SOURCES) 16 | gdb -tui --args a.out 17 | -------------------------------------------------------------------------------- /White_Belt/Отбор_палиндромов/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Отбор палиндромов 2 | 3 | Напишите функцию, которая 4 | 5 | *называется PalindromFilter 6 | *возвращает vector 7 | *принимает vector words и int minLength и 8 | возвращает все строки из вектора words, которые 9 | являются палиндромами и имеют длину не меньше minLength 10 | 11 | Входной вектор содержит не более 100 строк, длина каждой строки не больше 100 символов. -------------------------------------------------------------------------------- /Red_Belt/week_1/Введение в макросы/Плохой макрос/print_values.cpp: -------------------------------------------------------------------------------- 1 | #include "test_runner.h" 2 | 3 | #include 4 | using namespace std; 5 | 6 | #define PRINT_VALUES(out, x, y) out << (x) << endl << (y) << endl 7 | 8 | int main() { 9 | TestRunner tr; 10 | tr.RunTest([] { 11 | ostringstream output; 12 | PRINT_VALUES(output, 5, "red belt"); 13 | ASSERT_EQUAL(output.str(), "5\nred belt\n"); 14 | }, "PRINT_VALUES usage example"); 15 | } 16 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Введение в макросы/Макрос UNIQ_ID/uniq_id.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | #define UNIQ_ID_IMPL_2(lineno) _a_local_var_##lineno 6 | #define UNIQ_ID_IMPL(lineno) UNIQ_ID_IMPL_2(lineno) 7 | #define UNIQ_ID UNIQ_ID_IMPL(__LINE__) 8 | 9 | int main() { 10 | int UNIQ_ID = 0; 11 | string UNIQ_ID = "hello"; 12 | vector UNIQ_ID = {"hello", "world"}; 13 | vector UNIQ_ID = {1, 2, 3, 4}; 14 | } 15 | -------------------------------------------------------------------------------- /White_Belt/Работа_с_файлами/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Работа с файлами 2 | 3 | Часть 1 4 | Ваша программа должна считать содержимое файла input.txt и напечатать его на экран без изменений. 5 | Гарантируется, что содержимое файла input.txt заканчивается переводом строки. 6 | 7 | Часть 2 8 | Снова считайте все содержимое файла input.txt, но на этот раз выведите его в файл output.txt . 9 | Точно так же гарантируется, что содержимое файла input.txt заканчивается переводом строки. -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/tools.cpp: -------------------------------------------------------------------------------- 1 | #include "tools.h" 2 | 3 | namespace tools { 4 | 5 | std::vector SplitBy(std::string_view s, char sep) { 6 | std::vector result; 7 | 8 | while (!s.empty()) { 9 | size_t pos = s.find(sep); 10 | result.push_back(s.substr(0, pos)); 11 | s.remove_prefix(pos != s.npos ? pos + 1 : s.size()); 12 | } 13 | 14 | // NVRO 15 | return result; 16 | } 17 | 18 | } // tools 19 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/query.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | enum class QueryType { 11 | NewBus, 12 | BusesForStop, 13 | StopsForBus, 14 | AllBuses 15 | }; 16 | 17 | struct Query { 18 | QueryType type; 19 | string bus; 20 | string stop; 21 | vector stops; 22 | }; 23 | 24 | istream& operator >> (istream& is, Query& q); 25 | 26 | 27 | -------------------------------------------------------------------------------- /Yellow_Belt/week_5/Наследование своими руками/Animal.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | 6 | class Animal { 7 | public: 8 | Animal(const string& name = "animal") 9 | :Name(name){ 10 | } 11 | 12 | const string Name; 13 | }; 14 | 15 | 16 | class Dog : public Animal{ 17 | public: 18 | Dog(const string& name = "dog"):Animal(name) { 19 | } 20 | 21 | void Bark() { 22 | cout << Name << " barks: woof!" << endl; 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Введение в макросы/Генератор компараторов/airline_ticket.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | using namespace std; 5 | 6 | struct Date { 7 | int year, month, day; 8 | }; 9 | 10 | struct Time { 11 | int hours, minutes; 12 | }; 13 | 14 | struct AirlineTicket { 15 | string from; 16 | string to; 17 | string airline; 18 | Date departure_date; 19 | Time departure_time; 20 | Date arrival_date; 21 | Time arrival_time; 22 | int price; 23 | }; 24 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Введение в макросы/Макрос UPDATE_FIELD/airline_ticket.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | using namespace std; 5 | 6 | struct Date { 7 | int year, month, day; 8 | }; 9 | 10 | struct Time { 11 | int hours, minutes; 12 | }; 13 | 14 | struct AirlineTicket { 15 | string from; 16 | string to; 17 | string airline; 18 | Date departure_date; 19 | Time departure_time; 20 | Date arrival_date; 21 | Time arrival_time; 22 | int price; 23 | }; 24 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/Makefile: -------------------------------------------------------------------------------- 1 | CXX=g++ 2 | SOURCES= tools.cpp date.cpp budget.cpp main.cpp 3 | TESTFLAGS= -std=c++1z 4 | TEST_SOURCES= tools.cpp date.cpp budget.cpp UnitTests/utests.cpp 5 | 6 | all: 7 | $(CXX) $(TESTFLAGS) $(CXXFLAGS) -o main $(SOURCES) 8 | 9 | test: 10 | $(CXX) $(TESTFLAGS) -o unit_tests $(TEST_SOURCES) 11 | ./unit_tests 12 | rm unit_tests 13 | 14 | debug: 15 | $(CXX) $(TESTFLAGS) $(CXXFLAGS) -g $(SOURCES) 16 | gdb -tui --args a.out 17 | rm a.out 18 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/Makefile: -------------------------------------------------------------------------------- 1 | CXX=g++ 2 | SOURCES= tools.cpp date.cpp budget.cpp main.cpp 3 | TESTFLAGS= -std=c++1z 4 | TEST_SOURCES= tools.cpp date.cpp budget.cpp UnitTests/utests.cpp 5 | 6 | all: 7 | $(CXX) $(TESTFLAGS) $(CXXFLAGS) -o main $(SOURCES) 8 | 9 | test: 10 | $(CXX) $(TESTFLAGS) -o unit_tests $(TEST_SOURCES) 11 | ./unit_tests 12 | rm unit_tests 13 | 14 | debug: 15 | $(CXX) $(TESTFLAGS) $(CXXFLAGS) -g $(SOURCES) 16 | gdb -tui --args a.out 17 | rm a.out 18 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-D/EteTests/json3.dat: -------------------------------------------------------------------------------- 1 | {"base_requests": [{"type": "Stop", "name": "Prazhskaya", "latitude": 55.611678, "longitude": 37.603831, "road_distances": {}}], "stat_requests": [{"id": 2059900137, "type": "Bus", "name": "256"}, {"id": 1791405493, "type": "Bus", "name": "750"}, {"id": 482862466, "type": "Bus", "name": "751"}, {"id": 1239226988, "type": "Stop", "name": "Samara"}, {"id": 882474693, "type": "Stop", "name": "Prazhskaya"}, {"id": 587702956, "type": "Stop", "name": "Biryulyovo Zapadnoye"}]} 2 | -------------------------------------------------------------------------------- /White_Belt/Автобусные_остановки-2/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Автобусные остановки — 2 2 | 3 | В этой задаче вам нужно присваивать номера автобусным маршрутам. 4 | 5 | А именно, для каждого маршрута, заданного набором названий остановок, 6 | нужно либо выдать новый номер (первому маршруту — 1, второму — 2 и т. д.), 7 | либо вернуть номер существующего маршрута, которому соответствует такой 8 | набор остановок. 9 | 10 | Наборы остановок, полученные друг из друга перестановкой остановок, считаются 11 | различными (см. пример). -------------------------------------------------------------------------------- /Red_Belt/week_1/Введение в макросы/Макрос UNIQ_ID/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Макрос UNIQ_ID 2 | 3 | Разработать макрос UNIQ_ID, который будет формировать идентификатор, уникальный в пределах данного cpp-файла. Например, следующий код должен компилироваться и работать: 4 | ```cpp 5 | int UNIQ_ID = 5; 6 | string UNIQ_ID = "hello!"; 7 | ``` 8 | 9 | В рамках данной задачи допускается, что код 10 | ```cpp 11 | int UNIQ_ID = 5; string UNIQ_ID = "hello"; // оба определения на одной строке 12 | ``` 13 | не будет компилироваться. 14 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_second_part/synchronized.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | using namespace std; 5 | 6 | template 7 | class Synchronized { 8 | public: 9 | explicit Synchronized(T initial = T()) 10 | : value(move(initial)) 11 | { 12 | } 13 | 14 | struct Access { 15 | T& ref_to_value; 16 | lock_guard guard; 17 | }; 18 | 19 | Access GetAccess() { 20 | return {value, lock_guard(m)}; 21 | } 22 | 23 | private: 24 | T value; 25 | mutex m; 26 | }; 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Библиотека работы с INI-файлами/ini.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | namespace Ini { 10 | 11 | using Section = unordered_map; 12 | 13 | class Document { 14 | public: 15 | Section& AddSection(string name); 16 | const Section& GetSection(const string& name) const; 17 | size_t SectionCount() const; 18 | 19 | private: 20 | unordered_map sections; 21 | }; 22 | 23 | Document Load(istream& input); 24 | 25 | } 26 | 27 | -------------------------------------------------------------------------------- /Yellow_Belt/week_1/Ссылка_на_элемент/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Ссылка на элемент #### 2 | 3 | 4 | Реализуйте шаблонную функцию _GetRefStrict_, которая на вход принимает: _map_ и значение ключа _k_. Если элемент по ключу _k_ в коллекции отсутствует, то функция должна бросить исключение _runtime_error_, иначе вернуть ссылку на элемент в коллекции. 5 | 6 | Пример использования функции 7 | ```objectivec 8 | map m = {{0, "value"}}; 9 | string& item = GetRefStrict(m, 0); 10 | item = "newvalue"; 11 | cout << m[0] << endl; // выведет newvalue 12 | ``` -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Перебор перестановок/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Перебор перестановок #### 2 | 3 | 4 | Дано целое положительное число *N*, не превышающее *9*. Выведите все перестановки чисел от *1* до *N* в обратном лексикографическом порядке (см. пример). 5 | ##### Пример ##### 6 | ###### Ввод ###### 7 | ```commandline 8 | 3 9 | ``` 10 | ###### Вывод ###### 11 | ```commandline 12 | 3 2 1 13 | 3 1 2 14 | 2 3 1 15 | 2 1 3 16 | 1 3 2 17 | 1 2 3 18 | ``` 19 | ##### Подсказка ##### 20 | Библиотека ** содержит готовые функции, позволяющие решить эту задачу. -------------------------------------------------------------------------------- /White_Belt/Синонимы/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Синонимы 2 | 3 | Два слова называются синонимами друг друга, если они имеют похожие значения. 4 | Реализуйте следующие операции над словарём синонимов: 5 | 6 | * ADD word1 word2 — добавить в словарь пару синонимов (word1, word2). 7 | 8 | * COUNT word — узнать количество синонимов слова word. 9 | 10 | * CHECK word1 word2 — проверить, являются ли слова word1 и word2 синонимами. 11 | Слова word1 и word2 считаются синонимами, если среди запросов ADD был хотя 12 | бы один запрос ADD word1 word2 или ADD word2 word1. -------------------------------------------------------------------------------- /Red_Belt/week_4/Статистика web-сервера/stats.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "http_request.h" 4 | 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | typedef map StatsMap; 10 | 11 | class Stats { 12 | public: 13 | Stats(); 14 | void AddMethod(string_view method); 15 | void AddUri(string_view uri); 16 | const map& GetMethodStats() const; 17 | const map& GetUriStats() const; 18 | 19 | private: 20 | StatsMap methods; 21 | StatsMap uris; 22 | }; 23 | 24 | HttpRequest ParseRequest(string_view line); 25 | -------------------------------------------------------------------------------- /Red_Belt/week_2/Сортировка студентов по рейтингу/Optimized/student.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | struct Student { 9 | string first_name; 10 | string last_name; 11 | map marks; 12 | double rating; 13 | 14 | bool operator < (const Student& other) const { 15 | return GetName() < other.GetName(); 16 | } 17 | 18 | bool Less(const Student& other) const { 19 | return rating > other.rating; 20 | } 21 | 22 | string GetName() const { 23 | return first_name + " " + last_name; 24 | } 25 | }; -------------------------------------------------------------------------------- /Red_Belt/week_2/Сортировка студентов по рейтингу/Original/student.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | struct Student { 9 | string first_name; 10 | string last_name; 11 | map marks; 12 | double rating; 13 | 14 | bool operator < (const Student& other) const { 15 | return GetName() < other.GetName(); 16 | } 17 | 18 | bool Less(const Student& other) const { 19 | return rating > other.rating; 20 | } 21 | 22 | string GetName() const { 23 | return first_name + " " + last_name; 24 | } 25 | }; -------------------------------------------------------------------------------- /Red_Belt/week_4/Статистика web-сервера/solution/stats.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "http_request.h" 4 | 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | typedef map StatsMap; 10 | 11 | class Stats { 12 | public: 13 | Stats(); 14 | void AddMethod(string_view method); 15 | void AddUri(string_view uri); 16 | const map& GetMethodStats() const; 17 | const map& GetUriStats() const; 18 | 19 | private: 20 | StatsMap methods; 21 | StatsMap uris; 22 | }; 23 | 24 | HttpRequest ParseRequest(string_view line); 25 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Двойная диспетчеризация/game_object.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class Unit; 4 | class Building; 5 | class Tower; 6 | class Fence; 7 | 8 | struct GameObject { 9 | virtual ~GameObject() = default; 10 | 11 | virtual bool Collide(const GameObject& that) const = 0; 12 | virtual bool CollideWith(const Unit& that) const = 0; 13 | virtual bool CollideWith(const Building& that) const = 0; 14 | virtual bool CollideWith(const Tower& that) const = 0; 15 | virtual bool CollideWith(const Fence& that) const = 0; 16 | }; 17 | 18 | bool Collide(const GameObject& first, const GameObject& second); 19 | -------------------------------------------------------------------------------- /White_Belt/Имена_и_фамилии-3/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Имена и фамилии — 3 2 | 3 | Дополните класс Person из задачи «Имена и фамилии — 2» конструктором, позволяющим задать имя 4 | и фамилию человека при рождении, а также сам год рождения. Класс не должен иметь конструктора 5 | по умолчанию. 6 | 7 | При получении на вход года, который меньше года рождения: 8 | 9 | * методы GetFullName и GetFullNameWithHistory должны отдавать "No person"; 10 | * методы ChangeFirstName и ChangeLastName должны игнорировать запрос. 11 | 12 | Кроме того, необходимо объявить константными все методы, которые по сути ими являются. -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/bus_manager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "responses.h" 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | class BusManager { 12 | public: 13 | void AddBus(const string& bus, const vector& stops); 14 | BusesForStopResponse GetBusesForStop(const string& stop) const; 15 | StopsForBusResponse GetStopsForBus(const string& bus) const; 16 | AllBusesResponse GetAllBuses() const; 17 | 18 | 19 | private: 20 | map> buses_to_stops; 21 | map> stops_to_buses; 22 | }; 23 | -------------------------------------------------------------------------------- /Brown_Belt/week_3/Т_Зоопарк/animals.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | class Animal { 4 | public: 5 | virtual std::string Voice() const { 6 | return "Not implemented yet"; 7 | } 8 | virtual ~Animal() { 9 | } 10 | }; 11 | 12 | 13 | class Tiger: public Animal { 14 | std::string Voice() const override { 15 | return "Rrrr"; 16 | } 17 | }; 18 | 19 | 20 | class Wolf: public Animal { 21 | std::string Voice() const override { 22 | return "Wooo"; 23 | } 24 | }; 25 | 26 | 27 | class Fox: public Animal { 28 | std::string Voice() const override { 29 | return "Tyaf"; 30 | } 31 | }; 32 | 33 | -------------------------------------------------------------------------------- /White_Belt/Обратимая_функция_с_умножением_и_делением/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Обратимая функция 2 | 3 | Реализуйте рассказанный на лекции класс Function, позволяющий создавать, вычислять и инвертировать 4 | функцию, состоящую из следующих элементарных операций: 5 | 6 | * прибавить вещественное число x; 7 | * вычесть вещественное число x. 8 | 9 | При этом необходимо объявить константными все методы, которые по сути такими являются. 10 | 11 | Добавьте в класс Function из задачи «Обратимая функция» обработку умножения ('*') и деления ('/'). 12 | Гарантируется отсутствие элементарных операций умножения и деления на 0. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Специализация: Искусство разработки на современном C++ 2 | ![](spec_logo.jpg) 3 | 4 | Данный репозиторий содержит материалы и задания по [специализации](https://www.coursera.org/specializations/c-plus-plus-modern-development) от Яндекса и МФТИ на Coursera "Искусство разработки на современном C++". 5 | 6 | Специализация состоит из 5 курсов: 7 | 1. [Основы разработки на C++: белый пояс](White_Belt) 8 | 2. [Основы разработки на C++: жёлтый пояс](Yellow_Belt) 9 | 3. [Основы разработки на C++: красный пояс](Red_Belt) 10 | 4. [Основы разработки на C++: коричневый пояс](Brown_Belt) 11 | 5. Основы разработки на C++: черный пояc 12 | -------------------------------------------------------------------------------- /White_Belt/Имена_и_фамилии-2/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Имена и фамилии — 2 2 | 3 | Дополните класс из предыдущей задачи «Имена и фамилии — 1» методом 4 | GetFullNameWithHistory: 5 | 6 | В отличие от метода GetFullName, метод GetFullNameWithHistory должен вернуть не 7 | только последние имя и фамилию к концу данного года, но ещё и все предыдущие имена 8 | и фамилии в обратном хронологическом порядке. Если текущие факты говорят о том, что 9 | человек два раза подряд изменил фамилию или имя на одно и то же, второе изменение 10 | при формировании истории нужно игнорировать. 11 | 12 | Для лучшего понимания формата см. примеры. -------------------------------------------------------------------------------- /White_Belt/Автобусные_остановки-3/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Автобусные остановки — 3 2 | 3 | В этой задаче вам нужно присваивать номера автобусным маршрутам. 4 | 5 | А именно, для каждого маршрута, заданного множеством названий остановок, 6 | нужно либо выдать новый номер (первому маршруту — 1, второму — 2 и т. д.), 7 | либо вернуть номер существующего маршрута, которому соответствует такое 8 | множество остановок. 9 | 10 | В отличие от задачи «Автобусные остановки — 2», наборы остановок, которые 11 | можно получить друг из друга перестановкой элементов или добавлением/удалением 12 | повторяющихся, следует считать одинаковыми. -------------------------------------------------------------------------------- /Yellow_Belt/week_1/Ссылка_на_элемент/ItemLink.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | template 11 | Value& GetRefStrict (map& m, const Key& key){ 12 | 13 | if(m.count(key) == 0){ 14 | throw runtime_error("exception!"); 15 | } 16 | 17 | Value& answer = m[key]; 18 | return answer; 19 | } 20 | 21 | int main(){ 22 | map m = {{0, "value"}}; 23 | string& item = GetRefStrict(m, 0); 24 | item = "newvalue"; 25 | cout << m[0] << endl; // выведет newvalue 26 | } 27 | -------------------------------------------------------------------------------- /White_Belt/Максимизатор/UpdateIfGreater.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : UpdateIfGreater.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | using namespace std; 11 | 12 | void UpdateIfGreater(int a, int& b) 13 | { 14 | if (a > b){ 15 | b = a; 16 | } 17 | } 18 | 19 | int main() { 20 | int a = 4; 21 | int b = 2; 22 | 23 | UpdateIfGreater(a, b); 24 | 25 | cout << b; 26 | } 27 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-A/EteTests/1.dat: -------------------------------------------------------------------------------- 1 | 10 2 | Stop Tolstopaltsevo: 55.611087, 37.20829 3 | Stop Marushkino: 55.595884, 37.209755 4 | Bus 256: Biryulyovo Zapadnoye > Biryusinka > Universam > Biryulyovo Tovarnaya > Biryulyovo Passazhirskaya > Biryulyovo Zapadnoye 5 | Bus 750: Tolstopaltsevo - Marushkino - Rasskazovka 6 | Stop Rasskazovka: 55.632761, 37.333324 7 | Stop Biryulyovo Zapadnoye: 55.574371, 37.6517 8 | Stop Biryusinka: 55.581065, 37.64839 9 | Stop Universam: 55.587655, 37.645687 10 | Stop Biryulyovo Tovarnaya: 55.592028, 37.653656 11 | Stop Biryulyovo Passazhirskaya: 55.580999, 37.659164 12 | 3 13 | Bus 256 14 | Bus 750 15 | Bus 751 16 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-B/EteTests/1.dat: -------------------------------------------------------------------------------- 1 | 10 2 | Stop Tolstopaltsevo: 55.611087, 37.20829 3 | Stop Marushkino: 55.595884, 37.209755 4 | Bus 256: Biryulyovo Zapadnoye > Biryusinka > Universam > Biryulyovo Tovarnaya > Biryulyovo Passazhirskaya > Biryulyovo Zapadnoye 5 | Bus 750: Tolstopaltsevo - Marushkino - Rasskazovka 6 | Stop Rasskazovka: 55.632761, 37.333324 7 | Stop Biryulyovo Zapadnoye: 55.574371, 37.6517 8 | Stop Biryusinka: 55.581065, 37.64839 9 | Stop Universam: 55.587655, 37.645687 10 | Stop Biryulyovo Tovarnaya: 55.592028, 37.653656 11 | Stop Biryulyovo Passazhirskaya: 55.580999, 37.659164 12 | 3 13 | Bus 256 14 | Bus 750 15 | Bus 751 16 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-C/EteTests/1.dat: -------------------------------------------------------------------------------- 1 | 10 2 | Stop Tolstopaltsevo: 55.611087, 37.20829 3 | Stop Marushkino: 55.595884, 37.209755 4 | Bus 256: Biryulyovo Zapadnoye > Biryusinka > Universam > Biryulyovo Tovarnaya > Biryulyovo Passazhirskaya > Biryulyovo Zapadnoye 5 | Bus 750: Tolstopaltsevo - Marushkino - Rasskazovka 6 | Stop Rasskazovka: 55.632761, 37.333324 7 | Stop Biryulyovo Zapadnoye: 55.574371, 37.6517 8 | Stop Biryusinka: 55.581065, 37.64839 9 | Stop Universam: 55.587655, 37.645687 10 | Stop Biryulyovo Tovarnaya: 55.592028, 37.653656 11 | Stop Biryulyovo Passazhirskaya: 55.580999, 37.659164 12 | 3 13 | Bus 256 14 | Bus 750 15 | Bus 751 16 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/tools.cpp: -------------------------------------------------------------------------------- 1 | #include "tools.h" 2 | 3 | namespace tools { 4 | 5 | std::vector SplitBy(std::string_view s, char sep) { 6 | std::vector result; 7 | 8 | while (!s.empty()) { 9 | size_t pos = s.find(sep); 10 | result.push_back(s.substr(0, pos)); 11 | s.remove_prefix(pos != s.npos ? pos + 1 : s.size()); 12 | } 13 | 14 | // NVRO 15 | return result; 16 | } 17 | 18 | } // tools 19 | 20 | std::ostream& operator<< (std::ostream& output, const std::pair& pair) { 21 | output << "(" << pair.first << " : " << pair.second << ")"; 22 | return output; 23 | } 24 | -------------------------------------------------------------------------------- /Red_Belt/week_5/Move-семантика в SimpleVector/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Move-семантика в SimpleVector 2 | 3 | Решите задачу «Реализовать свой вектор» со следующими дополнительными требованиями: 4 | 5 | * метод PushBack должен позволять добавить элемент в вектор с помощью перемещения; 6 | * никакие методы вектора не должны осуществлять копирование элементов. 7 | 8 | Таким образом, должен получиться вектор, позволяющий хранить некопируемые объекты. 9 | 10 | Шаблон решения содержит юнит-тест, проверяющий работу вектора, состоящего из некопируемых строк. Если вектор будет осуществлять копирования, благодаря указанному юнит-тесту **решение не скомпилируется**. 11 | -------------------------------------------------------------------------------- /Red_Belt/week_3/Пишем свой вектор/simple_vector.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | // Реализуйте шаблон SimpleVector 6 | template 7 | class SimpleVector { 8 | public: 9 | SimpleVector(); 10 | explicit SimpleVector(size_t size); 11 | ~SimpleVector(); 12 | 13 | T& operator[](size_t index); 14 | 15 | T* begin(); 16 | T* end(); 17 | const T* begin() const; 18 | const T* end() const; 19 | 20 | size_t Size() const; 21 | size_t Capacity() const; 22 | void PushBack(const T& value); 23 | 24 | private: 25 | size_t _size = 0; 26 | size_t _capacity = 0; 27 | T* _data = nullptr; 28 | T* _end = nullptr; 29 | }; 30 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/responses.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | struct BusesForStopResponse { 11 | vector buses; 12 | }; 13 | 14 | ostream& operator << (ostream& os, const BusesForStopResponse& r); 15 | 16 | struct StopsForBusResponse { 17 | string bus; 18 | vector>> stops_for_buses; 19 | }; 20 | 21 | ostream& operator << (ostream& os, const StopsForBusResponse& r); 22 | 23 | struct AllBusesResponse { 24 | map> allbuses; 25 | }; 26 | 27 | ostream& operator << (ostream& os, const AllBusesResponse& r); 28 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/token.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | using namespace std; 6 | 7 | enum class TokenType { 8 | DATE, 9 | EVENT, 10 | COLUMN, 11 | LOGICAL_OP, 12 | COMPARE_OP, 13 | PAREN_LEFT, 14 | PAREN_RIGHT, 15 | NONE 16 | }; 17 | 18 | struct Token { 19 | const string value; 20 | const TokenType type; 21 | }; 22 | 23 | vector Tokenize(istream& cl); 24 | 25 | enum class Comparison { 26 | Less, 27 | LessOrEqual, 28 | Greater, 29 | GreaterOrEqual, 30 | Equal, 31 | NotEqual, 32 | NONE 33 | }; 34 | 35 | enum class LogicalOperation { 36 | Or, 37 | And, 38 | }; -------------------------------------------------------------------------------- /Red_Belt/week_5/Оператор присваивания для SimpleVector/simple_vector.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "simple_vector.h" 6 | #include "test_runner.h" 7 | 8 | void TestCopyAssignment(){ 9 | SimpleVector numbers(10); 10 | std::iota(numbers.begin(), numbers.end(), 1); 11 | 12 | SimpleVector dest; 13 | ASSERT_EQUAL(dest.Size(), 0u); 14 | 15 | dest = numbers; 16 | ASSERT_EQUAL(dest.Size(), numbers.Size()); 17 | ASSERT(dest.Capacity() >= dest.Size()); 18 | ASSERT(std::equal(dest.begin(), dest.end(), numbers.begin())); 19 | } 20 | 21 | int main(){ 22 | TestRunner tr; 23 | RUN_TEST(tr, TestCopyAssignment); 24 | } 25 | 26 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/Answer/token.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | using namespace std; 6 | 7 | enum class TokenType { 8 | DATE, 9 | EVENT, 10 | COLUMN, 11 | LOGICAL_OP, 12 | COMPARE_OP, 13 | PAREN_LEFT, 14 | PAREN_RIGHT, 15 | NONE 16 | }; 17 | 18 | struct Token { 19 | const string value; 20 | const TokenType type; 21 | }; 22 | 23 | vector Tokenize(istream& cl); 24 | 25 | enum class Comparison { 26 | Less, 27 | LessOrEqual, 28 | Greater, 29 | GreaterOrEqual, 30 | Equal, 31 | NotEqual, 32 | NONE 33 | }; 34 | 35 | enum class LogicalOperation { 36 | Or, 37 | And, 38 | }; -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_first_part/iterator_range.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | using namespace std; 5 | 6 | template 7 | class IteratorRange { 8 | public: 9 | IteratorRange(It first, It last) : first(first), last(last) { 10 | } 11 | 12 | It begin() const { 13 | return first; 14 | } 15 | 16 | It end() const { 17 | return last; 18 | } 19 | 20 | size_t size() const { 21 | return last - first; 22 | } 23 | 24 | private: 25 | It first, last; 26 | }; 27 | 28 | template 29 | auto Head(Container& c, int top) { 30 | return IteratorRange(begin(c), begin(c) + min(max(top, 0), c.size())); 31 | } 32 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_second_part/iterator_range.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | using namespace std; 5 | 6 | template 7 | class IteratorRange { 8 | public: 9 | IteratorRange(It first, It last) : first(first), last(last) { 10 | } 11 | 12 | It begin() const { 13 | return first; 14 | } 15 | 16 | It end() const { 17 | return last; 18 | } 19 | 20 | size_t size() const { 21 | return last - first; 22 | } 23 | 24 | private: 25 | It first, last; 26 | }; 27 | 28 | template 29 | auto Head(Container& c, int top) { 30 | return IteratorRange(begin(c), begin(c) + min(max(top, 0), c.size())); 31 | } 32 | -------------------------------------------------------------------------------- /White_Belt/Автобусные_остановки-1/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Автобусные остановки — 1 2 | 3 | Реализуйте систему хранения автобусных маршрутов. Вам нужно обрабатывать следующие запросы: 4 | 5 | * NEW_BUS bus stop_count stop1 stop2 ... — добавить маршрут автобуса с названием bus 6 | и stop_count остановками с названиями stop1, stop2, ... 7 | 8 | * BUSES_FOR_STOP stop — вывести названия всех маршрутов автобуса, проходящих через 9 | остановку stop. 10 | 11 | * STOPS_FOR_BUS bus — вывести названия всех остановок маршрута bus со списком 12 | автобусов, на которые можно пересесть на каждой из остановок. 13 | 14 | * ALL_BUSES — вывести список всех маршрутов с остановками. -------------------------------------------------------------------------------- /Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/bfe8c8aa-f7a6-46f4-5ede-db5a212ce2cc: -------------------------------------------------------------------------------- 1 | pendo.guides=[]; 2 | pendo.normalizedUrl="http://www.coursera.org/learn/c-plus-plus-yellow/home/welcome"; 3 | pendo.lastGuideStepSeen={"isMultiStep":false,"state":""}; 4 | pendo.guideWidget={"enabled":false,"hidePoweredBy":false,"data":{"guideCssUrl":"","onboarding":false}}; 5 | pendo.guideCssUrl=""; 6 | pendo.throttling={"count":1,"enabled":true,"interval":1,"unit":"Day"}; 7 | pendo.autoOrdering=["fb594MX2cK228zK1L5VcfClZmh0","BbZGo5EYjZ1CVlgXSQrdEyFU5LY"]; 8 | pendo.globalJsUrl=""; 9 | pendo.segmentFlags=[]; 10 | pendo.designerEnabled=false; 11 | pendo.features=[]; 12 | pendo.preventCodeInjection=false; 13 | -------------------------------------------------------------------------------- /Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/bfe8c8aa-f7a6-46f4-5ede-db5a212ce2cc(1): -------------------------------------------------------------------------------- 1 | pendo.guides=[]; 2 | pendo.normalizedUrl="http://www.coursera.org/learn/c-plus-plus-yellow/home/week/4"; 3 | pendo.lastGuideStepSeen={"isMultiStep":false,"state":""}; 4 | pendo.guideWidget={"enabled":false,"hidePoweredBy":false,"data":{"guideCssUrl":"","onboarding":false}}; 5 | pendo.guideCssUrl=""; 6 | pendo.throttling={"count":1,"enabled":true,"interval":1,"unit":"Day"}; 7 | pendo.autoOrdering=["fb594MX2cK228zK1L5VcfClZmh0","BbZGo5EYjZ1CVlgXSQrdEyFU5LY"]; 8 | pendo.globalJsUrl=""; 9 | pendo.segmentFlags=[]; 10 | pendo.designerEnabled=false; 11 | pendo.features=[]; 12 | pendo.preventCodeInjection=false; 13 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_first_part/parse.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "iterator_range.h" 4 | 5 | #include 6 | #include 7 | #include 8 | using namespace std; 9 | 10 | template 11 | string Join(char c, const Container& cont) { 12 | ostringstream os; 13 | for (const auto& item : Head(cont, cont.size() - 1)) { 14 | os << item << c; 15 | } 16 | os << *rbegin(cont); 17 | return os.str(); 18 | } 19 | 20 | string_view Strip(string_view s); 21 | vector SplitBy(string_view s, char sep); 22 | void LeftStrip(string_view& sv); 23 | string_view ReadToken(string_view& sv); 24 | 25 | vector SplitIntoWordsView(string_view str); 26 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_second_part/parse.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "iterator_range.h" 4 | 5 | #include 6 | #include 7 | #include 8 | using namespace std; 9 | 10 | template 11 | string Join(char c, const Container& cont) { 12 | ostringstream os; 13 | for (const auto& item : Head(cont, cont.size() - 1)) { 14 | os << item << c; 15 | } 16 | os << *rbegin(cont); 17 | return os.str(); 18 | } 19 | 20 | string_view Strip(string_view s); 21 | vector SplitBy(string_view s, char sep); 22 | void LeftStrip(string_view& sv); 23 | string_view ReadToken(string_view& sv); 24 | 25 | vector SplitIntoWordsView(string_view str); 26 | -------------------------------------------------------------------------------- /White_Belt/Очередь/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Очередь 2 | 3 | Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец 4 | и уходить оттуда. Более того, иногда некоторые люди могут прекращать и начинать 5 | беспокоиться из-за того, что очередь не продвигается. 6 | 7 | Реализуйте обработку следующих операций над очередью: 8 | 9 | * WORRY i: пометить i-го человека с начала очереди (в нумерации с 0) как беспокоящегося; 10 | * QUIET i: пометить i-го человека как успокоившегося; 11 | * COME k: добавить k спокойных человек в конец очереди; 12 | * COME -k: убрать k человек из конца очереди; 13 | * WORRY_COUNT: узнать количество беспокоящихся людей в очереди. 14 | 15 | Изначально очередь пуста. -------------------------------------------------------------------------------- /White_Belt/Количество_уникальных_строк/Unique.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : Unique.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | int main() { 16 | set words; 17 | int Q; 18 | string word; 19 | cin >> Q; 20 | 21 | for(int i = 0; i < Q; i++) 22 | { 23 | cin >> word; 24 | words.insert(word); 25 | } 26 | 27 | cout << words.size(); 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /White_Belt/Наибольший_общий_делитель/NOD.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : NOD.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | using namespace std; 11 | 12 | int main() { 13 | int A, B; 14 | 15 | cin >> A >> B; 16 | 17 | while (A != 0 && B != 0) 18 | { 19 | if (A > B) 20 | { 21 | A = A % B; 22 | } 23 | else 24 | { 25 | B = B % A; 26 | } 27 | 28 | 29 | } 30 | cout << A + B; 31 | return 0; 32 | } 33 | 34 | -------------------------------------------------------------------------------- /White_Belt/Минимальная_строка/compairingOfStrings.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : compairingOfStrings.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | using namespace std; 11 | 12 | int main() { 13 | string str1; 14 | string str2; 15 | string str3; 16 | string min; 17 | 18 | cin >> str1 >> str2 >> str3; 19 | 20 | min = str1; 21 | 22 | if (str2 < min) {min = str2;} 23 | if (str3 < min) {min = str3;} 24 | 25 | cout << min; 26 | 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Удаление повторов/RemoveDuplicates.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | using namespace std; 6 | 7 | template 8 | void RemoveDuplicates(vector& elements) { 9 | sort(begin(elements), end(elements)); 10 | elements.erase(unique(begin(elements), end(elements)), elements.end()); 11 | } 12 | 13 | int main() { 14 | vector v1 = {6, 4, 7, 6, 4, 4, 0, 1}; 15 | RemoveDuplicates(v1); 16 | for (int x : v1) { 17 | cout << x << " "; 18 | } 19 | cout << endl; 20 | 21 | vector v2 = {"C", "C++", "C++", "C", "C++"}; 22 | RemoveDuplicates(v2); 23 | for (const string& s : v2) { 24 | cout << s << " "; 25 | } 26 | cout << endl; 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /Yellow_Belt/week_5/Наследование своими руками/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Наследование своими руками #### 2 | 3 | 4 | Дан следующий код: 5 | ```objectivec 6 | #include 7 | 8 | using namespace std; 9 | 10 | class Animal { 11 | public: 12 | // ваш код 13 | 14 | const string Name; 15 | }; 16 | 17 | 18 | class Dog { 19 | public: 20 | // ваш код 21 | 22 | void Bark() { 23 | cout << Name << " barks: woof!" << endl; 24 | } 25 | }; 26 | ``` 27 | Определите до конца тела классов, соблюдая следующие требования: 28 | 29 | 1. Класс *Dog* должен являться наследником класса *Animal*. 30 | 2. Конструктор класса *Dog* должен принимать параметр типа *string* и инициализировать им поле *Name* в классе *Animal*. -------------------------------------------------------------------------------- /Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/bfe8c8aa-f7a6-46f4-5ede-db5a212ce2cc(2): -------------------------------------------------------------------------------- 1 | pendo.guides=[]; 2 | pendo.normalizedUrl="http://www.coursera.org/learn/c-plus-plus-yellow/supplement/iXlbw/svodnaia-tablitsa-po-alghoritmam-poiska"; 3 | pendo.lastGuideStepSeen={"isMultiStep":false,"state":""}; 4 | pendo.guideWidget={"enabled":false,"hidePoweredBy":false,"data":{"guideCssUrl":"","onboarding":false}}; 5 | pendo.guideCssUrl=""; 6 | pendo.throttling={"count":1,"enabled":true,"interval":1,"unit":"Day"}; 7 | pendo.autoOrdering=["fb594MX2cK228zK1L5VcfClZmh0","BbZGo5EYjZ1CVlgXSQrdEyFU5LY"]; 8 | pendo.globalJsUrl=""; 9 | pendo.segmentFlags=[]; 10 | pendo.designerEnabled=false; 11 | pendo.features=[]; 12 | pendo.preventCodeInjection=false; 13 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Перебор перестановок/MakePermutations.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | 6 | using namespace std; 7 | 8 | void PrintAllPermutations(int N){ 9 | vector permutation_vector(N); 10 | vector output; 11 | 12 | for (int i = N; i > 0; --i) { 13 | permutation_vector[N-i] = i; 14 | } 15 | 16 | do{ 17 | for (auto& it : permutation_vector) { 18 | std::cout << it << " "; 19 | } 20 | 21 | cout << endl; 22 | } while(next_permutation(begin(permutation_vector), end(permutation_vector), [](int lft, int rgh){return lft > rgh;})); 23 | } 24 | 25 | int main() { 26 | int N; 27 | cin >> N; 28 | PrintAllPermutations(N); 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /Brown_Belt/week_3/З_Дерево выражений/Common.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | // Базовый класс арифметического выражения 7 | class Expression { 8 | public: 9 | virtual ~Expression() = default; 10 | 11 | // Вычисляет значение выражения 12 | virtual int Evaluate() const = 0; 13 | 14 | // Форматирует выражение как строку 15 | // Каждый узел берётся в скобки, независимо от приоритета 16 | virtual std::string ToString() const = 0; 17 | }; 18 | 19 | using ExpressionPtr = std::unique_ptr; 20 | 21 | // Функции для формирования выражения 22 | ExpressionPtr Value(int value); 23 | ExpressionPtr Sum(ExpressionPtr left, ExpressionPtr right); 24 | ExpressionPtr Product(ExpressionPtr left, ExpressionPtr right); 25 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-D/EteTests/json1.ans: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "route_length": 5950, 4 | "request_id": 1965312327, 5 | "curvature": 1.36124, 6 | "stop_count": 6, 7 | "unique_stop_count": 5 8 | }, 9 | { 10 | "route_length": 27600, 11 | "request_id": 519139350, 12 | "curvature": 1.31808, 13 | "stop_count": 5, 14 | "unique_stop_count": 3 15 | }, 16 | { 17 | "request_id": 194217464, 18 | "error_message": "not found" 19 | }, 20 | { 21 | "request_id": 746888088, 22 | "error_message": "not found" 23 | }, 24 | { 25 | "buses": [], 26 | "request_id": 65100610 27 | }, 28 | { 29 | "buses": [ 30 | "256", 31 | "828" 32 | ], 33 | "request_id": 1042838872 34 | } 35 | ] 36 | -------------------------------------------------------------------------------- /White_Belt/Работа_с_файлами/Часть1/FileFirst.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : FileFirst.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | int main() { 16 | ifstream input; 17 | string line; 18 | 19 | input.open("input.txt"); 20 | 21 | if(input.is_open()){ 22 | while(getline(input, line)){ 23 | cout << line << endl; 24 | } 25 | } 26 | else{ 27 | cout << "error!" << endl; 28 | } 29 | 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /White_Belt/Перемещение_строк/MoveStrings.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : MoveStrings.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | void MoveStrings(vector& source, vector& destination) 16 | { 17 | string str; 18 | for(int i = 0; i < source.size(); i++) 19 | { 20 | str = source[i]; 21 | destination.push_back(str); 22 | } 23 | 24 | source.clear(); 25 | } 26 | 27 | int main() { 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /White_Belt/Факториал/Factorial.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : Factorial.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | using namespace std; 11 | 12 | int Factorial(int a) 13 | { 14 | int fact = 1; 15 | 16 | if (a < 0) 17 | { 18 | return 1; 19 | } 20 | else 21 | { 22 | while (a!=0) 23 | { 24 | fact *= a; 25 | a--; 26 | } 27 | } 28 | 29 | return fact; 30 | } 31 | 32 | int main() { 33 | int number; 34 | 35 | cin >> number; 36 | 37 | cout << Factorial(number); 38 | 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_first_part/profile_advanced.cpp: -------------------------------------------------------------------------------- 1 | #include "profile_advanced.h" 2 | 3 | #include 4 | #include 5 | 6 | TotalDuration::TotalDuration(const string& msg) 7 | : message(msg + ": ") 8 | , value(0) 9 | { 10 | } 11 | 12 | TotalDuration::~TotalDuration() { 13 | ostringstream os; 14 | os << message 15 | << duration_cast(value).count() 16 | << " ms" << endl; 17 | cerr << os.str(); 18 | } 19 | 20 | AddDuration::AddDuration(steady_clock::duration& dest): 21 | add_to(dest), 22 | start(steady_clock::now()) 23 | { 24 | } 25 | 26 | AddDuration::AddDuration(TotalDuration& dest) 27 | : AddDuration(dest.value) 28 | { 29 | } 30 | 31 | AddDuration::~AddDuration() { 32 | add_to += steady_clock::now() - start; 33 | } 34 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_second_part/profile_advanced.cpp: -------------------------------------------------------------------------------- 1 | #include "profile_advanced.h" 2 | 3 | #include 4 | #include 5 | 6 | TotalDuration::TotalDuration(const string& msg) 7 | : message(msg + ": ") 8 | , value(0) 9 | { 10 | } 11 | 12 | TotalDuration::~TotalDuration() { 13 | ostringstream os; 14 | os << message 15 | << duration_cast(value).count() 16 | << " ms" << endl; 17 | cerr << os.str(); 18 | } 19 | 20 | AddDuration::AddDuration(steady_clock::duration& dest): 21 | add_to(dest), 22 | start(steady_clock::now()) 23 | { 24 | } 25 | 26 | AddDuration::AddDuration(TotalDuration& dest) 27 | : AddDuration(dest.value) 28 | { 29 | } 30 | 31 | AddDuration::~AddDuration() { 32 | add_to += steady_clock::now() - start; 33 | } 34 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "bus_manager.h" 4 | #include "query.h" 5 | 6 | using namespace std; 7 | 8 | int main() { 9 | int query_count; 10 | Query q; 11 | 12 | cin >> query_count; 13 | 14 | BusManager bm; 15 | for (int i = 0; i < query_count; ++i) { 16 | cin >> q; 17 | switch (q.type) { 18 | case QueryType::NewBus: 19 | bm.AddBus(q.bus, q.stops); 20 | break; 21 | case QueryType::BusesForStop: 22 | cout << bm.GetBusesForStop(q.stop) << endl; 23 | break; 24 | case QueryType::StopsForBus: 25 | cout << bm.GetStopsForBus(q.bus) << endl; 26 | break; 27 | case QueryType::AllBuses: 28 | cout << bm.GetAllBuses() << endl; 29 | break; 30 | } 31 | } 32 | 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /Brown_Belt/week_4/З_RAII Booking/booking.h: -------------------------------------------------------------------------------- 1 | //#pragma once 2 | 3 | namespace RAII { 4 | 5 | template class Booking { 6 | public: 7 | Booking(T *pr, int counter) : provider_(pr), counter_(counter) {} 8 | 9 | Booking(const Booking &) = delete; 10 | 11 | Booking(Booking &&other) : provider_(other.provider_) { 12 | other.provider_ = nullptr; 13 | } 14 | 15 | Booking &operator=(Booking &) = delete; 16 | 17 | Booking &operator=(Booking &&other) { 18 | delete provider_; 19 | provider_ = other.provider_; 20 | other.provider_ = nullptr; 21 | return *this; 22 | } 23 | 24 | ~Booking() { 25 | if (provider_ != nullptr) { 26 | provider_->CancelOrComplete(*this); 27 | } 28 | } 29 | 30 | T *provider_; 31 | int counter_; 32 | }; 33 | 34 | }; // namespace RAII -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Часть вектора/README.md: -------------------------------------------------------------------------------- 1 | #### Тренировочное задание по программированию: Часть вектора #### 2 | 3 | 4 | Напишите функцию *PrintVectorPart*, принимающую вектор целых чисел *numbers*, выполняющую поиск первого отрицательного числа в нём и выводящую в стандартный вывод все числа, расположенные левее найденного, в обратном порядке. Если вектор не содержит отрицательных чисел, выведите все числа в обратном порядке. 5 | ```objectivec 6 | void PrintVectorPart(const vector& numbers); 7 | ``` 8 | ##### Пример кода ##### 9 | ```objectivec 10 | int main() { 11 | PrintVectorPart({6, 1, 8, -5, 4}); 12 | PrintVectorPart({-6, 1, 8, -5, 4}); // ничего не выведется 13 | PrintVectorPart({6, 1, 8, 5, 4}); 14 | return 0; 15 | } 16 | ``` 17 | ###### Вывод ###### 18 | ```commandline 19 | 8 1 6 20 | 21 | 4 5 8 1 6 22 | ``` -------------------------------------------------------------------------------- /White_Belt/Исключения_в_классе_Rational/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Исключения в классе Rational 2 | 3 | 4 | Вспомним класс Rational, который мы реализовали в задачах, посвящённых перегрузке операторов. 5 | Там специально говорилось, что в тестах объекты класса Rational никогда не создаются с нулевым 6 | знаменателем и никогда не выполняется деление на ноль. Настало время избавиться от этого 7 | ограничения и научиться обрабатывать нулевой знаменатель и деление на ноль. В этой задаче вам 8 | предстоит это сделать. 9 | 10 | Поменяйте реализацию конструктора класса Rational так, чтобы он выбрасывал исключение 11 | invalid_argument, если знаменатель равен нулю. Кроме того, переделайте реализацию оператора 12 | деления для класса Rational так, чтобы он выбрасывал исключение domain_error, если делитель 13 | равен нулю. -------------------------------------------------------------------------------- /White_Belt/Работа_с_файлами/Часть2/FileSecond.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : FileSecond.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | using namespace std; 13 | 14 | int main() { 15 | ifstream input("input.txt"); 16 | ofstream output("output.txt"); 17 | 18 | string line; 19 | 20 | if(input.is_open()){ 21 | while(getline(input, line)) 22 | { 23 | output << line << endl; 24 | } 25 | } 26 | else{ 27 | cout << "error!" << endl; 28 | } 29 | 30 | return 0; 31 | 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /White_Belt/Двоичные_числа/binSystem.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : binSystem.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | int main() { 16 | vector result; 17 | int n, mod; 18 | string a; 19 | 20 | cin >> n; 21 | 22 | do 23 | { 24 | mod = n % 2; 25 | result.push_back(mod); 26 | 27 | n = n / 2; 28 | 29 | }while(n != 0); 30 | 31 | for(int i = result.size()-1; i>=0; i--) 32 | { 33 | cout << result[i]; 34 | } 35 | 36 | 37 | 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Часть множества/PartOfSet.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | template 9 | vector FindGreaterElements(const set& elements, const T& border){ 10 | typename set::iterator set_it; 11 | set copy_elements = elements; 12 | vector answer; 13 | 14 | for(set_it = copy_elements.begin(); set_it != copy_elements.end(); set_it++){ 15 | if(*set_it > border){ 16 | answer.push_back(*set_it); 17 | } 18 | } 19 | 20 | return answer; 21 | } 22 | 23 | int main() { 24 | for (int x : FindGreaterElements(set{1, 5, 7, 8}, 5)) { 25 | cout << x << " "; 26 | } 27 | cout << endl; 28 | 29 | string to_find = "Python"; 30 | cout << FindGreaterElements(set{"C", "C++"}, to_find).size() << endl; 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /Red_Belt/materials/Stuff/Profile/profile.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | using namespace std::chrono; 9 | 10 | class LogDuration { 11 | public: 12 | explicit LogDuration(const string& msg = "") 13 | : message(msg + ": ") 14 | , start(steady_clock::now()) 15 | { 16 | } 17 | 18 | ~LogDuration() { 19 | auto finish = steady_clock::now(); 20 | auto dur = finish - start; 21 | cerr << message 22 | << duration_cast(dur).count() 23 | << " ms" << endl; 24 | } 25 | private: 26 | string message; 27 | steady_clock::time_point start; 28 | }; 29 | 30 | #define UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 31 | #define UNIQ_ID(lineno) UNIQ_ID_IMPL(lineno) 32 | 33 | #define LOG_DURATION(message) \ 34 | LogDuration UNIQ_ID(__LINE__){message}; 35 | -------------------------------------------------------------------------------- /Red_Belt/week_4/AirportCounter/profile.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | using namespace std::chrono; 9 | 10 | class LogDuration { 11 | public: 12 | explicit LogDuration(const string& msg = "") 13 | : message(msg + ": ") 14 | , start(steady_clock::now()) 15 | { 16 | } 17 | 18 | ~LogDuration() { 19 | auto finish = steady_clock::now(); 20 | auto dur = finish - start; 21 | cerr << message 22 | << duration_cast(dur).count() 23 | << " ms" << endl; 24 | } 25 | private: 26 | string message; 27 | steady_clock::time_point start; 28 | }; 29 | 30 | #define UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 31 | #define UNIQ_ID(lineno) UNIQ_ID_IMPL(lineno) 32 | 33 | #define LOG_DURATION(message) \ 34 | LogDuration UNIQ_ID(__LINE__){message}; 35 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Часть множества/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Часть множества #### 2 | 3 | 4 | Напишите шаблонную функцию *FindGreaterElements*, принимающую множество *elements* объектов типа *T* и ещё один объект *border* типа *T* и возвращающую вектор из всех элементов множества, бо́льших *border*, в возрастающем порядке. 5 | ```objectivec 6 | template 7 | vector FindGreaterElements(const set& elements, const T& border); 8 | ``` 9 | ##### Пример кода ##### 10 | ```objectivec 11 | int main() { 12 | for (int x : FindGreaterElements(set{1, 5, 7, 8}, 5)) { 13 | cout << x << " "; 14 | } 15 | cout << endl; 16 | 17 | string to_find = "Python"; 18 | cout << FindGreaterElements(set{"C", "C++"}, to_find).size() << endl; 19 | return 0; 20 | } 21 | ``` 22 | ###### Вывод ###### 23 | ```commandline 24 | 7 8 25 | 0 26 | ``` -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/database.h: -------------------------------------------------------------------------------- 1 | #ifndef __DATABASE_H 2 | #define __DATABASE_H 3 | 4 | #include "date.h" 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | using namespace std; 12 | 13 | class Database { 14 | public: 15 | void Add(const Date& date, const string& event); 16 | ostream& Print(ostream& stream) const; 17 | vector> FindIf(function ) const; 18 | int RemoveIf(function); 19 | string Last(Date) const; 20 | 21 | private: 22 | map > dateBase; 23 | map> dbQueue; 24 | }; 25 | 26 | ostream& operator << (ostream& os, const pair& input ); 27 | ostream& operator << (ostream& os, const map> input); 28 | 29 | 30 | #endif //__DATABASE_H 31 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_first_part/profile_advanced.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | using namespace chrono; 8 | 9 | struct TotalDuration { 10 | string message; 11 | steady_clock::duration value; 12 | 13 | explicit TotalDuration(const string& msg); 14 | ~TotalDuration(); 15 | }; 16 | 17 | class AddDuration { 18 | public: 19 | explicit AddDuration(steady_clock::duration& dest); 20 | explicit AddDuration(TotalDuration& dest); 21 | 22 | ~AddDuration(); 23 | 24 | private: 25 | steady_clock::duration& add_to; 26 | steady_clock::time_point start; 27 | }; 28 | 29 | #define MY_UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 30 | #define MY_UNIQ_ID(lineno) MY_UNIQ_ID_IMPL(lineno) 31 | 32 | #define ADD_DURATION(value) \ 33 | AddDuration MY_UNIQ_ID(__LINE__){value}; 34 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_second_part/profile_advanced.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | using namespace chrono; 8 | 9 | struct TotalDuration { 10 | string message; 11 | steady_clock::duration value; 12 | 13 | explicit TotalDuration(const string& msg); 14 | ~TotalDuration(); 15 | }; 16 | 17 | class AddDuration { 18 | public: 19 | explicit AddDuration(steady_clock::duration& dest); 20 | explicit AddDuration(TotalDuration& dest); 21 | 22 | ~AddDuration(); 23 | 24 | private: 25 | steady_clock::duration& add_to; 26 | steady_clock::time_point start; 27 | }; 28 | 29 | #define MY_UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 30 | #define MY_UNIQ_ID(lineno) MY_UNIQ_ID_IMPL(lineno) 31 | 32 | #define ADD_DURATION(value) \ 33 | AddDuration MY_UNIQ_ID(__LINE__){value}; 34 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Сортировка слиянием/MergeSort_1part.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace std; 6 | 7 | template 8 | void MergeSort(RandomIt range_begin, RandomIt range_end){ 9 | int length = range_end - range_begin; 10 | 11 | if (length < 2) { 12 | return; 13 | } 14 | else{ 15 | vector elems(range_begin, range_end); 16 | 17 | auto mid = begin(elems) + length/2; 18 | 19 | MergeSort(begin(elems), mid); 20 | MergeSort(mid, end(elems)); 21 | 22 | merge(begin(elems), mid, mid, end(elems), range_begin); 23 | } 24 | 25 | } 26 | 27 | int main() { 28 | vector v = {6, 4, 7, 6, 4, 4, 0, 1}; 29 | MergeSort(begin(v), end(v)); 30 | for (int x : v) { 31 | cout << x << " "; 32 | } 33 | cout << endl; 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Часть вектора/PartOfVector.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | 6 | void PrintVectorPart(const vector& numbers){ 7 | vector::iterator vec_it; 8 | vector number_copy = numbers; 9 | vector reverse_answer; 10 | 11 | for(vec_it = number_copy.begin(); vec_it != number_copy.end(); vec_it++){ 12 | if(*vec_it >= 0){ 13 | reverse_answer.push_back(*vec_it); 14 | } 15 | else{ 16 | break; 17 | } 18 | } 19 | 20 | for(vec_it = reverse_answer.end(); vec_it != reverse_answer.begin(); ){ 21 | cout << *(--vec_it) << ' '; 22 | } 23 | } 24 | 25 | int main() { 26 | PrintVectorPart({6, 1, 8, -5, 4}); 27 | cout << endl; 28 | PrintVectorPart({-6, 1, 8, -5, 4}); // ничего не выведется 29 | cout << endl; 30 | PrintVectorPart({6, 1, 8, 5, 4}); 31 | cout << endl; 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/Answer/database.h: -------------------------------------------------------------------------------- 1 | #ifndef __DATABASE_H 2 | #define __DATABASE_H 3 | 4 | #include "date.h" 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | using namespace std; 12 | 13 | class Database { 14 | public: 15 | void Add(const Date& date, const string& event); 16 | ostream& Print(ostream& stream) const; 17 | vector> FindIf(function ) const; 18 | int RemoveIf(function); 19 | string Last(Date) const; 20 | 21 | private: 22 | map > dateBase; 23 | map> dbQueue; 24 | }; 25 | 26 | ostream& operator << (ostream& os, const pair& input ); 27 | ostream& operator << (ostream& os, const map> input); 28 | 29 | 30 | #endif //__DATABASE_H 31 | -------------------------------------------------------------------------------- /Red_Belt/week_4/Спортсмены/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Спортсмены 2 | 3 | Условие 4 | 5 | У каждого спортсмена на футболке написан уникальный номер. Спортсмены по очереди выходят из раздевалки и должны построиться на стадионе. Тренер каждому выходящему спортсмену называет номер того спортсмена, перед которым нужно встать. Если спортсмена с названным номером на поле нет, то нужно встать в конец шеренги. 6 | 7 | В стандартном вводе сначала задано натуральное число n, не превосходящее 100000, — количество спортсменов. Далее идут n пар неотрицательных целых чисел, не превосходящих 100000. Первое число в паре — номер очередного выходящего спортсмена. Второе число в паре — номер того спортсмена, перед которым должен встать текущий. 8 | 9 | Напечатайте в стандартный вывод номера спортсменов в порядке построения на поле. 10 | 11 | Ограничение по времени — 0,8 с. 12 | -------------------------------------------------------------------------------- /White_Belt/Второе_вхождение/secondF_inString.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : secondF_inString.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | 14 | int main() { 15 | 16 | int i, answer; 17 | string S; 18 | 19 | answer = -2; 20 | 21 | cin>>S; 22 | 23 | for(i = 0; i < S.size(); i++) 24 | { 25 | if (S[i] == 'f') 26 | { 27 | if(answer == -2) 28 | { 29 | answer++; 30 | } 31 | else if(answer == -1) 32 | { 33 | answer = i; 34 | break; 35 | } 36 | } 37 | } 38 | 39 | cout << answer; 40 | 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /Red_Belt/week_2/Изучение нового языка/README.md: -------------------------------------------------------------------------------- 1 | ## Задание по программированию: Изучение нового языка 2 | 3 | Студента попросили написать класс Learner, помогающий изучать иностранный язык. В публичном интерфейсе класса должны быть две функции: 4 | ```cpp 5 | int Learn(const vector& words); 6 | vector KnownWords(); 7 | ``` 8 | 9 | Функция Learn должна получать порцию слов, "запоминать" их и возвращать количество различных новых слов. Функция KnownWords должна возвращать отсортированный по алфавиту список всех выученных слов. В списке не должно быть повторов. 10 | 11 | Студент написал следующее решение этой задачи, однако оно почему-то работает очень медленно. Вам надо его ускорить. 12 | 13 | Вам дан файл learner.cpp с медленным решением задачи. **Не меняя публичный интерфейс класса Learner**, найдите в нём узкие места, исправьте их и сдайте переделанный класс в тестирующую систему. 14 | -------------------------------------------------------------------------------- /Yellow_Belt/week_5/Грамотно рефакторим код/README.md: -------------------------------------------------------------------------------- 1 | #### Задание, оцениваемое сокурсниками: Грамотно рефакторим код #### 2 | 3 | 4 | В данном задании вам предстоит изменить код таким образом, чтобы он соответствовал изложенным в курсе принципам. 5 | 6 | Представьте, что этот код вам достался в наследство от коллеги и теперь вам предстоит поддерживать его и улучшать. Первое, что вы решили сделать — это провести рефакторинг. 7 | 8 | Конечние цели рефакторинга: 9 | * упростить дальнейшую поддержку кода; 10 | * уменьшить сложность кода; 11 | * упростить добавление новых абстракций в программу. 12 | 13 | **Review criteria** 14 | 15 | Задание будет оцениваться по следующим критериям: 16 | 17 | * эффективность выполнения кода; 18 | * задублированность кода; 19 | * эффективность использования приёмов рефакторинга кода, показанных в лекциях. 20 | 21 | Кроме того, присылаемый вами код должен компилироваться. -------------------------------------------------------------------------------- /White_Belt/Чтение_и_вывод_таблицы/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Чтение и вывод таблицы 2 | 3 | В первой строке файла input.txt записаны два числа N и M. 4 | Далее в файле находится таблица из N строк и M столбцов, представленная 5 | в формате CSV (comma-separated values). Такой формат часто используется 6 | для текстового представления таблиц с данными: в файле несколько строк, 7 | значения из разных ячеек внутри строки отделены друг от друга запятыми. 8 | Ваша задача — вывести данные на экран в виде таблицы. Формат таблицы: 9 | 10 | 1) размер ячейки равен 10, 11 | 12 | 2) соседние ячейки отделены друг от друга пробелом, 13 | 14 | 3) последняя ячейка в строке НЕ оканчивается пробелом, 15 | 16 | 4) последняя строка НЕ оканчивается символом перевода строки. 17 | Гарантируется, что в таблице будет ровно N строк и M столбцов, 18 | значение каждой из ячеек — целое число. Пример ввода -------------------------------------------------------------------------------- /Red_Belt/week_4/Спортсмены/athlets.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace std; 6 | 7 | int main() { 8 | const int MAX_ATHLETES = 100'000; 9 | using Position = list::iterator; 10 | 11 | int n_athletes; 12 | cin >> n_athletes; 13 | 14 | list row; 15 | vector athlete_pos(MAX_ATHLETES + 1, row.end()); 16 | 17 | for (int i = 0; i < n_athletes; ++i) { 18 | int athlete, next_athlete; 19 | cin >> athlete >> next_athlete; 20 | /* Вставляем значение athlet в list, передавая ему итератор на 21 | * следующего по списку спортсмена */ 22 | athlete_pos[athlete] = row.insert(athlete_pos[next_athlete], athlete); 23 | /* Метод insert возвращает итератор на вставляемое значение, 24 | * его присваевоем элементу вектора, по индексу athlet */ 25 | } 26 | 27 | for (int x : row) { 28 | cout << x << '\n'; 29 | } 30 | 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-B/EteTests/2.dat: -------------------------------------------------------------------------------- 1 | 13 2 | Stop Tolstopaltsevo: 55.611087, 37.20829 3 | Stop Marushkino: 55.595884, 37.209755 4 | Bus 256: Biryulyovo Zapadnoye > Biryusinka > Universam > Biryulyovo Tovarnaya > Biryulyovo Passazhirskaya > Biryulyovo Zapadnoye 5 | Bus 750: Tolstopaltsevo - Marushkino - Rasskazovka 6 | Stop Rasskazovka: 55.632761, 37.333324 7 | Stop Biryulyovo Zapadnoye: 55.574371, 37.6517 8 | Stop Biryusinka: 55.581065, 37.64839 9 | Stop Universam: 55.587655, 37.645687 10 | Stop Biryulyovo Tovarnaya: 55.592028, 37.653656 11 | Stop Biryulyovo Passazhirskaya: 55.580999, 37.659164 12 | Bus 828: Biryulyovo Zapadnoye > Universam > Rossoshanskaya ulitsa > Biryulyovo Zapadnoye 13 | Stop Rossoshanskaya ulitsa: 55.595579, 37.605757 14 | Stop Prazhskaya: 55.611678, 37.603831 15 | 6 16 | Bus 256 17 | Bus 750 18 | Bus 751 19 | Stop Samara 20 | Stop Prazhskaya 21 | Stop Biryulyovo Zapadnoye 22 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-C/EteTests/2.dat: -------------------------------------------------------------------------------- 1 | 13 2 | Stop Tolstopaltsevo: 55.611087, 37.20829 3 | Stop Marushkino: 55.595884, 37.209755 4 | Bus 256: Biryulyovo Zapadnoye > Biryusinka > Universam > Biryulyovo Tovarnaya > Biryulyovo Passazhirskaya > Biryulyovo Zapadnoye 5 | Bus 750: Tolstopaltsevo - Marushkino - Rasskazovka 6 | Stop Rasskazovka: 55.632761, 37.333324 7 | Stop Biryulyovo Zapadnoye: 55.574371, 37.6517 8 | Stop Biryusinka: 55.581065, 37.64839 9 | Stop Universam: 55.587655, 37.645687 10 | Stop Biryulyovo Tovarnaya: 55.592028, 37.653656 11 | Stop Biryulyovo Passazhirskaya: 55.580999, 37.659164 12 | Bus 828: Biryulyovo Zapadnoye > Universam > Rossoshanskaya ulitsa > Biryulyovo Zapadnoye 13 | Stop Rossoshanskaya ulitsa: 55.595579, 37.605757 14 | Stop Prazhskaya: 55.611678, 37.603831 15 | 6 16 | Bus 256 17 | Bus 750 18 | Bus 751 19 | Stop Samara 20 | Stop Prazhskaya 21 | Stop Biryulyovo Zapadnoye 22 | -------------------------------------------------------------------------------- /Red_Belt/week_5/ConcurrentMap/profile.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | class LogDuration 8 | { 9 | public: 10 | explicit LogDuration(const std::string& message = {}) 11 | : _message(message + ": ") 12 | , _start(std::chrono::steady_clock::now()) 13 | { 14 | } 15 | 16 | ~LogDuration() 17 | { 18 | auto finish = std::chrono::steady_clock::now(); 19 | auto duration = finish - _start; 20 | std::cerr << _message 21 | << std::chrono::duration_cast(duration).count() 22 | << " ms" << std::endl; 23 | } 24 | private: 25 | std::string _message; 26 | std::chrono::steady_clock::time_point _start; 27 | }; 28 | 29 | #define UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 30 | #define UNIQ_ID(lineno) UNIQ_ID_IMPL(lineno) 31 | 32 | #define LOG_DURATION(message) \ 33 | LogDuration UNIQ_ID(__LINE__) {message}; -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Написать_объявление_класса/README.md: -------------------------------------------------------------------------------- 1 | #### Тренировочное задание по программированию: Написать объявление класса #### 2 | 3 | 4 | Вам дано полное определение класса *Rectangle* 5 | ```objectivec 6 | class Rectangle { 7 | public: 8 | Rectangle(int width, int height) : width_(width), height_(height) 9 | { 10 | } 11 | 12 | int GetArea() const { 13 | return width_ * height_; 14 | } 15 | 16 | int GetPerimeter() const { 17 | return 2 * (width_ + height_); 18 | } 19 | 20 | int GetWidth() const { return width_; } 21 | int GetHeight() const { return height_; } 22 | 23 | private: 24 | int width_, height_; 25 | }; 26 | 27 | ``` 28 | Пришлите заголовочный файл *rectangle.h*, содержащий объявление класса *Rectangle*. Это должен быть полноценный заголовочный файл, который можно использовать в большом проекте. В частности, в нём должна быть решена проблема двойного включения. -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Библиотека работы с INI-файлами/ini.cpp: -------------------------------------------------------------------------------- 1 | #include "ini.h" 2 | 3 | namespace Ini { 4 | 5 | Document Load(istream& input) { 6 | Document result; 7 | 8 | Section* current_section = nullptr; 9 | 10 | string str; 11 | while(getline(input, str)){ 12 | if(!str.empty()){ 13 | if(str[0] == '['){ 14 | current_section = &result.AddSection( 15 | str.substr(1, str.size() - 2) 16 | ); 17 | } 18 | else{ 19 | size_t pos = str.find('='); 20 | current_section->insert( 21 | {str.substr(0, pos), 22 | str.substr(pos + 1)} 23 | ); 24 | } 25 | } 26 | } 27 | 28 | return result; 29 | } 30 | 31 | Section& Document::AddSection(string name) { 32 | return sections[name]; 33 | } 34 | 35 | const Section& Document::GetSection(const string& name) const { 36 | return sections.at(name); 37 | } 38 | 39 | size_t Document::SectionCount() const { 40 | return sections.size(); 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /Red_Belt/week_5/Оператор присваивания для SimpleVector/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Оператор присваивания для SimpleVector 2 | 3 | В видеолекции мы с вами познакомились с конструктором копирования и оператором присваивания, а также написали конструктор копирования для SimpleVector. В этой задаче вам нужно реализовать оператор присваивания для SimpleVector. 4 | 5 | Напомним, что следующий код вызывает **конструктор копирования**: 6 | ```cpp 7 | SimpleVector source(5); 8 | SimpleVector dest = source; // Конструктор копирования 9 | ``` 10 | 11 | А код ниже — **оператор присваивания**: 12 | ```cpp 13 | SimpleVector source(5); 14 | SimpleVector dest; 15 | dest = source; // Оператор присваивания 16 | ``` 17 | 18 | Вам дан cpp-файл, который подключает заголовочный файл simple_vector.h и содержит небольшой набор юнит-тестов. Пришлите на проверку файл simple_vector.h с реализацией оператора присваивания. 19 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/Т_Загрузка расходов из формата JSON/json.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | using namespace std; 9 | 10 | class Node { 11 | public: 12 | explicit Node(vector array); 13 | explicit Node(map map); 14 | explicit Node(int value); 15 | explicit Node(string value); 16 | 17 | const vector& AsArray() const; 18 | const map& AsMap() const; 19 | int AsInt() const; 20 | const string& AsString() const; 21 | 22 | private: 23 | vector as_array; 24 | map as_map; 25 | int as_int; 26 | string as_string; 27 | }; 28 | 29 | class Document { 30 | public: 31 | explicit Document(Node root); 32 | 33 | const Node& GetRoot() const; 34 | 35 | private: 36 | Node root; 37 | }; 38 | 39 | Document Load(istream& input); 40 | 41 | -------------------------------------------------------------------------------- /Red_Belt/week_3/Swap, SortPointers, ReversedCopy/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Swap, SortPointers, ReversedCopy 2 | 3 | В этой задаче вам нужно реализовать три шаблонных функции: 4 | 5 | * template void Swap(T* first, T* second) — обменивает местами значения, на которые указывают указатели first и second 6 | * template void SortPointers(vector& pointers) — сортирует указатели по значениям, на которые они указывают 7 | * template void ReversedCopy(T* src, size_t count, T* dst) — копирует в обратном порядке count элементов, начиная с адреса в указателе src, в область памяти, начинающуюся по адресу dst. При этом 8 | 1. каждый объект из диапазона [src; src + count) должен быть скопирован не более одного раза; 9 | 2. диапазоны [src; src + count) и [dst; dst + count) могут пересекаться; 10 | 3. элементы в части диапазона [src; src + count), которая не пересекается с [dst; dst + count), должны остаться неизменными. 11 | -------------------------------------------------------------------------------- /Red_Belt/week_5/Суммирование матрицы/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Суммирование матрицы 2 | 3 | В лекциях мы рассмотрели пример, в котором сначала выполнялась генерация квадратной матрицы, а затем находилась сумма элементов в ней. При этом нам удалось ускорить генерацию матрицы за счёт применения многопоточности. В этой задаче вам нужно сделать то же самое для суммирования элементов матрицы. 4 | 5 | Вам нужно написать функцию int64_t CalculateMatrixSum(const vector>& matrix), которая получает на вход квадратную матрицу и возвращает сумму элементов в ней. 6 | 7 | Ваша реализация будет тестироваться следующим образом: 8 | * на вход вашей функции будут подаваться квадратные матрицы размером до 9000 (в данном случае размер матрицы — это количество строк в ней); 9 | * для одной и той же матрицы функция CalculateMatrixSum будет запускаться несколько раз; среднее время работы одного вызова в нашей тестирующей системе не должно превышать 15 мс; 10 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/Т_Рефакторинг чужого кода/json.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace Json { 10 | 11 | class Node { 12 | public: 13 | explicit Node(std::vector array); 14 | explicit Node(std::map map); 15 | explicit Node(int value); 16 | explicit Node(std::string value); 17 | 18 | const std::vector& AsArray() const; 19 | const std::map& AsMap() const; 20 | int AsInt() const; 21 | const std::string& AsString() const; 22 | 23 | private: 24 | std::vector as_array; 25 | std::map as_map; 26 | int as_int; 27 | std::string as_string; 28 | }; 29 | 30 | class Document { 31 | public: 32 | explicit Document(Node root); 33 | 34 | const Node& GetRoot() const; 35 | 36 | private: 37 | Node root; 38 | }; 39 | 40 | Document Load(std::istream& input); 41 | 42 | } 43 | -------------------------------------------------------------------------------- /White_Belt/Уравнение/quadraticEquation.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : quadraticEquation.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | 14 | int main() { 15 | 16 | double A, B, C; 17 | double D; 18 | double X1 = 0 , X2 = 0; 19 | 20 | cin >> A >> B >> C; 21 | 22 | D = B*B - 4*A*C; 23 | 24 | if (D > 0 && A != 0) 25 | { 26 | X1 = ((-1)*B + sqrt(D))/(2*A); 27 | X2 = ((-1)*B - sqrt(D))/(2*A); 28 | 29 | cout << X1 << " " << X2; 30 | } 31 | 32 | if (D == 0 && A != 0) 33 | { 34 | X1 = (-1)*B/(2*A) + 0; 35 | cout << X1; 36 | } 37 | 38 | if (A == 0 && B!=0){ 39 | X1 = (-1)*(C/B); 40 | cout << X1 + 0; 41 | } 42 | 43 | 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /Yellow_Belt/week_1/Масса_блоков/MassOfBlocks.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : AverageTemperature.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Counting Average Temperature in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | 14 | int main() { 15 | int N, R; 16 | cin >> N >> R; 17 | uint64_t answer = 0; 18 | for (int i = 0; i < N; ++i) { 19 | int W, H, D; 20 | cin >> W >> H >> D; 21 | // Если не привести W к типу uint64_t перед умножением, 22 | // произведение будет иметь тип int и случится переполнение. 23 | // Альтернативное решение — хранить сами W, H, D в uint64_t 24 | answer += static_cast(W) * H * D; 25 | } 26 | answer *= R; 27 | cout << answer << endl; 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Разбиения на слова/SplitIntoWords.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | vector SplitIntoWords(const string& s){ 10 | vector answer; 11 | auto current_state = begin(s); 12 | 13 | for(auto char_it = begin(s); char_it != end(s); char_it++) 14 | { 15 | if (*char_it == *(find(char_it, end(s), ' ')) ) 16 | { 17 | answer.push_back({current_state, char_it}); 18 | current_state = ++char_it; 19 | } 20 | } 21 | answer.push_back({current_state, end(s)}); 22 | 23 | return answer; 24 | } 25 | 26 | int main() { 27 | string s = "C Cpp Java Python"; 28 | 29 | vector words = SplitIntoWords(s); 30 | cout << words.size() << " "; 31 | for (auto it = begin(words); it != end(words); ++it) { 32 | if (it != begin(words)) { 33 | cout << "/"; 34 | } 35 | cout << *it; 36 | } 37 | cout << endl; 38 | 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /White_Belt/Ежемесячные_дела/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Ежемесячные дела 2 | 3 | У каждого из нас есть ежемесячные дела, каждое из которых нужно выполнять 4 | в конкретный день каждого месяца: оплата счетов за электричество, абонентская 5 | плата за связь и пр. Вам нужно реализовать работу со списком таких дел, 6 | а именно, обработку следующих операций: 7 | 8 | *ADD is* 9 | Добавить дело с названием s в день i. 10 | 11 | *NEXT* 12 | Закончить текущий месяц и начать новый. Если новый месяц имеет больше дней, 13 | чем текущий, добавленные дни изначально не будут содержать дел. Если же в 14 | новом месяце меньше дней, дела со всех удаляемых дней необходимо будет 15 | переместить на последний день нового месяца. 16 | 17 | Обратите внимание, что количество команд этого типа может превышать 11. 18 | 19 | *DUMP i* 20 | Вывести все дела в день i. 21 | 22 | Изначально текущим месяцем считается январь. Количества дней в месяцах соответствуют 23 | Григорианскому календарю с той лишь разницей, что в феврале всегда 28 дней. -------------------------------------------------------------------------------- /Yellow_Belt/materials/html/Сводная таблица по алгоритмам поиска _ Coursera_files/4.5418151e901dcba9488b.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[4],{"3/Qw":function(module,e,n){"use strict";var i=n("pVnL"),a=n.n(i),o=n("QILm"),t=n.n(o),r=n("17x9"),c=n.n(r),l=n("sbe7"),s=n.n(l),d=n("shn3"),m=function LoadingBox(e){var n=e.loadingText,i=e.iconSize,o=void 0===i?64:i,r=e.iconName,c=void 0===r?"SvgCssLoaderSignal":r,l=t()(e,["loadingText","iconSize","iconName"]);return s.a.createElement("div",a()({className:"rc-LoadingBox vertical-box align-items-absolute-center"},l),s.a.createElement(d.a,{iconName:c,size:o,className:"color-primary"}),n&&s.a.createElement("p",null,n))};m.propTypes={iconName:c.a.string,loadingText:c.a.string,iconSize:c.a.number},e.a=m},v8wb:function(module,e,n){"use strict";n.r(e);var i=n("sbe7"),a=n.n(i),o=n("3/Qw"),t=function DeferToClientSideRender(e){if("undefined"==typeof window)return a.a.createElement(o.a,{iconSize:512});return e.children&&a.a.cloneElement(e.children,{})};e.default=t}}]); 2 | //# sourceMappingURL=4.5418151e901dcba9488b.js.map -------------------------------------------------------------------------------- /White_Belt/Сортировка_целых_чисел_по_модулю/absSort.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : absSort.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | using namespace std; 14 | 15 | bool Compare(int a, int b) 16 | { 17 | return abs(a) < abs(b); 18 | } 19 | 20 | void PrintVect(const vector& vect) 21 | { 22 | for (int j = 0; j < vect.size(); j++) 23 | { 24 | cout << vect[j] << " "; 25 | } 26 | } 27 | 28 | int main() { 29 | 30 | int N, i, number; 31 | vector A; 32 | 33 | cin >> N; 34 | 35 | for(i = 0; i < N; i++) 36 | { 37 | cin >> number; 38 | A.push_back(number); 39 | } 40 | 41 | sort(A.begin(), A.end(), Compare); 42 | 43 | PrintVect(A); 44 | 45 | return 0; 46 | } 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Построение арифметического выражения/Часть 1/BuildExpression.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace std; 6 | 7 | void AddBrackets (deque& expression){ 8 | expression.push_back(") "); 9 | expression.push_front("("); 10 | } 11 | 12 | void AddOperationWithNumber(deque& expression, char operation, int number){ 13 | AddBrackets(expression); 14 | expression.push_back(string(1, operation)); 15 | expression.push_back(" "); 16 | expression.push_back(to_string(number)); 17 | } 18 | 19 | int main() { 20 | int init_num, number_of_operations; 21 | deque expression; 22 | 23 | cin >> init_num; 24 | expression.push_back(to_string(init_num)); 25 | 26 | cin >> number_of_operations; 27 | 28 | for(int i = 0; i < number_of_operations; i++){ 29 | char operation; 30 | int number; 31 | 32 | cin >> operation >> number; 33 | AddOperationWithNumber(expression, operation, number); 34 | } 35 | 36 | for (const string& s : expression) { 37 | cout << s; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Brown_Belt/materials/Stuff/Profile/profile.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class LogDuration { 10 | public: 11 | explicit LogDuration(const std::string& msg = "") 12 | : message(msg + ": ") 13 | , start(std::chrono::steady_clock::now()) 14 | { 15 | } 16 | 17 | ~LogDuration() { 18 | auto finish = std::chrono::steady_clock::now(); 19 | auto dur = finish - start; 20 | std::ostringstream os; 21 | os << message 22 | << std::chrono::duration_cast(dur).count() 23 | << " ms" << std::endl; 24 | std::cerr << os.str(); 25 | } 26 | private: 27 | std::string message; 28 | std::chrono::steady_clock::time_point start; 29 | }; 30 | 31 | #ifndef UNIQ_ID 32 | #define UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 33 | #define UNIQ_ID(lineno) UNIQ_ID_IMPL(lineno) 34 | #endif 35 | 36 | #define LOG_DURATION(message) \ 37 | LogDuration UNIQ_ID(__LINE__){message}; 38 | 39 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Сортировка слиянием/MergeSort_2part.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace std; 6 | 7 | template 8 | void MergeSort(RandomIt range_begin, RandomIt range_end){ 9 | int length = range_end - range_begin; 10 | 11 | if (length < 2) { 12 | return; 13 | } 14 | else{ 15 | vector elems(range_begin, range_end); 16 | vector tmp; 17 | 18 | auto mid_1 = begin(elems) + length/3; 19 | auto mid_2 = mid_1 + length/3; 20 | 21 | MergeSort(begin(elems), mid_1); 22 | MergeSort(mid_1, mid_2); 23 | MergeSort(mid_2, end(elems)); 24 | 25 | merge(begin(elems), mid_1, mid_1, mid_2, back_inserter(tmp)); 26 | merge(begin(tmp), tmp.end(), mid_2, end(elems), range_begin); 27 | } 28 | 29 | } 30 | 31 | int main() { 32 | vector v = {6, 4, 7, 6, 4, 4, 0, 1, 5}; 33 | MergeSort(begin(v), end(v)); 34 | for (int x : v) { 35 | cout << x << " "; 36 | } 37 | cout << endl; 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /Brown_Belt/week_3/З_operator[] в классе Polynomial/profile.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class LogDuration { 10 | public: 11 | explicit LogDuration(const std::string& msg = "") 12 | : message(msg + ": ") 13 | , start(std::chrono::steady_clock::now()) 14 | { 15 | } 16 | 17 | ~LogDuration() { 18 | auto finish = std::chrono::steady_clock::now(); 19 | auto dur = finish - start; 20 | std::ostringstream os; 21 | os << message 22 | << std::chrono::duration_cast(dur).count() 23 | << " ms" << std::endl; 24 | std::cerr << os.str(); 25 | } 26 | private: 27 | std::string message; 28 | std::chrono::steady_clock::time_point start; 29 | }; 30 | 31 | #ifndef UNIQ_ID 32 | #define UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 33 | #define UNIQ_ID(lineno) UNIQ_ID_IMPL(lineno) 34 | #endif 35 | 36 | #define LOG_DURATION(message) \ 37 | LogDuration UNIQ_ID(__LINE__){message}; 38 | 39 | -------------------------------------------------------------------------------- /Brown_Belt/week_3/З_Константность в шаблоне ConcurrentMap/profile.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class LogDuration { 10 | public: 11 | explicit LogDuration(const std::string& msg = "") 12 | : message(msg + ": ") 13 | , start(std::chrono::steady_clock::now()) 14 | { 15 | } 16 | 17 | ~LogDuration() { 18 | auto finish = std::chrono::steady_clock::now(); 19 | auto dur = finish - start; 20 | std::ostringstream os; 21 | os << message 22 | << std::chrono::duration_cast(dur).count() 23 | << " ms" << std::endl; 24 | std::cerr << os.str(); 25 | } 26 | private: 27 | std::string message; 28 | std::chrono::steady_clock::time_point start; 29 | }; 30 | 31 | #ifndef UNIQ_ID 32 | #define UNIQ_ID_IMPL(lineno) _a_local_var_##lineno 33 | #define UNIQ_ID(lineno) UNIQ_ID_IMPL(lineno) 34 | #endif 35 | 36 | #define LOG_DURATION(message) \ 37 | LogDuration UNIQ_ID(__LINE__){message}; 38 | 39 | -------------------------------------------------------------------------------- /Red_Belt/week_2/Изучение нового языка/learner.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | class Learner { 11 | private: 12 | set dict; 13 | 14 | public: 15 | int Learn(const vector& words) { 16 | int old_dict_size = dict.size(); 17 | for (const auto& word : words) { 18 | dict.insert(word); 19 | } 20 | return dict.size() - old_dict_size; 21 | } 22 | 23 | vector KnownWords() { 24 | return {dict.begin(), dict.end()}; 25 | } 26 | }; 27 | 28 | int main() { 29 | Learner learner; 30 | string line; 31 | while (getline(cin, line)) { 32 | vector words; 33 | stringstream ss(line); 34 | string word; 35 | while (ss >> word) { 36 | words.push_back(word); 37 | } 38 | cout << learner.Learn(words) << "\n"; 39 | } 40 | cout << "=== known words ===\n"; 41 | for (auto word : learner.KnownWords()) { 42 | cout << word << "\n"; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /White_Belt/Работа_с_сервером_времени/GetCurrentTime.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : GetCurrentTime.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | using namespace std; 13 | 14 | string AskTimeServer() {} 15 | 16 | class TimeServer { 17 | public: 18 | string GetCurrentTime() { 19 | 20 | try{ 21 | LastFetchedTime = AskTimeServer(); 22 | }catch (system_error&){ 23 | 24 | } 25 | 26 | return LastFetchedTime; 27 | } 28 | 29 | private: 30 | string LastFetchedTime = "00:00:00"; 31 | }; 32 | 33 | int main() { 34 | TimeServer ts; 35 | 36 | try { 37 | cout << ts.GetCurrentTime() << endl; 38 | } catch (exception& e) { 39 | cout << "Exception got: " << e.what() << endl; 40 | } 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /Yellow_Belt/week_1/Масса_блоков/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Масса блоков #### 2 | 3 | 4 | Вычислите суммарную массу имеющих форму прямоугольного параллелепипеда бетонных блоков одинаковой плотности, но разного размера. 5 | 6 | ##### Указание ##### 7 | Считайте, что размеры блоков измеряются в сантиметрах, плотность — в граммах на кубический сантиметр, а итоговая масса — в граммах. Таким образом, массу блока можно вычислять как простое произведение плотности на объём. 8 | 9 | ##### Формат ввода ##### 10 | В первой строке вводятся два целых положительных числа: количество блоков _N_ и плотность каждого блока _R_. Каждая из следующих _N_ строк содержит три целых положительных числа _W_, _H_, _D_ — размеры очередного блока. 11 | 12 | Гарантируется, что: 13 | 14 | * количество блоков _N_ не превосходит 10^5; 15 | * плотность блоков _R_ не превосходит 100; 16 | * размеры блоков _W_, _H_, _D_ не превосходят 10^4. 17 | 18 | ##### Пример ##### 19 | 20 | ###### Ввод ####### 21 | ```commandline 22 | 2 14 23 | 1 2 3 24 | 30 40 50 25 | ``` 26 | 27 | ###### Вывод ###### 28 | ```commandline 29 | 840084 30 | ``` -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/date.cpp: -------------------------------------------------------------------------------- 1 | #include "date.h" 2 | 3 | time_t Date::AsTimestamp() const { 4 | std::tm t; 5 | t.tm_sec = 0; 6 | t.tm_min = 0; 7 | t.tm_hour = 0; 8 | t.tm_mday = day_; 9 | t.tm_mon = mon_ - 1; 10 | t.tm_year = year_ - 1900; 11 | t.tm_isdst = 0; 12 | return mktime(&t); 13 | } 14 | 15 | bool operator== (const Date& lhs, const Date& rhs) { 16 | return ( 17 | std::tie(lhs.year_, lhs.mon_, lhs.day_) == 18 | std::tie(rhs.year_, rhs.mon_, rhs.day_) 19 | ); 20 | } 21 | 22 | bool operator!= (const Date& lhs, const Date& rhs) { 23 | return ( 24 | std::tie(lhs.year_, lhs.mon_, lhs.day_) != 25 | std::tie(rhs.year_, rhs.mon_, rhs.day_) 26 | ); 27 | } 28 | 29 | bool operator< (const Date& lhs, const Date& rhs) { 30 | return ( 31 | std::tie(lhs.year_, lhs.mon_, lhs.day_) < 32 | std::tie(rhs.year_, rhs.mon_, rhs.day_) 33 | ); 34 | } 35 | 36 | std::ostream& operator<< (std::ostream& output, const Date& date) { 37 | output << "{" << date.year_ << "-" << date.mon_ << "-" << date.day_ << "}"; 38 | return output; 39 | } 40 | 41 | 42 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/date.cpp: -------------------------------------------------------------------------------- 1 | #include "date.h" 2 | 3 | time_t Date::AsTimestamp() const { 4 | std::tm t; 5 | t.tm_sec = 0; 6 | t.tm_min = 0; 7 | t.tm_hour = 0; 8 | t.tm_mday = day_; 9 | t.tm_mon = mon_ - 1; 10 | t.tm_year = year_ - 1900; 11 | t.tm_isdst = 0; 12 | return mktime(&t); 13 | } 14 | 15 | bool operator== (const Date& lhs, const Date& rhs) { 16 | return ( 17 | std::tie(lhs.year_, lhs.mon_, lhs.day_) == 18 | std::tie(rhs.year_, rhs.mon_, rhs.day_) 19 | ); 20 | } 21 | 22 | bool operator!= (const Date& lhs, const Date& rhs) { 23 | return ( 24 | std::tie(lhs.year_, lhs.mon_, lhs.day_) != 25 | std::tie(rhs.year_, rhs.mon_, rhs.day_) 26 | ); 27 | } 28 | 29 | bool operator< (const Date& lhs, const Date& rhs) { 30 | return ( 31 | std::tie(lhs.year_, lhs.mon_, lhs.day_) < 32 | std::tie(rhs.year_, rhs.mon_, rhs.day_) 33 | ); 34 | } 35 | 36 | std::ostream& operator<< (std::ostream& output, const Date& date) { 37 | output << "{" << date.year_ << "-" << date.mon_ << "-" << date.day_ << "}"; 38 | return output; 39 | } 40 | 41 | 42 | -------------------------------------------------------------------------------- /White_Belt/Структура_LectureTitle/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Структура LectureTitle 2 | 3 | Дана структура LectureTitle: 4 | 5 | struct LectureTitle { 6 | string specialization; 7 | string course; 8 | string week; 9 | }; 10 | 11 | Допишите конструктор и структуры Specialization, Course, Week так, 12 | чтобы объект LectureTitle можно было создать с помощью кода: 13 | 14 | LectureTitle title( 15 | Specialization("C++"), 16 | Course("White belt"), 17 | Week("4th") 18 | ); 19 | 20 | но нельзя было с помощью следующих фрагментов кода: 21 | 22 | LectureTitle title("C++", "White belt", "4th"); 23 | 24 | LectureTitle title(string("C++"), string("White belt"), string("4th")); 25 | 26 | LectureTitle title = {"C++", "White belt", "4th"}; 27 | 28 | LectureTitle title = {{"C++"}, {"White belt"}, {"4th"}}; 29 | 30 | LectureTitle title( 31 | Course("White belt"), 32 | Specialization("C++"), 33 | Week("4th") 34 | ); 35 | 36 | LectureTitle title( 37 | Specialization("C++"), 38 | Week("4th"), 39 | Course("White belt") 40 | ); -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Удаление повторов/README.md: -------------------------------------------------------------------------------- 1 | #### Тренировочное задание по программированию: Удаление повторов #### 2 | 3 | 4 | Напишите шаблонную функцию *RemoveDuplicates*, принимающую по ссылке вектор *elements* объектов типа *T* и удаляющую из него все дубликаты элементов. Порядок оставшихся элементов может быть любым. 5 | 6 | Гарантируется, что объекты типа *T* можно сравнивать с помощью операторов ==, !=, < и >. 7 | ```objectivec 8 | template 9 | void RemoveDuplicates(vector& elements); 10 | ``` 11 | ##### Пример кода ##### 12 | ```objectivec 13 | int main() { 14 | vector v1 = {6, 4, 7, 6, 4, 4, 0, 1}; 15 | RemoveDuplicates(v1); 16 | for (int x : v1) { 17 | cout << x << " "; 18 | } 19 | cout << endl; 20 | 21 | vector v2 = {"C", "C++", "C++", "C", "C++"}; 22 | RemoveDuplicates(v2); 23 | for (const string& s : v2) { 24 | cout << s << " "; 25 | } 26 | cout << endl; 27 | return 0; 28 | } 29 | ``` 30 | ###### Вывод ###### 31 | ```commandline 32 | 6 4 7 0 1 33 | C++ C 34 | ``` 35 | Порядок элементов может быть другим, например: 36 | ```commandline 37 | 7 4 6 1 0 38 | C C++ 39 | ``` -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Реализовать класс_объявленный_в_заголовочном_файле/phone_number.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "phone_number.h" 5 | 6 | using namespace std; 7 | 8 | PhoneNumber::PhoneNumber(const string& international_number) { 9 | istringstream is(international_number); 10 | 11 | char sign = is.get(); 12 | getline(is, country_code_, '-'); 13 | getline(is, city_code_, '-'); 14 | getline(is, local_number_); 15 | 16 | if (sign != '+' || country_code_.empty() || city_code_.empty() || local_number_.empty()) { 17 | throw invalid_argument("Phone number must begin with '+' symbol and contain 3 parts separated by '-' symbol: " + international_number); 18 | } 19 | } 20 | 21 | string PhoneNumber::GetCountryCode() const { 22 | return country_code_; 23 | } 24 | 25 | string PhoneNumber::GetCityCode() const { 26 | return city_code_; 27 | } 28 | 29 | string PhoneNumber::GetLocalNumber() const { 30 | return local_number_; 31 | } 32 | 33 | string PhoneNumber::GetInternationalNumber() const { 34 | return ("+" + country_code_ + "-" + city_code_ + "-" + local_number_); 35 | } 36 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/Т_Загрузка расходов из формата XML/xml.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | using namespace std; 10 | 11 | class Node { 12 | public: 13 | Node(string name, unordered_map attrs); 14 | 15 | const vector& Children() const; 16 | void AddChild(Node node); 17 | string_view Name() const; 18 | 19 | template 20 | T AttributeValue(const string& name) const; 21 | 22 | private: 23 | string name; 24 | vector children; 25 | unordered_map attrs; 26 | }; 27 | 28 | class Document { 29 | public: 30 | explicit Document(Node root); 31 | 32 | const Node& GetRoot() const; 33 | 34 | private: 35 | Node root; 36 | }; 37 | 38 | Document Load(istream& input); 39 | 40 | 41 | 42 | 43 | template 44 | inline T Node::AttributeValue(const string& name) const { 45 | istringstream attr_input(attrs.at(name)); 46 | T result; 47 | attr_input >> result; 48 | return result; 49 | } 50 | 51 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/bus_manager.cpp: -------------------------------------------------------------------------------- 1 | #include "bus_manager.h" 2 | 3 | using namespace std; 4 | 5 | 6 | void BusManager::AddBus(const string& bus, const vector& stops) { 7 | buses_to_stops[bus] = stops; 8 | 9 | for (const auto& stop : stops) { 10 | stops_to_buses[stop].push_back(bus); 11 | } 12 | } 13 | 14 | BusesForStopResponse BusManager::GetBusesForStop(const string& stop) const { 15 | BusesForStopResponse answer; 16 | if (stops_to_buses.count(stop) > 0) { 17 | answer.buses = stops_to_buses.at(stop); 18 | } 19 | return answer; 20 | } 21 | 22 | StopsForBusResponse BusManager::GetStopsForBus(const string& bus) const { 23 | 24 | vector>> answer; 25 | if (buses_to_stops.count(bus) > 0) { 26 | for (const auto& stop : buses_to_stops.at(bus)) { 27 | answer.push_back(make_pair(stop, stops_to_buses.at(stop))); 28 | } 29 | } 30 | 31 | return StopsForBusResponse {bus ,answer}; 32 | } 33 | 34 | 35 | AllBusesResponse BusManager::GetAllBuses() const { 36 | AllBusesResponse answer; 37 | answer.allbuses = buses_to_stops; 38 | return answer; 39 | } 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_first_part/search_server.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | using namespace std; 15 | 16 | class InvertedIndex { 17 | public: 18 | struct Entry { 19 | size_t docid, hitcount; 20 | }; 21 | 22 | InvertedIndex() = default; 23 | explicit InvertedIndex(istream& document_input); 24 | 25 | public: 26 | const vector& Lookup(string_view word) const; 27 | const deque& GetDocuments() const { 28 | return docs; 29 | } 30 | 31 | private: 32 | deque docs; 33 | map> index; 34 | }; 35 | 36 | class SearchServer { 37 | public: 38 | SearchServer() = default; 39 | explicit SearchServer(istream& document_input); 40 | 41 | public: 42 | void UpdateDocumentBase(istream& document_input); 43 | void AddQueriesStream(istream& query_input, ostream& search_results_output); 44 | 45 | private: 46 | InvertedIndex index; 47 | }; 48 | -------------------------------------------------------------------------------- /White_Belt/Имена_и_фамилии-1/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Имена и фамилии — 1 2 | 3 | Реализуйте класс для человека, поддерживающий историю изменений человеком 4 | своих фамилии и имени. 5 | 6 | Считайте, что в каждый год может произойти не более одного изменения фамилии и 7 | не более одного изменения имени. При этом с течением времени могут открываться 8 | всё новые факты из прошлого человека, поэтому года́ в последовательных вызовах 9 | методов ChangeLastName и ChangeFirstName не обязаны возрастать. 10 | 11 | Гарантируется, что все имена и фамилии непусты. 12 | 13 | Строка, возвращаемая методом GetFullName, должна содержать разделённые одним 14 | пробелом имя и фамилию человека по состоянию на конец данного года. 15 | 16 | * Если к данному году не случилось ни одного изменения фамилии и имени, верните 17 | строку "Incognito". 18 | 19 | * Если к данному году случилось изменение фамилии, но не было ни одного изменения 20 | имени, верните "last_name with unknown first name". 21 | 22 | * Если к данному году случилось изменение имени, но не было ни одного изменения 23 | фамилии, верните "first_name with unknown last name". -------------------------------------------------------------------------------- /White_Belt/Разворот_последовательности-2/Reverse.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : Recerse.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | #include 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | 14 | vector Reversed(vector source) 15 | { 16 | int change; 17 | int a; 18 | 19 | for(int i = 0; i < source.size()/2; i++) 20 | { 21 | a = source.size() - i - 1; 22 | 23 | change = source[i]; 24 | source [i] = source[a]; 25 | source[a] = change; 26 | 27 | } 28 | 29 | return source; 30 | } 31 | 32 | int main() { 33 | 34 | vector source; 35 | 36 | source.push_back(1); 37 | source.push_back(5); 38 | source.push_back(3); 39 | source.push_back(4); 40 | source.push_back(2); 41 | 42 | source = Reversed(source); 43 | 44 | for (int i = 0; i < source.size(); i++) 45 | { 46 | cout << source[i]; 47 | } 48 | 49 | 50 | 51 | } 52 | 53 | -------------------------------------------------------------------------------- /Brown_Belt/week_6-final/Транспортный-справочник_часть-C/EteTests/3.dat: -------------------------------------------------------------------------------- 1 | 13 2 | Stop Tolstopaltsevo: 55.611087, 37.20829, 3900m to Marushkino 3 | Stop Marushkino: 55.595884, 37.209755, 9900m to Rasskazovka 4 | Bus 256: Biryulyovo Zapadnoye > Biryusinka > Universam > Biryulyovo Tovarnaya > Biryulyovo Passazhirskaya > Biryulyovo Zapadnoye 5 | Bus 750: Tolstopaltsevo - Marushkino - Rasskazovka 6 | Stop Rasskazovka: 55.632761, 37.333324 7 | Stop Biryulyovo Zapadnoye: 55.574371, 37.6517, 7500m to Rossoshanskaya ulitsa, 1800m to Biryusinka, 2400m to Universam 8 | Stop Biryusinka: 55.581065, 37.64839, 750m to Universam 9 | Stop Universam: 55.587655, 37.645687, 5600m to Rossoshanskaya ulitsa, 900m to Biryulyovo Tovarnaya 10 | Stop Biryulyovo Tovarnaya: 55.592028, 37.653656, 1300m to Biryulyovo Passazhirskaya 11 | Stop Biryulyovo Passazhirskaya: 55.580999, 37.659164, 1200m to Biryulyovo Zapadnoye 12 | Bus 828: Biryulyovo Zapadnoye > Universam > Rossoshanskaya ulitsa > Biryulyovo Zapadnoye 13 | Stop Rossoshanskaya ulitsa: 55.595579, 37.605757 14 | Stop Prazhskaya: 55.611678, 37.603831 15 | 6 16 | Bus 256 17 | Bus 750 18 | Bus 751 19 | Stop Samara 20 | Stop Prazhskaya 21 | Stop Biryulyovo Zapadnoye 22 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Реализовать_функции_объявленные_в_заголовочном_файле/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Реализовать функции, объявленные в заголовочном файле #### 2 | 3 | 4 | Вам дан заголовочный файл *sum_reverse_sort.h*, содержащий объявления трёх функций 5 | 6 | [sum_reverse_sort.h](https://github.com/avtomato/Basics-of-C-plus-plus-development-yellow-belt/blob/master/week-03/01-Programming-Assignment/Source/sum_reverse_sort.h) 7 | 8 | ```objectivec 9 | #pragma once 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | int Sum(int x, int y); 16 | string Reverse(string s); 17 | void Sort(vector& nums); 18 | 19 | ``` 20 | Вам надо прислать *cpp*-файл, содержащий определения этих функций. 21 | 22 | ##### Как будет тестироваться ваш код ##### 23 | Автоматическая тестирующая система добавит ваш *cpp*-файл в проект, содержащий другой *cpp*-файл с юнит-тестами для всех трёх функций, а также файл *sum_reverse_sort.h*. Затем она соберёт этот проект и, если компиляция будет выполнена успешно, запустит получившийся исполняемый файл. Если он завершится успешно (т. е. юнит-тесты не найдут ошибок в вашей реализации), то ваша посылка будет засчитана. 24 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Разбиения на слова/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Разбиение на слова #### 2 | 3 | 4 | Напишите функцию *SplitIntoWords*, разбивающую строку на слова по пробелам. 5 | ```objectivec 6 | vector SplitIntoWords(const string& s); 7 | ``` 8 | Гарантируется, что: 9 | * строка непуста; 10 | * строка состоит лишь из латинских букв и пробелов; 11 | * первый и последний символы строки не являются пробелами; 12 | * строка не содержит двух пробелов подряд. 13 | 14 | ##### Подсказка ##### 15 | Рекомендуется следующий способ решения задачи: 16 | * искать очередной пробел с помощью алгоритма find; 17 | * создавать очередное слово с помощью конструктора строки по двум итераторам. 18 | 19 | ##### Пример кода ##### 20 | ```objectivec 21 | int main() { 22 | string s = "C Cpp Java Python"; 23 | 24 | vector words = SplitIntoWords(s); 25 | cout << words.size() << " "; 26 | for (auto it = begin(words); it != end(words); ++it) { 27 | if (it != begin(words)) { 28 | cout << "/"; 29 | } 30 | cout << *it; 31 | } 32 | cout << endl; 33 | 34 | return 0; 35 | } 36 | ``` 37 | ###### Вывод ###### 38 | ```commandline 39 | С/Cpp/Java/Python 40 | ``` -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/query.cpp: -------------------------------------------------------------------------------- 1 | #include "query.h" 2 | 3 | istream& operator >> (istream& is, Query& q) { 4 | string type; 5 | is >> type; 6 | 7 | map m = 8 | { 9 | {"NEW_BUS", QueryType::NewBus}, 10 | {"BUSES_FOR_STOP", QueryType::BusesForStop}, 11 | {"STOPS_FOR_BUS", QueryType::StopsForBus}, 12 | {"ALL_BUSES", QueryType::AllBuses}, 13 | }; 14 | 15 | q.type = m[type]; 16 | is.ignore(1); 17 | switch (q.type) { 18 | case QueryType::NewBus: 19 | is >> q.bus; 20 | 21 | int n_of_stops; 22 | is >> n_of_stops; 23 | q.stops.clear(); 24 | for (int i = 0; i < n_of_stops; ++i) { 25 | string stop; 26 | is >> stop; 27 | q.stops.push_back(stop); 28 | } 29 | break; 30 | case QueryType::StopsForBus: 31 | is >> q.bus; 32 | break; 33 | case QueryType::BusesForStop: 34 | is >> q.stop; 35 | break; 36 | case QueryType::AllBuses: 37 | break; 38 | } 39 | return is; 40 | } 41 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_home-desktop-version/budget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "date.h" 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | enum class Operation { 12 | NONE, 13 | EARM, 14 | PAY_TAX, 15 | COMPUTE_INCOME 16 | }; 17 | 18 | std::ostream& operator<< (std::ostream& output, const Operation& op); 19 | 20 | struct Instruction { 21 | Operation op = Operation::NONE; 22 | Date from; 23 | Date to; 24 | int value = -1; 25 | }; 26 | 27 | class BudgetManager { 28 | public: 29 | BudgetManager() = default; 30 | 31 | public: 32 | void Process(size_t Q, std::istream& input); 33 | Instruction Decode(std::string_view command) const; 34 | void Execute(const Instruction& inst); 35 | void EarnMoney(const Date& from, const Date& to, int value); 36 | void PayTaxes(const Date& from, const Date& to); 37 | double ComputeIncome(const Date& from, const Date& to); 38 | 39 | public: 40 | std::map getFinance() { 41 | return finance; 42 | } 43 | 44 | private: 45 | using finance_iter = typename std::map::iterator; 46 | std::map finance; 47 | }; 48 | -------------------------------------------------------------------------------- /White_Belt/Структура_LectureTitle/LectureTitle.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : LectureTitle.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | using namespace std; 11 | 12 | struct Specialization{ 13 | string value; 14 | explicit Specialization(string new_value){ 15 | value = new_value; 16 | } 17 | }; 18 | 19 | struct Course{ 20 | string value; 21 | explicit Course(string new_value){ 22 | value = new_value; 23 | } 24 | }; 25 | 26 | struct Week{ 27 | string value; 28 | explicit Week(string new_value){ 29 | value = new_value; 30 | } 31 | }; 32 | 33 | struct LectureTitle { 34 | string specialization; 35 | string course; 36 | string week; 37 | 38 | LectureTitle(Specialization new_specialization, Course new_course, Week new_week){ 39 | specialization = new_specialization.value; 40 | course = new_course.value; 41 | week = new_week.value; 42 | } 43 | }; 44 | 45 | int main() { 46 | 47 | return 0; 48 | } 49 | -------------------------------------------------------------------------------- /Brown_Belt/week_2/Т_Рефакторинг чужого кода/xml.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | namespace Xml { 11 | 12 | class Node { 13 | public: 14 | Node(std::string name, std::unordered_map attrs); 15 | 16 | const std::vector& Children() const; 17 | void AddChild(Node node); 18 | std::string_view Name() const; 19 | 20 | template 21 | T AttributeValue(const std::string& name) const; 22 | 23 | private: 24 | std::string name; 25 | std::vector children; 26 | std::unordered_map attrs; 27 | }; 28 | 29 | class Document { 30 | public: 31 | explicit Document(Node root); 32 | 33 | const Node& GetRoot() const; 34 | 35 | private: 36 | Node root; 37 | }; 38 | 39 | Document Load(std::istream& input); 40 | 41 | 42 | 43 | 44 | template 45 | inline T Node::AttributeValue(const std::string& name) const { 46 | std::istringstream attr_input(attrs.at(name)); 47 | T result; 48 | attr_input >> result; 49 | return result; 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /Red_Belt/week_5/Считалка Иосифа/README.md: -------------------------------------------------------------------------------- 1 | ## Задание по программированию: Считалка Иосифа 2 | 3 | Дан диапазон объектов некоторого типа. Напишите функцию, переставляющую его элементы в соответствии с порядком, определённым так называемой считалкой Иосифа с заданным размером шага: 4 | ```cpp 5 | template 6 | void MakeJosephusPermutation( 7 | RandomIt range_begin, RandomIt range_end, 8 | uint32_t step_size 9 | ); 10 | ``` 11 | 12 | Гарантируется, что итераторы range_begin и range_end являются итераторами произвольного доступа, то есть допускают вычитание одного из другого и сложение с числом. Кроме того, вы можете полагаться на то, что step_size > 0. Тип переупорядочиваемых объектов можно получить с помощью выражения typename RandomIt::value_type. Объекты этого типа запрещено копировать. При наличии копирования этих объектов вы получите ошибку компиляции. 13 | 14 | Ограничения 15 | 16 | Максимальный размер диапазона — 10^5, максимальный размер шага — 10^2. Время выполнения одного вызова функции ограничено 1 секундой. 17 | 18 | Решение с копированиями 19 | 20 | Вам дано решение данной задачи, копирующее элементы и не укладывающееся в ограничения по времени, но в остальном корректное. Вы можете исправить его или написать своё. 21 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Реализовать класс_объявленный_в_заголовочном_файле/phone_number.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | using namespace std; 6 | 7 | class PhoneNumber { 8 | public: 9 | /* Принимает строку в формате +XXX-YYY-ZZZZZZ 10 | Часть от '+' до первого '-' - это код страны. 11 | Часть между первым и вторым символами '-' - код города 12 | Всё, что идёт после второго символа '-' - местный номер. 13 | Код страны, код города и местный номер не должны быть пустыми. 14 | Если строка не соответствует этому формату, нужно выбросить исключение invalid_argument. Проверять, что номер содержит только цифры, не нужно. 15 | 16 | Примеры: 17 | * +7-495-111-22-33 18 | * +7-495-1112233 19 | * +323-22-460002 20 | * +1-2-coursera-cpp 21 | * 1-2-333 - некорректный номер - не начинается на '+' 22 | * +7-1233 - некорректный номер - есть только код страны и города 23 | */ 24 | explicit PhoneNumber(const string &international_number); 25 | 26 | string GetCountryCode() const; 27 | string GetCityCode() const; 28 | string GetLocalNumber() const; 29 | string GetInternationalNumber() const; 30 | 31 | private: 32 | string country_code_; 33 | string city_code_; 34 | string local_number_; 35 | }; 36 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/date.h: -------------------------------------------------------------------------------- 1 | #ifndef __DATE_H 2 | #define __DATE_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | class Date { 12 | public: 13 | Date(); 14 | Date(int y, int m, int d); 15 | ~Date(); 16 | int GetYear() const; 17 | int GetMonth() const; 18 | int GetDay() const; 19 | 20 | 21 | private: 22 | int year; 23 | int month; 24 | int day; 25 | }; 26 | 27 | //Операторы ввода и вывода в/из поток для класса Date. 28 | istream& operator>>(istream& stream, Date& date); 29 | ostream& operator<< (ostream& stream, const Date& date); 30 | 31 | //Реализация функции ParseDate 32 | Date ParseDate(istream& stream); 33 | 34 | //Проверки формата в ввода 35 | void CheckDateFormat(const string& date); 36 | void CheckValueFormat(const int& value, string type); 37 | 38 | //Операторы сравнения 39 | bool operator < (const Date& l_date, const Date& r_date); 40 | bool operator == (const Date& , const Date& ); 41 | bool operator > (const Date& , const Date& ); 42 | bool operator >= (const Date& , const Date& ); 43 | bool operator <= (const Date& , const Date& ); 44 | bool operator != (const Date& , const Date& ); 45 | 46 | #endif //__DATE_H 47 | -------------------------------------------------------------------------------- /White_Belt/Анаграммы/Anagramas.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : Anogramas.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | void isAnogramas (string word1, string word2) 16 | { 17 | map contentW1; 18 | map contentW2; 19 | char sym1; 20 | char sym2; 21 | 22 | for(int i = 0; i < word1.size(); i++) 23 | { 24 | sym1 = word1[i]; 25 | contentW1[sym1]++; 26 | } 27 | 28 | for(int j = 0; j < word2.size(); j++) 29 | { 30 | sym2 = word2[j]; 31 | contentW2[sym2]++; 32 | } 33 | 34 | if(contentW1 == contentW2) 35 | { 36 | cout << "YES \n"; 37 | } 38 | else 39 | { 40 | cout << "NO \n"; 41 | } 42 | 43 | 44 | 45 | 46 | } 47 | 48 | int main() 49 | { 50 | string str1; 51 | string str2; 52 | 53 | int N; 54 | cin >> N; 55 | 56 | for(int i = 0; i < N; i++) 57 | { 58 | cin >> str1 >> str2; 59 | isAnogramas(str1, str2); 60 | } 61 | 62 | return 0; 63 | } 64 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/Answer/date.h: -------------------------------------------------------------------------------- 1 | #ifndef __DATE_H 2 | #define __DATE_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | class Date { 12 | public: 13 | Date(); 14 | Date(int y, int m, int d); 15 | ~Date(); 16 | int GetYear() const; 17 | int GetMonth() const; 18 | int GetDay() const; 19 | 20 | 21 | private: 22 | int year; 23 | int month; 24 | int day; 25 | }; 26 | 27 | //Операторы ввода и вывода в/из поток для класса Date. 28 | istream& operator>>(istream& stream, Date& date); 29 | ostream& operator<< (ostream& stream, const Date& date); 30 | 31 | //Реализация функции ParseDate 32 | Date ParseDate(istream& stream); 33 | 34 | //Проверки формата в ввода 35 | void CheckDateFormat(const string& date); 36 | void CheckValueFormat(const int& value, string type); 37 | 38 | //Операторы сравнения 39 | bool operator < (const Date& l_date, const Date& r_date); 40 | bool operator == (const Date& , const Date& ); 41 | bool operator > (const Date& , const Date& ); 42 | bool operator >= (const Date& , const Date& ); 43 | bool operator <= (const Date& , const Date& ); 44 | bool operator !=(const Date& , const Date& ); 45 | 46 | #endif //__DATE_H 47 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Шаблоны классов/Дек на основе двух векторов/README.md: -------------------------------------------------------------------------------- 1 | ## Задание по программированию: Дек на основе двух векторов 2 | 3 | Условие 4 | 5 | Напишите шаблонный класс Deque, содержащий следующий набор методов: 6 | 7 | * конструктор по умолчанию; 8 | * константный метод Empty, возвращающий true, если дек не содержит ни одного элемента; 9 | * константный метод Size, возвращающий количество элементов в деке; 10 | * T& operator[](size_t index) и const T& operator[](size_t index) const; 11 | * константный и неконстантный метод At(size_t index), генерирующий стандартное исключение out_of_range, если индекс больше или равен количеству элементов в деке;; 12 | константные и неконстантные врсии методов Front и Back, возвращающих ссылки на первый и последний элемент дека соответственно; 13 | * методы PushFront и PushBack. 14 | Неконстантные версии методов должны позволять изменять соответствующий элемент дека. 15 | 16 | Для реализации заведите внутри класса Deque два вектора: в один осуществляйте вставку в методе PushFront, а в другой — в методе PushBack. 17 | 18 | Замечание 19 | 20 | Заголовочный файл, который вы пришлёте на проверку, не должен подключать файлы , , , . Если у вас будет подключен один из этих файлов, вы получите ошибку компиляции. 21 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_first_part/parse.cpp: -------------------------------------------------------------------------------- 1 | #include "parse.h" 2 | 3 | string_view Strip(string_view s) { 4 | while (!s.empty() && isspace(s.front())) { 5 | s.remove_prefix(1); 6 | } 7 | while (!s.empty() && isspace(s.back())) { 8 | s.remove_suffix(1); 9 | } 10 | return s; 11 | } 12 | 13 | vector SplitBy(string_view s, char sep) { 14 | vector result; 15 | while (!s.empty()) { 16 | size_t pos = s.find(sep); 17 | result.push_back(s.substr(0, pos)); 18 | s.remove_prefix(pos != s.npos ? pos + 1 : s.size()); 19 | } 20 | return result; 21 | } 22 | 23 | void LeftStrip(string_view& sv) { 24 | while (!sv.empty() && isspace(sv[0])) { 25 | sv.remove_prefix(1); 26 | } 27 | } 28 | 29 | string_view ReadToken(string_view& sv) { 30 | LeftStrip(sv); 31 | 32 | auto pos = sv.find(' '); 33 | auto result = sv.substr(0, pos); 34 | sv.remove_prefix(pos != sv.npos ? pos : sv.size()); 35 | return result; 36 | } 37 | 38 | vector SplitIntoWordsView(string_view str) { 39 | vector result; 40 | 41 | for (string_view word = ReadToken(str); !word.empty(); word = ReadToken(str)) { 42 | result.push_back(word); 43 | } 44 | 45 | return result; 46 | } 47 | -------------------------------------------------------------------------------- /White_Belt/Автобусные_остановки-2/bus_stops_2.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : bus_stops_2.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | void command(map, int>& routes, vector& newRoute, int& num) 16 | { 17 | if(routes[newRoute] == 0) 18 | { 19 | routes[newRoute] = num; 20 | cout << "New bus " << num++ << endl; 21 | } 22 | else 23 | { 24 | cout << "Already exists for " << routes[newRoute] <, int> routes; 35 | vector newRoute; 36 | 37 | cin >> Q; 38 | 39 | for(int i = 0; i < Q; i++) 40 | { 41 | cin >> k; 42 | for (int j = 0; j < k; j++) 43 | { 44 | cin >> word; 45 | newRoute.push_back(word); 46 | } 47 | 48 | command(routes, newRoute, num); 49 | newRoute.clear(); 50 | } 51 | 52 | 53 | 54 | return 0; 55 | } 56 | -------------------------------------------------------------------------------- /White_Belt/Автобусные_остановки-3/bus_stops3.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : bus_stops3.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | using namespace std; 15 | 16 | void command(map, int>& routes, set& newRoute, int& num) 17 | { 18 | if(routes[newRoute] == 0) 19 | { 20 | routes[newRoute] = num; 21 | cout << "New bus " << num++ << endl; 22 | } 23 | else 24 | { 25 | cout << "Already exists for " << routes[newRoute] <, int> routes; 36 | set newRoute; 37 | 38 | cin >> Q; 39 | 40 | for(int i = 0; i < Q; i++) 41 | { 42 | cin >> k; 43 | for (int j = 0; j < k; j++) 44 | { 45 | cin >> word; 46 | newRoute.insert(word); 47 | } 48 | 49 | command(routes, newRoute, num); 50 | newRoute.clear(); 51 | } 52 | 53 | 54 | 55 | return 0; 56 | } 57 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Максимальный элемент по предикату/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Максимальный элемент по предикату 2 | 3 | Предисловие 4 | 5 | Если вы не уверены, стоит ли вам сначала пройти более ранние наши курсы, или у вас достаточно знаний, чтобы начать с «Красного пояса», попробуйте решить эту задачу. Если вы не понимаете её условие или не можете быстро решить, скорее всего, вам надо сначала пройти «Жёлтый пояс» 6 | 7 | Условие задачи 8 | 9 | Реализуйте шаблонную функцию 10 | ```cpp 11 | template 12 | ForwardIterator max_element_if(ForwardIterator first, ForwardIterator last, UnaryPredicate pred); 13 | ``` 14 | 15 | возвращающую итератор на максимальный элемент в диапазоне [first, last), для которого предикат pred возвращает true. Если диапазон содержит несколько подходящих элементов с максимальным значением, то результатом будет первое вхождение такого элемента. Если диапазон не содержит подходящих элементов, то функция должна вернуть last. 16 | 17 | Гарантируется, что: 18 | 19 | * pred принимает аргумент того типа, который имеют элементы диапазона 20 | * для ForwardIterator определены операторы ++, ==, !=, * (разыменование) 21 | * для типа, на который указывает итератор, определён оператор < («меньше») 22 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_second_part/parse.cpp: -------------------------------------------------------------------------------- 1 | #include "parse.h" 2 | 3 | string_view Strip(string_view s) { 4 | while (!s.empty() && isspace(s.front())) { 5 | s.remove_prefix(1); 6 | } 7 | while (!s.empty() && isspace(s.back())) { 8 | s.remove_suffix(1); 9 | } 10 | return s; 11 | } 12 | 13 | vector SplitBy(string_view s, char sep) { 14 | vector result; 15 | while (!s.empty()) { 16 | size_t pos = s.find(sep); 17 | result.push_back(s.substr(0, pos)); 18 | s.remove_prefix(pos != s.npos ? pos + 1 : s.size()); 19 | } 20 | return result; 21 | } 22 | 23 | void LeftStrip(string_view& sv) { 24 | while (!sv.empty() && isspace(sv[0])) { 25 | sv.remove_prefix(1); 26 | } 27 | } 28 | 29 | string_view ReadToken(string_view& sv) { 30 | LeftStrip(sv); 31 | 32 | auto pos = sv.find(' '); 33 | auto result = sv.substr(0, pos); 34 | sv.remove_prefix(pos != sv.npos ? pos : sv.size()); 35 | return result; 36 | } 37 | 38 | vector SplitIntoWordsView(string_view str) { 39 | vector result; 40 | 41 | for (string_view word = ReadToken(str); !word.empty(); word = ReadToken(str)) { 42 | result.push_back(word); 43 | } 44 | 45 | return result; 46 | } 47 | 48 | -------------------------------------------------------------------------------- /Red_Belt/week_6/final_project_second_part/search_server.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "search_server.h" 4 | #include "synchronized.h" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | using namespace std; 15 | 16 | class InvertedIndex { 17 | public: 18 | struct Entry { 19 | size_t docid, hitcount; 20 | }; 21 | 22 | InvertedIndex() = default; 23 | explicit InvertedIndex(istream& document_input); 24 | 25 | const vector& Lookup(string_view word) const; 26 | 27 | const deque& GetDocuments() const { 28 | return docs; 29 | } 30 | 31 | private: 32 | deque docs; 33 | map> index; 34 | }; 35 | 36 | class SearchServer { 37 | public: 38 | SearchServer() = default; 39 | explicit SearchServer(istream& document_input) 40 | : index(InvertedIndex(document_input)) 41 | { 42 | } 43 | 44 | void UpdateDocumentBase(istream& document_input); 45 | void AddQueriesStream(istream& query_input, ostream& search_results_output); 46 | 47 | private: 48 | Synchronized index; 49 | vector> async_tasks; 50 | }; 51 | 52 | -------------------------------------------------------------------------------- /White_Belt/Сортировка_без_учета_регистра/strSort.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : strSort.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | using namespace std; 15 | 16 | string getLowStr(string a) 17 | { 18 | int i=0; 19 | char c; 20 | 21 | for(i = 0; i < a.size(); i++) 22 | { 23 | a[i] = (tolower(a[i])); 24 | } 25 | 26 | return a; 27 | } 28 | 29 | bool Compare(const string& a, const string& b) 30 | { 31 | return getLowStr(a) < getLowStr(b); 32 | } 33 | 34 | void PrintVect(const vector& vect) 35 | { 36 | for (int j = 0; j < vect.size(); j++) 37 | { 38 | cout << vect[j] << " "; 39 | } 40 | } 41 | 42 | int main() { 43 | 44 | int N, i; 45 | string str; 46 | vector A; 47 | 48 | cin >> N; 49 | 50 | for(i = 0; i < N; i++) 51 | { 52 | cin >> str; 53 | A.push_back(str); 54 | } 55 | 56 | sort(A.begin(), A.end(), Compare); 57 | 58 | PrintVect(A); 59 | 60 | return 0; 61 | } 62 | 63 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Шаблоны классов/Таблица/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Таблица 2 | 3 | Вам надо написать шаблонный класс Table для электронной таблицы. Для простоты будем считать, что все ячейки таблицы имеют один и тот же тип данных T. Таблица должна уметь менять свой размер по требованию пользователя. Вновь созданные ячейки должны заполняться значениями по умолчанию типа T. 4 | 5 | Требования к классу такие: 6 | 7 | 1. Класс должен называться Table. 8 | 2. У класса должен быть шаблонный параметр T - тип элемента в ячейке. 9 | 3. У класса должен быть конструктор, получающий на входе два числа типа size_t, - количество строк и столбцов соответственно. 10 | 4. У класса должны быть константная и неконстантная версии оператора [], возвращающего нечто такое, к чему снова можно было бы применить оператор []. То есть, должны работать конструкции вида cout << table[i][j];и table[i][j] = value;. Проверять корректность индексов при этом не нужно. 11 | 5. У класса должна быть функция Resize, получающая на вход два параметра типа size_t и меняющая размер таблицы. Старые данные, умещающиеся в новый размер, должны при этом сохраниться. 12 | 6. У класса должен быть константный метод Size, возвращающий pair размер таблицы (в том же порядке, в котором эти аргументы передавались в конструктор). 13 | -------------------------------------------------------------------------------- /Red_Belt/week_4/StackVector/stack_vector.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | using namespace std; 6 | 7 | template 8 | class StackVector { 9 | public: 10 | explicit StackVector(size_t a_size = 0) : size(a_size) { 11 | if (size > N) { 12 | throw invalid_argument("Too much"); 13 | } 14 | } 15 | 16 | T& operator[](size_t index) { 17 | return data[index]; 18 | } 19 | 20 | const T& operator[](size_t index) const { 21 | return data[index]; 22 | } 23 | 24 | auto begin() { 25 | return data.begin(); 26 | } 27 | 28 | auto end() { 29 | return data.begin() + size; 30 | } 31 | 32 | auto begin() const { 33 | return data.begin(); 34 | } 35 | 36 | auto end() const { 37 | return data.begin() + size; 38 | } 39 | 40 | size_t Size() const { 41 | return size; 42 | } 43 | 44 | size_t Capacity() const { 45 | return N; 46 | } 47 | 48 | void PushBack(const T& value) { 49 | if (size >= N) { 50 | throw overflow_error("Full"); 51 | } 52 | else { 53 | data[size++] = value; 54 | } 55 | } 56 | 57 | T PopBack() { 58 | if (size == 0) { 59 | throw underflow_error("Empty"); 60 | } 61 | else { 62 | --size; 63 | return data[size]; 64 | } 65 | } 66 | 67 | private: 68 | array data; 69 | size_t size = 0; 70 | }; 71 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Построение арифметического выражения/Часть 2/BuildExpression2.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace std; 6 | 7 | void AddBrackets (deque& expression){ 8 | expression.push_back(")"); 9 | expression.push_front("("); 10 | } 11 | 12 | void AddOperationWithNumber(deque& expression, char prev_operation, char cur_operation, int number){ 13 | if((prev_operation == '+' || prev_operation == '-') && (cur_operation == '*' || cur_operation == '/')){ 14 | AddBrackets(expression); 15 | } 16 | expression.push_back(" "); 17 | expression.push_back(string(1, cur_operation)); 18 | expression.push_back(" "); 19 | expression.push_back(to_string(number)); 20 | } 21 | 22 | int main() { 23 | int init_num, number_of_operations; 24 | deque expression; 25 | 26 | cin >> init_num; 27 | expression.push_back(to_string(init_num)); 28 | 29 | cin >> number_of_operations; 30 | 31 | char prev_operation; 32 | for(int i = 0; i < number_of_operations; i++){ 33 | char cur_operation; 34 | int number; 35 | 36 | cin >> cur_operation >> number; 37 | AddOperationWithNumber(expression, prev_operation, cur_operation, number); 38 | prev_operation = cur_operation; 39 | } 40 | 41 | for (const string& s : expression) { 42 | cout << s; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Brown_Belt/week_5/ТЗ_Личный_бюджет/ТЗ_Личный-бюджет_professional-desktop-version/budget.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "date.h" 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | enum class Operation { 12 | NONE, 13 | EARM, 14 | PAY_TAX, 15 | COMPUTE_INCOME, 16 | SPEND 17 | }; 18 | 19 | std::ostream& operator<< (std::ostream& output, const Operation& op); 20 | 21 | struct Instruction { 22 | Operation op = Operation::NONE; 23 | Date from; 24 | Date to; 25 | int value = -1; 26 | }; 27 | 28 | class BudgetManager { 29 | public: 30 | BudgetManager() = default; 31 | 32 | public: 33 | void Process(size_t Q, std::istream& input); 34 | Instruction Decode(std::string_view command) const; 35 | void Execute(const Instruction& inst); 36 | void EarnMoney(const Date& from, const Date& to, int value); 37 | void PayTaxes(const Date& from, const Date& to, int percent); 38 | double ComputeIncome(const Date& from, const Date& to); 39 | void SpendMoney(const Date& from, const Date& to, int value); 40 | 41 | public: 42 | std::map> getFinance() { 43 | return finance; 44 | } 45 | 46 | private: 47 | using finance_iter = typename std::map>::iterator; 48 | std::map> finance; 49 | }; 50 | -------------------------------------------------------------------------------- /Yellow_Belt/week_1/Все_в_квадрат/ShablonSqrAnswer.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | using namespace std; 8 | 9 | 10 | 11 | template T Sqr (const T& value); 12 | template pair Sqr(const pair& p); 13 | template vector Sqr (const vector& vi); 14 | template map Sqr (const map& m); 15 | 16 | 17 | template 18 | T Sqr (const T& value){ 19 | T answer = value*value; 20 | return answer; 21 | } 22 | 23 | template 24 | pair Sqr(const pair& p) { 25 | pair answer = p; 26 | answer.first = Sqr(p.first); 27 | answer.second = Sqr(p.second); 28 | 29 | return answer; 30 | } 31 | 32 | template 33 | vector Sqr (const vector& vi) { 34 | vector answer; 35 | 36 | for(auto i: vi){ 37 | answer.push_back(Sqr(i)); 38 | } 39 | 40 | return answer; 41 | } 42 | 43 | template 44 | map Sqr (const map& m) { 45 | map answer; 46 | for(const auto& it : m){ 47 | answer[it.first] = Sqr(it.second); 48 | } 49 | 50 | return answer; 51 | } 52 | -------------------------------------------------------------------------------- /Brown_Belt/week_4/З_RAII Booking/new_trip_manager.h: -------------------------------------------------------------------------------- 1 | #include "new_booking_providers.h" 2 | 3 | #include 4 | 5 | using namespace std; 6 | 7 | class Trip { 8 | public: 9 | vector hotels; 10 | vector flights; 11 | 12 | Trip() = default; 13 | Trip(const Trip &) = delete; 14 | Trip(Trip &&) = default; 15 | 16 | Trip &operator=(const Trip &) = delete; 17 | Trip &operator=(Trip &&) = default; 18 | 19 | void Cancel() { 20 | hotels.clear(); 21 | flights.clear(); 22 | } 23 | }; 24 | 25 | class TripManager { 26 | public: 27 | struct BookingData { 28 | string city_from; 29 | string city_to; 30 | string date_from; 31 | string date_to; 32 | }; 33 | 34 | Trip Book(const BookingData &data) { 35 | Trip trip; 36 | { 37 | FlightProvider::BookingData data; 38 | trip.flights.push_back(flight_provider.Book(data)); 39 | } 40 | { 41 | HotelProvider::BookingData data; 42 | trip.hotels.push_back(hotel_provider.Book(data)); 43 | } 44 | { 45 | FlightProvider::BookingData data; 46 | trip.flights.push_back(flight_provider.Book(data)); 47 | } 48 | return trip; 49 | } 50 | 51 | void Cancel(Trip &trip) { trip.Cancel(); } 52 | 53 | private: 54 | HotelProvider hotel_provider; 55 | FlightProvider flight_provider; 56 | }; 57 | -------------------------------------------------------------------------------- /Yellow_Belt/week_1/Средняя_температура - 2/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Средняя температура — 2 #### 2 | 3 | 4 | _Решите задачу «[Средняя температура](https://www.coursera.org/learn/c-plus-plus-white/programming/oGdDI/sriedniaia-tiempieratura)» в других ограничениях на входные данные_. 5 | 6 | Даны значения температуры, наблюдавшиеся в течение N подряд идущих дней. Найдите номера дней (в нумерации с нуля) со значением температуры выше среднего арифметического за все N дней. 7 | 8 | Гарантируется, что среднее арифметическое значений температуры является целым числом. 9 | 10 | ##### Формат ввода ##### 11 | 12 | Вводится число N, затем N целых чисел — значения температуры в 0-й, 1-й, ... (N−1)-й день. Гарантируется, что N не превышает миллиона (10^6), а значения температуры, измеряющиеся в миллионных долях градусов по Цельсию, лежат в диапазоне от −10^8 до 10^8. Проверять соблюдение этих ограничений не нужно: вы можете ориентироваться на них при выборе наиболее подходящих типов для переменных. 13 | 14 | ##### Формат вывода ##### 15 | 16 | Первое число K — количество дней, значение температуры в которых выше среднего арифметического. Затем K целых чисел — номера этих дней. 17 | 18 | ##### Пример ##### 19 | 20 | ###### Ввод ####### 21 | ```commandline 22 | 5 23 | 5 4 1 -2 7 24 | ``` 25 | 26 | ###### Вывод ###### 27 | ```commandline 28 | 3 29 | 0 1 4 30 | ``` -------------------------------------------------------------------------------- /Red_Belt/week_2/Сортировка студентов по рейтингу/README.md: -------------------------------------------------------------------------------- 1 | ## Задание по программированию: Сортировка студентов по рейтингу 2 | 3 | В данной задаче необходимо оптимизировать код, использующийся для сортировки студентов по рейтингу. Данные каждого студента находятся в структуре Student, объявленной в файле student.h. Рейтинг студента записан в поле rating: 4 | ```cpp 5 | struct Student { 6 | string first_name; 7 | string last_name; 8 | map marks; 9 | double rating; 10 | 11 | bool operator < (const Student& other) const { 12 | return GetName() < other.GetName(); 13 | } 14 | 15 | bool Less(const Student& other) const { 16 | return rating > other.rating; 17 | } 18 | 19 | string GetName() const { 20 | return first_name + " " + last_name; 21 | } 22 | }; 23 | ``` 24 | 25 | Для сортировки студентов по рейтингу используется функция сравнения, возвращающая true, если рейтинг студента first выше рейтинга студента second. 26 | ```cpp 27 | bool Compare(Student first, Student second) { 28 | return first.Less(second); 29 | } 30 | ``` 31 | 32 | Было выявлено, что эта функция является узким местом процесса сортировки, и именно её нужно оптимизировать. 33 | 34 | Пришлите на проверку файл, содержащий оптимизированную версию функции Compare. Если ваша реализация будет недостаточно эффективной, то решение не уложится в ограничение по времени. 35 | -------------------------------------------------------------------------------- /Brown_Belt/week_3/Т_Зоопарк/zoo.cpp: -------------------------------------------------------------------------------- 1 | #include "animals.h" 2 | #include "test_runner.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | using Zoo = std::vector>; 12 | 13 | Zoo CreateZoo(std::istream& in) { 14 | Zoo zoo; 15 | std::string word; 16 | while (in >> word) { 17 | if (word == "Tiger") { 18 | zoo.push_back(std::make_unique()); 19 | } else if (word == "Wolf") { 20 | zoo.push_back(std::make_unique()); 21 | } else if (word == "Fox") { 22 | zoo.push_back(std::make_unique()); 23 | } else { 24 | throw std::runtime_error("Unknown animal!"); 25 | } 26 | } 27 | return zoo; 28 | } 29 | 30 | void Process(const Zoo& zoo, std::ostream& out) { 31 | for (const auto& animal : zoo) { 32 | out << animal->Voice() << "\n"; 33 | } 34 | } 35 | 36 | void TestZoo() { 37 | 38 | std::istringstream input("Tiger Wolf Fox Tiger"); 39 | std::ostringstream output; 40 | Process(CreateZoo(input), output); 41 | 42 | const std::string expected = 43 | "Rrrr\n" 44 | "Wooo\n" 45 | "Tyaf\n" 46 | "Rrrr\n"; 47 | 48 | ASSERT_EQUAL(output.str(), expected); 49 | } 50 | 51 | int main() { 52 | TestRunner tr; 53 | RUN_TEST(tr, TestZoo); 54 | } 55 | -------------------------------------------------------------------------------- /White_Belt/Отбор_палиндромов/PalindromFilter.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : PalindromFilter.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | using namespace std; 14 | 15 | bool IsPalindrom(string str) 16 | { 17 | bool answer = true; 18 | 19 | if (str.size() != 0) 20 | { 21 | for (int i = 0; i < (str.size() / 2); i++) 22 | { 23 | int j = str.size() - (i+1); 24 | if (str[i] != str[j]) 25 | { 26 | answer = false; 27 | break; 28 | } 29 | } 30 | } 31 | 32 | return answer; 33 | } 34 | 35 | vector PalindromFilter(vector words, int minLength) 36 | { 37 | vector answer; 38 | 39 | for(string str : words) 40 | { 41 | if(str.size() >= minLength && IsPalindrom(str)) 42 | { 43 | answer.push_back(str); 44 | } 45 | } 46 | 47 | return answer; 48 | } 49 | 50 | int main() 51 | { 52 | vector result; 53 | vector words; 54 | 55 | int minLength; 56 | 57 | cin>>minLength; 58 | 59 | result = PalindromFilter(words, minLength); 60 | 61 | for (string word : result){ 62 | cout << word; 63 | } 64 | 65 | return 0; 66 | } 67 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Шаблоны классов/Таблица/table.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "test_runner.h" 6 | 7 | using namespace std; 8 | 9 | template 10 | class Table { 11 | public: 12 | Table(size_t rows, size_t columns): 13 | numOfRows(rows), 14 | numOfCols(columns) 15 | { 16 | Resize(rows, columns); 17 | } 18 | 19 | pair Size() const{ 20 | return pair(numOfRows, numOfCols); 21 | } 22 | 23 | const vector& operator [] (size_t idx) const { 24 | return data[idx]; 25 | } 26 | 27 | vector& operator [] (size_t idx) { 28 | return data[idx]; 29 | } 30 | 31 | void Resize(size_t rows, size_t columns) { 32 | data.resize(rows); 33 | for (auto& item : data) { 34 | item.resize(columns); 35 | } 36 | 37 | numOfRows = rows; 38 | numOfCols = columns; 39 | } 40 | 41 | private: 42 | size_t numOfRows; 43 | size_t numOfCols; 44 | vector< vector > data; 45 | }; 46 | 47 | void TestTable() { 48 | Table t(1, 1); 49 | ASSERT_EQUAL(t.Size().first, 1u); 50 | ASSERT_EQUAL(t.Size().second, 1u); 51 | t[0][0] = 42; 52 | ASSERT_EQUAL(t[0][0], 42); 53 | t.Resize(3, 4); 54 | ASSERT_EQUAL(t.Size().first, 3u); 55 | ASSERT_EQUAL(t.Size().second, 4u); 56 | } 57 | 58 | int main() { 59 | TestRunner tr; 60 | RUN_TEST(tr, TestTable); 61 | return 0; 62 | } 63 | -------------------------------------------------------------------------------- /Brown_Belt/week_4/З_RAII Booking/old_booking_providers.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | class FlightProvider { 9 | public: 10 | using BookingId = int; 11 | 12 | struct BookingData { 13 | string city_from; 14 | string city_to; 15 | string date; 16 | }; 17 | 18 | BookingId Book(const BookingData &data) { 19 | if (counter >= capacity) { 20 | throw runtime_error("Flight overbooking"); 21 | } 22 | ++counter; 23 | return counter; 24 | } 25 | 26 | void Cancel(const BookingId &id) { 27 | --counter; 28 | if (counter < 0) { 29 | throw logic_error("Too many flights have been canceled"); 30 | } 31 | } 32 | 33 | public: 34 | static int capacity; 35 | static int counter; 36 | }; 37 | 38 | class HotelProvider { 39 | public: 40 | using BookingId = int; 41 | 42 | struct BookingData { 43 | string city; 44 | string date_from; 45 | string date_to; 46 | }; 47 | 48 | BookingId Book(const BookingData &data) { 49 | if (counter >= capacity) { 50 | throw runtime_error("Hotel overbooking"); 51 | } 52 | ++counter; 53 | return counter; 54 | } 55 | 56 | void Cancel(const BookingId &id) { 57 | --counter; 58 | if (counter < 0) { 59 | throw logic_error("Too many hotels have been canceled"); 60 | } 61 | } 62 | 63 | public: 64 | static int capacity; 65 | static int counter; 66 | }; 67 | -------------------------------------------------------------------------------- /Red_Belt/week_5/Сортировка слиянием-3/MergeSort_3part.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "test_runner.h" 5 | 6 | using namespace std; 7 | 8 | template 9 | void MergeSort(RandomIt range_begin, RandomIt range_end){ 10 | int length = range_end - range_begin; 11 | if (length < 2) { 12 | return; 13 | } 14 | 15 | vector elems(std::make_move_iterator(range_begin), 16 | std::make_move_iterator(range_end)); 17 | vector tmp; 18 | 19 | auto mid_1 = begin(elems) + length/3; 20 | auto mid_2 = mid_1 + length/3; 21 | 22 | MergeSort(begin(elems), mid_1); 23 | MergeSort(mid_1, mid_2); 24 | MergeSort(mid_2, end(elems)); 25 | 26 | merge(make_move_iterator(begin(elems)), make_move_iterator(mid_1), 27 | make_move_iterator(mid_1), make_move_iterator(mid_2), 28 | back_inserter(tmp)); 29 | 30 | merge(make_move_iterator(begin(tmp)), make_move_iterator(tmp.end()), 31 | make_move_iterator(mid_2), make_move_iterator(end(elems)), 32 | range_begin); 33 | 34 | } 35 | 36 | 37 | void TestIntVector(){ 38 | std::vector numbers = { 6, 1, 3, 9, 1, 9, 8, 12, 1 }; 39 | MergeSort(begin(numbers), end(numbers)); 40 | ASSERT(is_sorted(begin(numbers), end(numbers))); 41 | } 42 | 43 | int main() { 44 | TestRunner tr; 45 | RUN_TEST(tr, TestIntVector); 46 | return 0; 47 | } 48 | 49 | -------------------------------------------------------------------------------- /White_Belt/Работа_с_сервером_времени/README.md: -------------------------------------------------------------------------------- 1 | Задание по программированию: Работа с сервером времени 2 | 3 | Вам дана функция string AskTimeServer(), про которую известно следующее: 4 | 5 | * в процессе своей работы она обращается по сети к удалённому серверу, 6 | запрашивая текущее время; 7 | 8 | * если обращение к серверу прошло успешно, функция возвращает текущее 9 | время в виде строки; 10 | 11 | * если в процессе обращения к серверу возникла сетевая проблема, 12 | функция выбрасывает исключение system_error; 13 | 14 | функция может выбрасывать другие исключения, чтобы сообщить о других проблемах. 15 | Используя функцию AskTimeServer, напишите класс TimeServer со следующим интерфейсом ... 16 | 17 | 18 | Метод GetCurrentTime должен вести себя так: 19 | 20 | * он должен вызвать функцию AskTimeServer, записать её результат в поле 21 | LastFetchedTime и вернуть значение этого поля; 22 | 23 | * если AskTimeServer выбросила исключение system_error, метод GetCurrentTime 24 | должен его поймать и вернуть текущее значение поля LastFetchedTime. Таким 25 | образом мы скрываем от пользователя сетевые проблемы, возвращая значение, 26 | которое было получено при последнем успешном обращении к серверу; 27 | 28 | * если AskTimeServer выбросила другое исключение, метод GetCurrentTime должен 29 | пробросить его дальше, потому что в рамках класса TimeServer мы не знаем, как 30 | обрабатывать проблемы, не связанные со сбоями сети. -------------------------------------------------------------------------------- /Yellow_Belt/week_2/Тесты_для_функции_IsPalindrom/README.md: -------------------------------------------------------------------------------- 1 | #### Задание по программированию: Тесты для функции IsPalindrom #### 2 | 3 | 4 | В этой задаче вам нужно разработать набор юнит-тестов для функции 5 | ```objectivec 6 | bool IsPalindrom(const string& s) 7 | ``` 8 | Эта функция проверяет, является ли строка s палиндромом. Палиндром — это слово или фраза, которые одинаково читаются слева направо и справа налево. Примеры палиндромов: **madam, level, wasitacaroracatisaw** 9 | 10 | Разработайте набор юнит-тестов, который будет принимать правильные реализации функции _IsPalindrom_ и отвергать неправильные. При этом учитывайте, что __правильная__ реализация функции: 11 | 12 | * считает пустую строку палиндромом; 13 | * считает строку из одного символа палиндромом; 14 | * осуществляет обычное сравнение символов на равенство, не игнорируя никакие символы, в том числе пробельные. 15 | 16 | При разработке тестов подумайте, какие ошибки можно допустить при реализации функции _IsPalindrom_. Примеры ошибок: 17 | 18 | * игнорируется первый или последний символ; 19 | * сравнение соответствующих символов завершается не в середине строки, а раньше; 20 | * игнорируются пробелы 21 | 22 | Начать работу вы можете с шаблона, который содержит наш фреймворк юнит-тестов и заготовку функции _IsPalindrom_. 23 | 24 | [test_palindrome.cpp](https://github.com/avtomato/Basics-of-C-plus-plus-development-yellow-belt/blob/master/week-02/05-Programming-Assignment/Source/test_palindrome.cpp) 25 | -------------------------------------------------------------------------------- /Brown_Belt/week_3/З_Шаблон LazyValue/lazy_value.cpp: -------------------------------------------------------------------------------- 1 | #include "test_runner.h" 2 | 3 | #include 4 | #include 5 | using namespace std; 6 | 7 | template 8 | class LazyValue { 9 | public: 10 | explicit LazyValue(std::function init): 11 | initFunc(init), 12 | object(nullptr) 13 | { 14 | } 15 | 16 | 17 | bool HasValue() const { 18 | if(object == nullptr) { 19 | return false; 20 | } 21 | else { 22 | return true; 23 | } 24 | } 25 | 26 | const T& Get() const { 27 | if (!HasValue()) { 28 | object = new T{initFunc()}; 29 | } 30 | 31 | return *object; 32 | } 33 | 34 | private: 35 | std::function initFunc; 36 | mutable T* object; 37 | }; 38 | 39 | void UseExample() { 40 | const string big_string = "Giant amounts of memory"; 41 | 42 | LazyValue lazy_string([&big_string] { return big_string; }); 43 | 44 | ASSERT(!lazy_string.HasValue()); 45 | ASSERT_EQUAL(lazy_string.Get(), big_string); 46 | ASSERT_EQUAL(lazy_string.Get(), big_string); 47 | } 48 | 49 | void TestInitializerIsntCalled() { 50 | bool called = false; 51 | 52 | { 53 | LazyValue lazy_int([&called] { 54 | called = true; 55 | return 0; 56 | }); 57 | } 58 | ASSERT(!called); 59 | } 60 | 61 | int main() { 62 | TestRunner tr; 63 | RUN_TEST(tr, UseExample); 64 | RUN_TEST(tr, TestInitializerIsntCalled); 65 | return 0; 66 | } 67 | -------------------------------------------------------------------------------- /Red_Belt/week_4/Translator/translator.cpp: -------------------------------------------------------------------------------- 1 | #include "profile.h" 2 | #include "test_runner.h" 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | class Translator { 12 | public: 13 | void Add(string_view source, string_view target) { 14 | const string_view source_view = GetClonedView(source); 15 | const string_view target_view = GetClonedView(target); 16 | 17 | forward_dict[source_view] = target_view; 18 | backward_dict[target_view] = source_view; 19 | } 20 | string_view TranslateForward(string_view source) const { 21 | return Translate(forward_dict, source); 22 | } 23 | string_view TranslateBackward(string_view target) const { 24 | return Translate(backward_dict, target); 25 | } 26 | 27 | private: 28 | string_view GetClonedView(string_view s) { 29 | for (const auto* map_ptr : {&forward_dict, &backward_dict}) { 30 | const auto it = map_ptr->find(s); 31 | if (it != map_ptr->end()) { 32 | return it->first; 33 | } 34 | } 35 | 36 | return data.emplace_back(s); 37 | } 38 | 39 | static string_view Translate(const map& dict, string_view s) { 40 | if (const auto it = dict.find(s); it != dict.end()) { 41 | return it->second; 42 | } 43 | else { 44 | return {}; 45 | } 46 | } 47 | 48 | 49 | map forward_dict; 50 | map backward_dict; 51 | deque data; 52 | }; 53 | -------------------------------------------------------------------------------- /White_Belt/Синонимы/Synonimus.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : Synonimus.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | using namespace std; 14 | 15 | void command(map >& mapOfSynonimus, const string& cmd) 16 | { 17 | if (cmd == "ADD") 18 | { 19 | string word1, word2; 20 | cin >> word1 >> word2; 21 | 22 | mapOfSynonimus[word2].insert(word1); 23 | mapOfSynonimus[word1].insert(word2); 24 | } 25 | 26 | if (cmd == "COUNT") 27 | { 28 | string word; 29 | cin >> word; 30 | 31 | cout << mapOfSynonimus[word].size() << endl; 32 | } 33 | 34 | if (cmd == "CHECK") 35 | { 36 | string word3, word4; 37 | cin >> word3 >> word4; 38 | 39 | int a; 40 | 41 | a = mapOfSynonimus[word3].count(word4); 42 | 43 | if(a!=0) 44 | { 45 | cout << "YES" << endl; 46 | } 47 | else 48 | { 49 | cout << "NO" << endl; 50 | } 51 | } 52 | } 53 | 54 | int main() { 55 | 56 | int Q; 57 | map > mapOfSynonimus; 58 | string cmd; 59 | 60 | cin >> Q; 61 | 62 | for(int i = 0; i < Q; i++) 63 | { 64 | cin >> cmd; 65 | command(mapOfSynonimus, cmd); 66 | } 67 | 68 | return 0; 69 | } 70 | -------------------------------------------------------------------------------- /White_Belt/Средняя_температура/Temperature.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : Temperature.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Hello World in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | 14 | int averageTemperature (const vector& temperatures) { 15 | 16 | int sum = 0; 17 | int i, avT; 18 | 19 | for(i=0; i < temperatures.size(); i++) 20 | { 21 | sum += temperatures[i]; 22 | } 23 | 24 | avT = sum / temperatures.size(); 25 | 26 | return avT; 27 | 28 | } 29 | 30 | void indexPrinting (const vector& temperatures, const int avT) { 31 | 32 | vector indexes; 33 | int i; 34 | 35 | for (i = 0; i < temperatures.size(); i++) 36 | { 37 | if (temperatures[i] > avT) 38 | { 39 | indexes.push_back(i); 40 | } 41 | } 42 | 43 | cout << indexes.size() << endl;; 44 | 45 | for (i = 0; i < indexes.size(); i++) 46 | { 47 | cout << indexes[i] << " "; 48 | } 49 | } 50 | 51 | int main() { 52 | 53 | int n, avT; 54 | cin >> n; 55 | 56 | vector temperatures(n); 57 | 58 | for(int i = 0; i < n; i++) 59 | { 60 | cin >> temperatures[i]; 61 | } 62 | 63 | avT = averageTemperature(temperatures); 64 | 65 | indexPrinting(temperatures, avT); 66 | 67 | return 0; 68 | } 69 | -------------------------------------------------------------------------------- /Yellow_Belt/week_5/Отправка уведомлений/SmsAndEmailNotifiers.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | 6 | void SendSms(const string& number, const string& message) { 7 | cout << "Send '" << message << "' to number " << number << endl; 8 | } 9 | 10 | void SendEmail(const string& email, const string& message) { 11 | cout << "Send '" << message << "' to e-mail " << email << endl; 12 | } 13 | 14 | class INotifier{ 15 | public: 16 | virtual void Notify(const string& message) const = 0; 17 | }; 18 | 19 | class SmsNotifier : public INotifier{ 20 | public: 21 | SmsNotifier(const string& number) 22 | : Number(number) { 23 | } 24 | 25 | virtual void Notify(const string& message) const override { 26 | SendSms(Number, message); 27 | } 28 | 29 | private: 30 | const string Number; 31 | }; 32 | 33 | class EmailNotifier : public INotifier{ 34 | public: 35 | EmailNotifier(const string& email) 36 | : Email(email){ 37 | } 38 | 39 | virtual void Notify(const string& message) const override { 40 | SendEmail(Email, message); 41 | } 42 | 43 | private: 44 | const string Email; 45 | }; 46 | 47 | void Notify(const INotifier& notifier, const string& message) { 48 | notifier.Notify(message); 49 | } 50 | 51 | 52 | int main() { 53 | SmsNotifier sms{"+7-495-777-77-77"}; 54 | EmailNotifier email{"na-derevnyu@dedushke.ru"}; 55 | 56 | Notify(sms, "I have White belt in C++"); 57 | Notify(email, "And want a Yellow one"); 58 | return 0; 59 | } 60 | -------------------------------------------------------------------------------- /Red_Belt/week_4/Статистика web-сервера/stats.cpp: -------------------------------------------------------------------------------- 1 | #include "stats.h" 2 | 3 | Stats::Stats(){ 4 | methods = { 5 | {"GET", 0}, 6 | {"PUT", 0}, 7 | {"POST", 0}, 8 | {"DELETE", 0}, 9 | {"UNKNOWN", 0} 10 | }; 11 | 12 | uris = { 13 | {"/", 0}, 14 | {"/order", 0}, 15 | {"/product", 0}, 16 | {"/basket", 0}, 17 | {"/help", 0}, 18 | {"unknown", 0} 19 | }; 20 | } 21 | 22 | void Stats::AddMethod(string_view method) { 23 | if (methods.find(method) != methods.end()) { 24 | methods[method]++; 25 | } 26 | else { 27 | methods[string_view("UNKNOWN")]++; 28 | } 29 | } 30 | 31 | void Stats::AddUri(string_view uri) { 32 | if (uris.find(uri) != uris.end()) { 33 | uris[uri]++; 34 | } 35 | else { 36 | uris[string_view("unknown")]++; 37 | } 38 | } 39 | 40 | const map& Stats::GetMethodStats() const { 41 | return methods; 42 | } 43 | 44 | const map& Stats::GetUriStats() const { 45 | return uris; 46 | } 47 | 48 | HttpRequest ParseRequest(string_view line) { 49 | HttpRequest request; 50 | 51 | size_t pos = 0; 52 | while (line[pos] == ' ' && pos != line.npos) { 53 | ++pos; 54 | } 55 | line.remove_prefix(pos); 56 | 57 | size_t delimiter = line.find(' '); 58 | request.method = line.substr(0, delimiter); 59 | 60 | line.remove_prefix(++delimiter); 61 | delimiter = line.find(' '); 62 | request.uri = line.substr(0, delimiter); 63 | 64 | line.remove_prefix(++delimiter); 65 | request.protocol = line; 66 | 67 | return request; 68 | } 69 | 70 | 71 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/node.h: -------------------------------------------------------------------------------- 1 | #ifndef __NODE_H 2 | #define __NODE_H 3 | 4 | #include "token.h" 5 | #include "date.h" 6 | #include 7 | 8 | class Node{ 9 | public: 10 | Node(); 11 | Node (TokenType, Comparison); 12 | 13 | virtual bool Evaluate(Date, string) const = 0; 14 | Comparison GetComparison() const; 15 | 16 | private: 17 | TokenType _type; 18 | Comparison _comparison; 19 | }; 20 | 21 | 22 | class EmptyNode : public Node{ 23 | public: 24 | EmptyNode(); 25 | 26 | virtual bool Evaluate(Date, string) const override; 27 | }; 28 | 29 | 30 | class DateComparisonNode: public Node{ 31 | public: 32 | DateComparisonNode(); 33 | DateComparisonNode(Comparison , Date); 34 | 35 | virtual bool Evaluate(Date, string) const override; 36 | 37 | private: 38 | Date _date; 39 | }; 40 | 41 | 42 | class EventComparisonNode : public Node{ 43 | public: 44 | EventComparisonNode(); 45 | EventComparisonNode(Comparison , string); 46 | 47 | virtual bool Evaluate(Date, string) const override; 48 | 49 | private: 50 | string _event; 51 | }; 52 | 53 | class LogicalOperationNode : public Node { 54 | public: 55 | LogicalOperationNode(LogicalOperation, shared_ptr, shared_ptr); 56 | 57 | virtual bool Evaluate(Date, string) const override; 58 | 59 | private: 60 | LogicalOperation logicOperation; 61 | shared_ptr leftForCompare; 62 | shared_ptr rightForCompare; 63 | }; 64 | 65 | 66 | #endif //__NODE_H 67 | -------------------------------------------------------------------------------- /Yellow_Belt/week_6/Курсовой проект/Answer/node.h: -------------------------------------------------------------------------------- 1 | #ifndef __NODE_H 2 | #define __NODE_H 3 | 4 | #include "token.h" 5 | #include "date.h" 6 | #include 7 | 8 | class Node{ 9 | public: 10 | Node(); 11 | Node (TokenType, Comparison); 12 | 13 | virtual bool Evaluate(Date, string) const = 0; 14 | Comparison GetComparison() const; 15 | 16 | private: 17 | TokenType _type; 18 | Comparison _comparison; 19 | }; 20 | 21 | 22 | class EmptyNode : public Node{ 23 | public: 24 | EmptyNode(); 25 | 26 | virtual bool Evaluate(Date, string) const override; 27 | }; 28 | 29 | 30 | class DateComparisonNode: public Node{ 31 | public: 32 | DateComparisonNode(); 33 | DateComparisonNode(Comparison , Date); 34 | 35 | virtual bool Evaluate(Date, string) const override; 36 | 37 | private: 38 | Date _date; 39 | }; 40 | 41 | 42 | class EventComparisonNode : public Node{ 43 | public: 44 | EventComparisonNode(); 45 | EventComparisonNode(Comparison , string); 46 | 47 | virtual bool Evaluate(Date, string) const override; 48 | 49 | private: 50 | string _event; 51 | }; 52 | 53 | class LogicalOperationNode : public Node { 54 | public: 55 | LogicalOperationNode(LogicalOperation, shared_ptr, shared_ptr); 56 | 57 | virtual bool Evaluate(Date, string) const override; 58 | 59 | private: 60 | LogicalOperation logicOperation; 61 | shared_ptr leftForCompare; 62 | shared_ptr rightForCompare; 63 | }; 64 | 65 | 66 | #endif //__NODE_H 67 | -------------------------------------------------------------------------------- /Red_Belt/week_4/Статистика web-сервера/solution/stats.cpp: -------------------------------------------------------------------------------- 1 | #include "stats.h" 2 | 3 | Stats::Stats(){ 4 | methods = { 5 | {"GET", 0}, 6 | {"PUT", 0}, 7 | {"POST", 0}, 8 | {"DELETE", 0}, 9 | {"UNKNOWN", 0} 10 | }; 11 | 12 | uris = { 13 | {"/", 0}, 14 | {"/order", 0}, 15 | {"/product", 0}, 16 | {"/basket", 0}, 17 | {"/help", 0}, 18 | {"unknown", 0} 19 | }; 20 | } 21 | 22 | void Stats::AddMethod(string_view method) { 23 | if (methods.find(method) != methods.end()) { 24 | methods[method]++; 25 | } 26 | else { 27 | methods[string_view("UNKNOWN")]++; 28 | } 29 | } 30 | 31 | void Stats::AddUri(string_view uri) { 32 | if (uris.find(uri) != uris.end()) { 33 | uris[uri]++; 34 | } 35 | else { 36 | uris[string_view("unknown")]++; 37 | } 38 | } 39 | 40 | const map& Stats::GetMethodStats() const { 41 | return methods; 42 | } 43 | 44 | const map& Stats::GetUriStats() const { 45 | return uris; 46 | } 47 | 48 | HttpRequest ParseRequest(string_view line) { 49 | HttpRequest request; 50 | 51 | size_t pos = 0; 52 | while (line[pos] == ' ' && pos != line.npos) { 53 | ++pos; 54 | } 55 | line.remove_prefix(pos); 56 | 57 | size_t delimiter = line.find(' '); 58 | request.method = line.substr(0, delimiter); 59 | 60 | line.remove_prefix(++delimiter); 61 | delimiter = line.find(' '); 62 | request.uri = line.substr(0, delimiter); 63 | 64 | line.remove_prefix(++delimiter); 65 | request.protocol = line; 66 | 67 | return request; 68 | } 69 | 70 | 71 | -------------------------------------------------------------------------------- /Red_Belt/week_1/Введение в макросы/Макрос LOG/README.md: -------------------------------------------------------------------------------- 1 | ## Тренировочное задание по программированию: Макрос LOG 2 | 3 | Вам дан класс Logger и макрос LOG 4 | ```cpp 5 | class Logger { 6 | public: 7 | explicit Logger(ostream& output_stream) : os(output_stream) { 8 | } 9 | 10 | void SetLogLine(bool value) { log_line = value; } 11 | void SetLogFile(bool value) { log_file = value; } 12 | 13 | void Log(const string& message); 14 | 15 | private: 16 | ostream& os; 17 | bool log_line = false; 18 | bool log_file = false; 19 | }; 20 | 21 | #define LOG(logger, message) ... 22 | ``` 23 | 24 | Параметры макроса LOG — объект класса Logger и строковое сообщение, которое должно быть передано в метод Log. В зависимости от настроек объекта класса Logger логируемое сообщение должно предваряться именем файла или номером строки. Смотрите юнит-тесты в заготовке решения для более подробного описания поведения. 25 | 26 | Реализуйте макрос LOG так, чтобы он добавлял в логируемое сообщение имя файла и номер строки в зависимости от настроек объекта logger. Пришлите на проверку cpp-файл, содержащий 27 | 28 | * реализацию макроса LOG 29 | * объявление класса Logger, при этом вы можете при необходимости добавлять в него дополнительные поля и методы 30 | * определения всех методов класса Logger 31 | 32 | Замечание 33 | 34 | Если вы используете Visual Studio, у вас могут не проходить юнит-тесты из заготовки, потому что в этой среде макрос ```__FILE__``` раскрывается в абсолютный путь до файла. Учитывайте это при отладке своего решения. 35 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Поиск ближайшего элемента/FindNearestElement.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | 6 | using namespace std; 7 | 8 | set::const_iterator FindNearestElement(const set& numbers, int border) { 9 | const auto first_not_less = numbers.lower_bound(border); 10 | 11 | // Если множество пусто или до первого элемента не меньше border 12 | // нет элементов, то мы уже получили ответ 13 | if (first_not_less == numbers.begin()) { 14 | return first_not_less; 15 | } 16 | 17 | // Если элементов, не меньших border, нет и set не пуст, то достаточно взять 18 | // итератор на последний элемент, меньший border 19 | const auto last_less = prev(first_not_less); 20 | 21 | if (first_not_less == numbers.end()) { 22 | return last_less; 23 | } 24 | 25 | // Разыменуем оба итератора-кандидата и выберем тот, 26 | // чей элемент ближе к искомому 27 | const bool is_left = (border - *last_less <= *first_not_less - border); 28 | return is_left ? last_less : first_not_less; 29 | } 30 | 31 | int main() { 32 | set numbers = {1, 4, 6}; 33 | cout << 34 | *FindNearestElement(numbers, 0) << " " << 35 | *FindNearestElement(numbers, 3) << " " << 36 | *FindNearestElement(numbers, 5) << " " << 37 | *FindNearestElement(numbers, 6) << " " << 38 | *FindNearestElement(numbers, 100) << endl; 39 | 40 | set empty_set; 41 | 42 | cout << (FindNearestElement(empty_set, 8) == end(empty_set)) << endl; 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /Yellow_Belt/week_3/Декомпозиция программы — 2/responses.cpp: -------------------------------------------------------------------------------- 1 | #include "responses.h" 2 | 3 | using namespace std; 4 | 5 | ostream& operator << (ostream& os, const BusesForStopResponse& r) { 6 | if (r.buses.empty()) { 7 | os << "No stop" << endl; 8 | } 9 | else { 10 | for (size_t i = 0; i < r.buses.size(); i++) { 11 | os << r.buses[i] << " "; 12 | 13 | } 14 | os << endl; 15 | } 16 | return os; 17 | } 18 | 19 | ostream& operator << (ostream& os, const StopsForBusResponse& r) { 20 | if (r.stops_for_buses.empty()){ 21 | os << "No bus" << endl; 22 | } 23 | else { 24 | for (const auto& stop_and_buses : r.stops_for_buses){ 25 | os << "Stop " << stop_and_buses.first << ":"; 26 | 27 | if (stop_and_buses.second.size() == 1){ 28 | os << " no interchange" << endl; 29 | } 30 | else{ 31 | for (const auto& bus : stop_and_buses.second){ 32 | if (bus != r.bus){ 33 | os << " " << bus; 34 | } 35 | } 36 | 37 | os << endl; 38 | } 39 | } 40 | } 41 | 42 | return os; 43 | } 44 | 45 | ostream& operator << (ostream& os, const AllBusesResponse& r) { 46 | if (r.allbuses.empty()) { 47 | os << "No buses" << endl; 48 | } 49 | else{ 50 | for (const auto& bus : r.allbuses) { 51 | os << "Bus " << bus.first << ":"; 52 | for (const auto& stop : bus.second) { 53 | os << " " << stop; 54 | } 55 | 56 | os << endl; 57 | } 58 | } 59 | return os; 60 | } 61 | -------------------------------------------------------------------------------- /Yellow_Belt/week_1/Средняя_температура - 2/AverageTemperature.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : AverageTemperature.cpp 3 | // Author : Ragimov Islam 4 | // Version : 5 | // Copyright : Your copyright notice 6 | // Description : Counting Average Temperature in C++, Ansi-style 7 | //============================================================================ 8 | 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | 14 | int averageTemperature (const vector& temperatures) { 15 | 16 | long int sum = 0; 17 | int i, avT; 18 | 19 | for(i=0; i < temperatures.size(); i++) 20 | { 21 | sum += temperatures[i]; 22 | } 23 | 24 | avT = sum / static_cast(temperatures.size()); 25 | 26 | return avT; 27 | 28 | } 29 | 30 | void indexPrinting (const vector& temperatures, const int avT) { 31 | 32 | vector indexes; 33 | int i; 34 | 35 | for (i = 0; i < temperatures.size(); i++) 36 | { 37 | if (temperatures[i] > avT) 38 | { 39 | indexes.push_back(i); 40 | } 41 | } 42 | 43 | cout << indexes.size() << endl;; 44 | 45 | for (i = 0; i < indexes.size(); i++) 46 | { 47 | cout << indexes[i] << " "; 48 | } 49 | } 50 | 51 | int main() { 52 | 53 | int n, avT; 54 | cin >> n; 55 | 56 | vector temperatures(n); 57 | 58 | for(int i = 0; i < n; i++) 59 | { 60 | cin >> temperatures[i]; 61 | } 62 | 63 | avT = averageTemperature(temperatures); 64 | 65 | indexPrinting(temperatures, avT); 66 | 67 | return 0; 68 | } 69 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Группировка строк по префиксу/Часть 1. Группировка по символу/FindStartsWith.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | template 9 | pair FindStartsWith(RandomIt range_begin, RandomIt range_end, char prefix){ 10 | RandomIt lower_bound, upper_bound; 11 | 12 | string target1 = {prefix}; 13 | char next = static_cast(prefix + 1); //Следующая буква в алфавите 14 | string target2 = {next}; 15 | 16 | lower_bound = std::lower_bound(range_begin, range_end, target1); 17 | upper_bound = std::lower_bound(range_begin, range_end, target2); 18 | 19 | return make_pair(lower_bound, upper_bound); 20 | } 21 | 22 | int main() { 23 | const vector sorted_strings = {"moscow", "murmansk", "vologda"}; 24 | 25 | const auto m_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), 'm'); 26 | for (auto it = m_result.first; it != m_result.second; ++it) { 27 | cout << *it << " "; 28 | } 29 | cout << endl; 30 | 31 | const auto p_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), 'p'); 32 | cout << (p_result.first - begin(sorted_strings)) << " " << 33 | (p_result.second - begin(sorted_strings)) << endl; 34 | 35 | const auto z_result = FindStartsWith(begin(sorted_strings), end(sorted_strings), 'z'); 36 | cout << (z_result.first - begin(sorted_strings)) << " " <<(z_result.second - begin(sorted_strings)) << endl; 37 | 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /Yellow_Belt/week_4/Группировка строк по префиксу/Часть 2. Группировка по префиксу/FindStartsWith2.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | template 9 | pair FindStartsWith(RandomIt range_begin, RandomIt range_end, const string& prefix){ 10 | RandomIt lower_bound, upper_bound; 11 | 12 | string target = {prefix}; 13 | lower_bound = std::lower_bound(range_begin, range_end, target); 14 | 15 | target[target.length()-1] = static_cast(target[target.length()-1] + 1); 16 | 17 | upper_bound = std::lower_bound(range_begin, range_end, target); 18 | 19 | return make_pair(lower_bound, upper_bound); 20 | } 21 | 22 | int main() { 23 | const vector sorted_strings = {"moscow", "motovilikha", "murmansk"}; 24 | 25 | const auto mo_result = 26 | FindStartsWith(begin(sorted_strings), end(sorted_strings), "mo"); 27 | for (auto it = mo_result.first; it != mo_result.second; ++it) { 28 | cout << *it << " "; 29 | } 30 | cout << endl; 31 | 32 | const auto mt_result = 33 | FindStartsWith(begin(sorted_strings), end(sorted_strings), "mt"); 34 | cout << (mt_result.first - begin(sorted_strings)) << " " << 35 | (mt_result.second - begin(sorted_strings)) << endl; 36 | 37 | const auto na_result = 38 | FindStartsWith(begin(sorted_strings), end(sorted_strings), "na"); 39 | cout << (na_result.first - begin(sorted_strings)) << " " << 40 | (na_result.second - begin(sorted_strings)) << endl; 41 | 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /Red_Belt/week_2/Сортировка студентов по рейтингу/Original/sort_students.cpp: -------------------------------------------------------------------------------- 1 | #include "student.h" 2 | #include "test_runner.h" 3 | 4 | #include 5 | 6 | using namespace std; 7 | 8 | //Оптимизируйте эту функцию 9 | bool Compare(Student first, Student second) { 10 | return first.Less(second); 11 | } 12 | 13 | void TestComparison() { 14 | Student newbie { 15 | "Ivan", "Ivanov", { 16 | {"c++", 1.0}, 17 | {"algorithms", 3.0} 18 | }, 19 | 2.0 20 | }; 21 | 22 | Student cpp_expert { 23 | "Petr", "Petrov", { 24 | {"c++", 9.5}, 25 | {"algorithms", 6.0} 26 | }, 27 | 7.75 28 | }; 29 | 30 | Student guru { 31 | "Sidor", "Sidorov", { 32 | {"c++", 10.0}, 33 | {"algorithms", 10.0} 34 | }, 35 | 10.0 36 | }; 37 | ASSERT(Compare(guru, newbie)); 38 | ASSERT(Compare(guru, cpp_expert)); 39 | ASSERT(!Compare(newbie, cpp_expert)); 40 | } 41 | 42 | void TestSorting() { 43 | vector students { 44 | {"Sidor", "Sidorov", {{"maths", 2.}}, 2.}, 45 | {"Semen", "Semenov", {{"maths", 4.}}, 4.}, 46 | {"Ivan", "Ivanov", {{"maths", 5.}}, 5.}, 47 | {"Petr", "Petrov", {{"maths", 3.}}, 3.}, 48 | {"Alexander", "Alexandrov", {{"maths", 1.}}, 1.} 49 | }; 50 | sort(students.begin(), students.end(), Compare); 51 | ASSERT(is_sorted(students.begin(), students.end(), 52 | [](Student first, Student second) { 53 | return first.Less(second); 54 | }) 55 | ); 56 | } 57 | 58 | int main() { 59 | TestRunner tr; 60 | RUN_TEST(tr, TestComparison); 61 | RUN_TEST(tr, TestSorting); 62 | return 0; 63 | } -------------------------------------------------------------------------------- /Brown_Belt/week_2/З_Реструктуризация кода/main.cpp: -------------------------------------------------------------------------------- 1 | #include "test_runner.h" 2 | #include "stats_aggregator.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | using namespace std; 12 | using namespace StatsAggregators; 13 | 14 | void TestAll(); 15 | 16 | unique_ptr ReadAggregators(istream& input) { 17 | const unordered_map()>> known_builders = { 18 | {"sum", [] { return make_unique(); }}, 19 | {"min", [] { return make_unique(); }}, 20 | {"max", [] { return make_unique(); }}, 21 | {"avg", [] { return make_unique(); }}, 22 | {"mode", [] { return make_unique(); }} 23 | }; 24 | 25 | auto result = make_unique(); 26 | 27 | int aggr_count; 28 | input >> aggr_count; 29 | 30 | string line; 31 | for (int i = 0; i < aggr_count; ++i) { 32 | input >> line; 33 | result->Add(known_builders.at(line)()); 34 | } 35 | 36 | return result; 37 | } 38 | 39 | int main() { 40 | TestAll(); 41 | 42 | auto stats_aggregator = ReadAggregators(cin); 43 | 44 | for (int value; cin >> value; ) { 45 | stats_aggregator->Process(value); 46 | } 47 | stats_aggregator->PrintValue(cout); 48 | 49 | return 0; 50 | } 51 | 52 | void TestAll() { 53 | TestRunner tr; 54 | RUN_TEST(tr, TestSum); 55 | RUN_TEST(tr, TestMin); 56 | RUN_TEST(tr, TestMax); 57 | RUN_TEST(tr, TestAverage); 58 | RUN_TEST(tr, TestMode); 59 | RUN_TEST(tr, TestComposite); 60 | } 61 | 62 | --------------------------------------------------------------------------------