diff --git a/ALGORITMS/.idea/vcs.xml b/ALGORITMS/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/ALGORITMS/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ALGORITMS/Lesson_1/1.py b/ALGORITMS/Lesson_1/1.py
new file mode 100644
index 0000000..9590c58
--- /dev/null
+++ b/ALGORITMS/Lesson_1/1.py
@@ -0,0 +1,24 @@
+# 1. Найти сумму и произведение цифр трехзначного числа, которое вводит пользователь.
+
+number = int(input('\n1 Вариант. Введите трехзначное целое число: '))
+
+a = number // 100
+b = number % 100 // 10
+c = number % 10
+
+print('\nСумма цифр: ', a + b + c)
+print('Произведение цифр: ', a * b * c)
+
+
+num = input('\n2 Вариант. Введите трехзначное целое число: ')
+summa = 0
+umn = 1
+for i in num:
+ summa += int(i)
+ umn *= int(i)
+
+print('\nСумма цифр: ', summa)
+print('Произведение цифр: ', umn)
+
+
+
diff --git a/ALGORITMS/Lesson_1/2.py b/ALGORITMS/Lesson_1/2.py
new file mode 100644
index 0000000..798050f
--- /dev/null
+++ b/ALGORITMS/Lesson_1/2.py
@@ -0,0 +1,40 @@
+"""
+2. Выполнить логические побитовые операции «И», «ИЛИ» и др. над числами 5 и 6.
+Выполнить над числом 5 побитовый сдвиг вправо и влево на два знака.
+Объяснить полученный результат.
+"""
+
+n1 = 5
+n2 = 6
+
+# "ИЛИ" оператор копирует бит, если тот присутствует в хотя бы в одном операнде.
+bit_or = n1 | n2
+
+# "Исключительное ИЛИ" оператор копирует бит только если бит присутствует в одном из операндов, но не в обоих сразу.
+bit_xor = n1 ^ n2
+
+# "И" оператор, копирует бит в результат только если бит присутствует в обоих операндах.
+bit_and = n1 & n2
+
+# Побитовое отрицание меняет биты на обратные, там где была единица становиться ноль и наоборот.
+bit_not_n1 = ~n1
+bit_not_n2 = ~n2
+
+# Побитовый сдвиг вправо. Значение левого операнда "сдвигается" вправо на количество бит указанных в правом операнде.
+bit_shift_right = n1 >> 2
+
+# Побитовый сдвиг влево. Значение левого операнда "сдвигается" влево на количество бит указанных в правом операнде.
+bit_shift_left = n1 << 2
+
+print(f'Побитовое «ИЛИ» (OR) для {bin(n1)} и {bin(n2)}: {bin(bit_or)} ({bit_or})')
+
+print(f'Исключающее «ИЛИ» (XOR) для {bin(n1)} и {bin(n2)}: {bin(bit_xor)} ({bit_xor})')
+
+print(f'Побитовое «И» (AND) для {bin(n1)} и {bin(n2)}: {bin(bit_and)} ({bit_and})')
+
+print(f'Побитовое отрицание (NOT) для {bin(n1)}: {bin(bit_not_n1)} ({bit_not_n1})'
+ f' и для {bin(n2)}: {bin(bit_not_n2)} ({bit_not_n2})')
+
+print(f'Битовый сдвиг вправо для {bin(n1)}: {bin(bit_shift_right)} ({bit_shift_right})')
+
+print(f'Битовый сдвиг влево для {bin(n1)}: {bin(bit_shift_left)} ({bit_shift_left})')
diff --git a/ALGORITMS/Lesson_1/3.py b/ALGORITMS/Lesson_1/3.py
new file mode 100644
index 0000000..8f14b06
--- /dev/null
+++ b/ALGORITMS/Lesson_1/3.py
@@ -0,0 +1,16 @@
+"""
+3. По введенным пользователем координатам двух точек вывести уравнение прямой вида y=kx+b, проходящей через эти точки.
+"""
+
+print('Координаты точки A(x1,y1): ')
+x1 = int(input('\tx1 = '))
+y1 = int(input('\ty1 = '))
+
+print('Координаты точки B(x2,y2): ')
+x2 = int(input('\tx2 = '))
+y2 = int(input('\ty2 = '))
+
+print('Уравнение прямой, проходящей через эти точки: ')
+k = (y1 - y2) / (x1 - x2)
+b = y2 - k * x2
+print('\ty = %.2f*x + %.2f' % (k, b))
diff --git a/ALGORITMS/Lesson_1/4.py b/ALGORITMS/Lesson_1/4.py
new file mode 100644
index 0000000..19f034f
--- /dev/null
+++ b/ALGORITMS/Lesson_1/4.py
@@ -0,0 +1,64 @@
+"""
+4. Написать программу, которая генерирует в указанных пользователем границах:
+случайное целое число;
+случайное вещественное число;
+случайный символ.
+Для каждого из трех случаев пользователь задает свои границы диапазона.
+Например, если надо получить случайный символ от 'a' до 'f', то вводятся эти символы.
+Программа должна вывести на экран любой символ алфавита от 'a' до 'f' включительно.
+"""
+
+import random
+
+
+def menu():
+ print('\n\tМЕНЮ:\n\n\
+ [1] Вывести случайное целое число\n\
+ [2] Случайное вещественное число\n\
+ [3] Случайный символ\n\
+ [0] Выход')
+
+
+def num_choice():
+ print('Задайте границы диапазона: ')
+ a = int(input('Первое число: '))
+ b = int(input('Второе число: '))
+ if a > b:
+ return random.randint(b, a)
+ return random.randint(a, b)
+
+
+def alpha_choice():
+ print('Задайте границы диапазона: ')
+ c = input('Первая буква: ')
+ d = input('Вторая буква: ')
+ if c == '' or d == '' or c.isdigit() or d.isdigit():
+ res = '\nОшибка ввода!\n'
+ elif ord(c) < ord(d):
+ res = random.choice([chr(i) for i in range(ord(c), ord(d) + 1)])
+ else:
+ res = random.choice([chr(i) for i in range(ord(d), ord(c) + 1)])
+ return res
+
+
+menu()
+option = input()
+
+while option != '0':
+ if option == '1':
+ try:
+ print(num_choice())
+ except ValueError:
+ print('\nОшибка ввода!\n')
+ elif option == '2':
+ try:
+ print(float(num_choice()))
+ except ValueError:
+ print('\nОшибка ввода!\n')
+ elif option == '3':
+ print(alpha_choice())
+
+ print('Меню: [1], [2], [3] или [0]')
+
+ if __name__ == '__main__':
+ option = input()
diff --git a/ALGORITMS/Lesson_1/5.py b/ALGORITMS/Lesson_1/5.py
new file mode 100644
index 0000000..7be5eb3
--- /dev/null
+++ b/ALGORITMS/Lesson_1/5.py
@@ -0,0 +1,32 @@
+"""
+5. Пользователь вводит две буквы. Определить, на каких местах алфавита они стоят и сколько между ними находится букв.
+"""
+
+a, b = [i.upper() for i in input('Введите 2 буквы латинского алфавита слитно: ')]
+
+# генерим алфавит
+alpha = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
+
+# Определяем какая буква по счету
+letter1 = alpha.index(a) + 1
+letter2 = alpha.index(b) + 1
+
+# подсчитываем колличество между бувами
+interval = letter2 - letter1 - 1
+
+# проверка на случай если буквы указаны не по возрастанию
+if letter2 < letter1:
+ interval = letter1 - letter2 - 1
+
+# исправим на правильное написание слов
+text = []
+if interval == 1 or interval == 21:
+ text = 'буква'
+elif interval == 2 or interval == 3 or interval == 4 or interval == 22 or interval == 23 or interval == 24:
+ text = 'буквы'
+else:
+ text = 'букв'
+
+print('Первая буква стоит на', letter1, 'месте')
+print('Вторая буква стоит на', letter2, 'месте')
+print('Между ними', interval, text)
diff --git a/ALGORITMS/Lesson_1/6.py b/ALGORITMS/Lesson_1/6.py
new file mode 100644
index 0000000..fddb9b1
--- /dev/null
+++ b/ALGORITMS/Lesson_1/6.py
@@ -0,0 +1,8 @@
+"""
+6. Пользователь вводит номер буквы в алфавите. Определить, какая это буква.
+"""
+
+num = int(input('Введите номер буквы от 1 до 26: '))
+
+alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+print('Номер', num, 'соответствует букве: ', alphabet[num - 1])
diff --git a/ALGORITMS/Lesson_1/7.py b/ALGORITMS/Lesson_1/7.py
new file mode 100644
index 0000000..a511005
--- /dev/null
+++ b/ALGORITMS/Lesson_1/7.py
@@ -0,0 +1,21 @@
+"""
+7. По длинам трех отрезков, введенных пользователем, определить возможность существования треугольника,
+составленного из этих отрезков. Если такой треугольник существует, то определить, является ли он разносторонним,
+равнобедренным или равносторонним.
+"""
+
+b = []
+for i in range(3):
+ x = int(input(f'Введите через пробел длину {i+1} отрезка: '))
+ b.append(x)
+
+if b[0] < b[1] + b[2] and b[1] < b[0] + b[2] and b[2] < b[0] + b[1]:
+ if b[0] == b[2] and b[2] == b[1]:
+ print(f'{b[0]} x {b[1]} x {b[2]} - Равносторонний треугольник')
+ elif b[0] == b[2] or b[2] == b[1] or b[0] == b[1]:
+ print(f'{b[0]} x {b[1]} x {b[2]} - Равнобедренный треугольник')
+ else:
+ print(f'{b[0]} x {b[1]} x {b[2]} - Разносторонний треугольник')
+else:
+ print(f'{b[0]} x {b[1]} x {b[2]} - Треугольник не существует')
+
diff --git a/ALGORITMS/Lesson_1/8.py b/ALGORITMS/Lesson_1/8.py
new file mode 100644
index 0000000..5485fbf
--- /dev/null
+++ b/ALGORITMS/Lesson_1/8.py
@@ -0,0 +1,11 @@
+"""
+8. Определить, является ли год, который ввел пользователем, високосным или невисокосным.
+"""
+
+x = int(input('Введите год: '))
+if x % 100 == 0 and x % 400 != 0:
+ print('Этот год обычный')
+elif x % 100 == 0 and x % 400 == 0 or x % 4 == 0:
+ print('Этот год високосный')
+else:
+ print('Этот год обычный')
diff --git a/ALGORITMS/Lesson_1/9.py b/ALGORITMS/Lesson_1/9.py
new file mode 100644
index 0000000..9095ac6
--- /dev/null
+++ b/ALGORITMS/Lesson_1/9.py
@@ -0,0 +1,17 @@
+"""
+9. Вводятся три разных числа. Найти, какое из них является средним (больше одного, но меньше другого).
+"""
+
+a = int(input('Введите первое число: '))
+b = int(input('Введите второе число: '))
+c = int(input('Введите третье число: '))
+
+if b < c < a or a < c < b:
+ print('среднее число ', c)
+elif a < b < c or c < b < a:
+ print('среднее число ', b)
+elif a == b or a == c or b == c:
+ print('При двух и более одинаковых числах не возможно определить среднее число')
+else:
+ print('среднее число ', a)
+
diff --git a/ALGORITMS/Lesson_2/1.py b/ALGORITMS/Lesson_2/1.py
new file mode 100644
index 0000000..6422350
--- /dev/null
+++ b/ALGORITMS/Lesson_2/1.py
@@ -0,0 +1,46 @@
+'''
+1. Написать программу, которая будет складывать, вычитать, умножать или делить два числа.
+Числа и знак операции вводятся пользователем. После выполнения вычисления программа не должна завершаться,
+а должна запрашивать новые данные для вычислений. Завершение программы должно выполняться при вводе символа '0'
+в качестве знака операции. Если пользователь вводит неверный знак (не '0', '+', '-', '*', '/'), то программа должна
+сообщать ему об ошибке и снова запрашивать знак операции. Также сообщать пользователю о невозможности деления на ноль,
+если он ввел 0 в качестве делителя.
+'''
+
+
+def menu():
+ print('[+] Сложение\n'
+ '[-] Вычитание\n'
+ '[*] Умножение\n'
+ '[/] Деление\n'
+ '[0] Выход')
+
+
+menu()
+option = input()
+
+while option != '0':
+ if option == '+':
+ a = int(input('Введите первое число:'))
+ b = int(input('Введите второе число:'))
+ print(f'{a} + {b} =', a + b)
+ elif option == '-':
+ a = int(input('Введите первое число:'))
+ b = int(input('Введите второе число:'))
+ print(f'{a} - {b} =', a - b)
+ elif option == '*':
+ a = int(input('Введите первое число:'))
+ b = int(input('Введите второе число:'))
+ print(f'{a} * {b} =', a * b)
+ elif option == '/':
+ try:
+ a = int(input('Введите первое число:'))
+ b = int(input('Введите второе число:'))
+ print(f'{a} / {b} =', round(a / b, 4))
+ except ZeroDivisionError:
+ print('Ошибка! На <0> делить нельзя!')
+ else:
+ print('Ошибка, введите правильный символ:')
+ menu()
+ option = input()
+
diff --git a/ALGORITMS/Lesson_2/2.py b/ALGORITMS/Lesson_2/2.py
new file mode 100644
index 0000000..6ce2aad
--- /dev/null
+++ b/ALGORITMS/Lesson_2/2.py
@@ -0,0 +1,20 @@
+'''
+2. Посчитать четные и нечетные цифры введенного натурального числа. Например, если введено число 34560,
+то у него 3 четные цифры (4, 6 и 0) и 2 нечетные (3 и 5).
+'''
+
+
+number = input('Введите число: ')
+even = 0
+odd = 0
+num_even = []
+num_odd = []
+for f in number:
+ i = int(f)
+ if i % 2 == 0:
+ num_even.append(i)
+ even += 1
+ else:
+ num_odd.append(i)
+ odd += 1
+print(f'У числа {number}: {even} четных {num_even} и {odd} нечетные {num_odd}')
diff --git a/ALGORITMS/Lesson_2/3.py b/ALGORITMS/Lesson_2/3.py
new file mode 100644
index 0000000..955a9fc
--- /dev/null
+++ b/ALGORITMS/Lesson_2/3.py
@@ -0,0 +1,7 @@
+'''
+3. Сформировать из введенного числа обратное по порядку входящих в него цифр и вывести на экран.
+Например, если введено число 3486, то надо вывести число 6843.
+'''
+
+number = input('Введите число: ')
+print(number[::-1])
diff --git a/ALGORITMS/Lesson_2/4.py b/ALGORITMS/Lesson_2/4.py
new file mode 100644
index 0000000..eeaae38
--- /dev/null
+++ b/ALGORITMS/Lesson_2/4.py
@@ -0,0 +1,18 @@
+'''
+4. Найти сумму n элементов следующего ряда чисел: 1 -0.5 0.25 -0.125
+Количество элементов (n) вводится с клавиатуры.
+'''
+
+
+n = int(input('Введите количество элементов: '))
+
+N = 0
+range = 1
+sum = 0
+
+while N < n:
+ sum += range
+ range /= -2
+ N += 1
+
+print('Сумма', sum)
diff --git a/ALGORITMS/Lesson_2/5.py b/ALGORITMS/Lesson_2/5.py
new file mode 100644
index 0000000..f5e5fb7
--- /dev/null
+++ b/ALGORITMS/Lesson_2/5.py
@@ -0,0 +1,11 @@
+'''
+5. Вывести на экран коды и символы таблицы ASCII, начиная с символа под номером 32 и заканчивая 127-м включительно.
+Вывод выполнить в табличной форме: по десять пар "код-символ" в каждой строке.
+'''
+
+for i in range(32, 128):
+ print('%6d-%s' % (i, chr(i)), end=' ')
+ if i % 10 == 1:
+ print()
+print()
+
diff --git a/ALGORITMS/Lesson_2/6.py b/ALGORITMS/Lesson_2/6.py
new file mode 100644
index 0000000..c2327d3
--- /dev/null
+++ b/ALGORITMS/Lesson_2/6.py
@@ -0,0 +1,46 @@
+'''
+6. В программе генерируется случайное целое число от 0 до 100. Пользователь должен его отгадать не более чем за 10 попыток.
+После каждой неудачной попытки должно сообщаться больше или меньше введенное пользователем число, чем то, что загадано.
+Если за 10 попыток число не отгадано, то вывести загаданное число.
+'''
+
+
+import random
+
+print('\nИгра угадай число от 0 до 100 за 10 попыток.\n')
+
+
+def menu():
+ print('[Y] - Играть ')
+ print('[N] - Выйти ')
+
+
+menu()
+option = input()
+rnd = random.randint(0, 100)
+count = 0
+
+while option != 'N':
+ while count != 10:
+ my = int(input('Введи число : '))
+ if my < rnd:
+ print(f'Загаданное число больше {my}')
+ elif my > rnd:
+ print(f'Загаданное число меньше {my}')
+ else:
+ print(f'\nВы угадали число "{rnd}" за {count + 1} попыток\n')
+ menu()
+ option = input()
+ count = -1
+ if option == 'N':
+ break
+ rnd = random.randint(0, 100)
+ count += 1
+ else:
+ print(f'Вы не угадали число за {count} попыток... Загаданное число "{rnd}"\n')
+ menu()
+ option = input()
+ count = 0
+ if option == 'N':
+ break
+ rnd = random.randint(0, 100)
diff --git a/ALGORITMS/Lesson_2/7.py b/ALGORITMS/Lesson_2/7.py
new file mode 100644
index 0000000..dffd40b
--- /dev/null
+++ b/ALGORITMS/Lesson_2/7.py
@@ -0,0 +1,22 @@
+'''
+7. Напишите программу, доказывающую или проверяющую, что для множества натуральных чисел выполняется
+равенство: 1+2+...+n = n(n+1)/2, где n - любое натуральное число.
+'''
+from colorama import Fore, Style
+
+n = 1
+while n != 200:
+ left = 0
+ for i in range(1, n + 1):
+ left += i
+ right = n * (n + 1) // 2
+ n += 1
+ if left == right:
+ res = True
+ else:
+ res = False
+ print('=' * 10)
+ print(left)
+ print(right)
+ print(f'{Fore.GREEN}{res}!{Style.RESET_ALL}')
+
diff --git a/ALGORITMS/Lesson_2/8.py b/ALGORITMS/Lesson_2/8.py
new file mode 100644
index 0000000..f6459cd
--- /dev/null
+++ b/ALGORITMS/Lesson_2/8.py
@@ -0,0 +1,14 @@
+'''
+8. Посчитать, сколько раз встречается определенная цифра в введенной последовательности чисел.
+Количество вводимых чисел и цифра, которую необходимо посчитать, задаются вводом с клавиатуры.
+'''
+
+number = input('Введите число: ')
+numeral = input('Введите цифру, которую необходимо посчитать: ')
+
+result = 0
+for i in number:
+ if i == numeral:
+ result += 1
+print(f'В числе {number} цифра {numeral} встречается {result} раз.')
+
diff --git a/ALGORITMS/Lesson_2/9.py b/ALGORITMS/Lesson_2/9.py
new file mode 100644
index 0000000..d317636
--- /dev/null
+++ b/ALGORITMS/Lesson_2/9.py
@@ -0,0 +1,22 @@
+'''
+9. Среди натуральных чисел, которые были введены, найти наибольшее по сумме цифр. Вывести на экран это число и сумму его цифр.
+'''
+
+numbers = '22', '33', '555', '99', '1111',
+
+
+def sum_numbers(numbers):
+ summa = 0
+ for item in numbers:
+ summa += int(item)
+ return summa
+
+
+max_number = 0
+max_sum = 0
+for i in numbers:
+ if sum_numbers(i) > max_sum:
+ max_number = i
+ max_sum = sum_numbers(i)
+
+print(f'У числа {max_number} наибольшая сумма цифр = {max_sum}')
diff --git a/ALGORITMS/Lesson_3/1.py b/ALGORITMS/Lesson_3/1.py
new file mode 100644
index 0000000..f7d0f1b
--- /dev/null
+++ b/ALGORITMS/Lesson_3/1.py
@@ -0,0 +1,11 @@
+'''
+1. В диапазоне натуральных чисел от 2 до 99 определить, сколько из них кратны каждому из чисел в диапазоне от 2 до 9.
+'''
+
+res = {}
+for i in range(2, 10):
+ res[i] = []
+ for j in range(2, 100):
+ if j % i == 0:
+ res[i].append(j)
+ print(f'Числу {i} кратны {len(res[i])} чисел: {res[i]}')
diff --git a/ALGORITMS/Lesson_3/2.py b/ALGORITMS/Lesson_3/2.py
new file mode 100644
index 0000000..624c0ee
--- /dev/null
+++ b/ALGORITMS/Lesson_3/2.py
@@ -0,0 +1,14 @@
+'''
+2. Во втором массиве сохранить индексы четных элементов первого массива.
+Например, если дан массив со значениями 8, 3, 15, 6, 4, 2, то во второй массив
+надо заполнить значениями 1, 4, 5, 6 (или 0, 3, 4, 5 - если индексация начинается с нуля),
+т.к. именно в этих позициях первого массива стоят четные числа.
+'''
+
+array_1 = [8, 3, 15, 6, 4, 2]
+array_2 = []
+for i in array_1:
+ if i % 2 == 0:
+ array_2.append(array_1.index(i))
+print(array_1, ' - Первый массив')
+print(array_2, ' - Индексы четных элементов первого массива')
diff --git a/ALGORITMS/Lesson_3/3.py b/ALGORITMS/Lesson_3/3.py
new file mode 100644
index 0000000..d25073f
--- /dev/null
+++ b/ALGORITMS/Lesson_3/3.py
@@ -0,0 +1,17 @@
+'''
+3. В массиве случайных целых чисел поменять местами минимальный и максимальный элементы.
+'''
+import random
+
+
+arr = [random.randint(1, 1000) for i in range(10)]
+mini = min(arr)
+maxi = max(arr)
+min_index = arr.index(mini)
+max_index = arr.index(maxi)
+print('Минимальное число в массиве:', mini)
+print('Максимальное число в массиве:', maxi)
+print(arr, 'Начальный массив')
+arr[min_index], arr[max_index] = arr[max_index], arr[min_index]
+print(arr, 'Измененный массив')
+
diff --git a/ALGORITMS/Lesson_3/4.py b/ALGORITMS/Lesson_3/4.py
new file mode 100644
index 0000000..2e0091a
--- /dev/null
+++ b/ALGORITMS/Lesson_3/4.py
@@ -0,0 +1,16 @@
+'''
+4. Определить, какое число в массиве встречается чаще всего.
+'''
+
+import random
+
+
+arr = [random.randint(1, 4) for i in range(20)]
+
+# для проверки
+print('массив', arr, '\n')
+for i in set(arr):
+ print('число', i, 'в массиве', arr.count(i), 'шт.')
+
+# результат
+print('\nЧисло:', max(arr, key=arr.count), 'встречается в массиве чаще всего')
diff --git a/ALGORITMS/Lesson_3/5.py b/ALGORITMS/Lesson_3/5.py
new file mode 100644
index 0000000..f8fd8f9
--- /dev/null
+++ b/ALGORITMS/Lesson_3/5.py
@@ -0,0 +1,14 @@
+'''
+5. В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве.
+'''
+
+import random
+
+arr = [random.randint(-100, 100) for _ in range(10)]
+print('\n', arr)
+print('\n Максимальный отрицательный элемент:', min(arr))
+
+for _ in range(len(arr)):
+ mini = min(arr)
+ ind = arr.index(mini)
+print(' Находится на позиции:', ind + 1)
diff --git a/ALGORITMS/Lesson_3/6.py b/ALGORITMS/Lesson_3/6.py
new file mode 100644
index 0000000..c5a934f
--- /dev/null
+++ b/ALGORITMS/Lesson_3/6.py
@@ -0,0 +1,23 @@
+'''
+6. В одномерном массиве найти сумму элементов, находящихся между минимальным и максимальным элементами.
+Сами минимальный и максимальный элементы в сумму не включать.
+'''
+
+import random
+
+arr = [random.randint(1, 99) for _ in range(11)]
+print('\n', arr)
+
+mini = min(arr)
+maxi = max(arr)
+min_ind = arr.index(mini)
+max_ind = arr.index(maxi)
+print('\n Минимальный элемент', mini, 'с индексом', min_ind)
+print(' Максимальный элемент', maxi, 'с индексом', max_ind)
+
+res = 0
+if min_ind < max_ind:
+ res += sum(arr[min_ind + 1:max_ind])
+else:
+ res += sum(arr[max_ind + 1:min_ind])
+print('\n Сумма элементов, находящихся между минимальным и максимальным элементами =', res)
diff --git a/ALGORITMS/Lesson_3/7.py b/ALGORITMS/Lesson_3/7.py
new file mode 100644
index 0000000..f3217ff
--- /dev/null
+++ b/ALGORITMS/Lesson_3/7.py
@@ -0,0 +1,27 @@
+'''
+7. В одномерном массиве целых чисел определить два наименьших элемента.
+Они могут быть как равны между собой (оба являться минимальными), так и различаться.
+'''
+
+
+import random
+
+arr = [random.randint(1, 99) for _ in range(11)]
+print('\n', arr)
+
+sort_arr = sorted(arr)
+print(' Два наименьших элемента в массиве', sort_arr[0], 'и', sort_arr[1], '- легкий вариант через сортировку')
+
+
+mini_1 = min(arr)
+min_ind = arr.index(mini_1)
+new_arr = arr[:]
+del new_arr[min_ind]
+mini_2 = min(new_arr)
+print('\n', arr)
+print(' Два наименьших элемента в массиве', mini_1, 'и', mini_2, '- вариант с копией основного массива ;)')
+
+
+
+
+
diff --git a/ALGORITMS/Lesson_3/8.py b/ALGORITMS/Lesson_3/8.py
new file mode 100644
index 0000000..5e3ff62
--- /dev/null
+++ b/ALGORITMS/Lesson_3/8.py
@@ -0,0 +1,22 @@
+'''
+8. Матрица 5x4 заполняется вводом с клавиатуры кроме последних элементов строк.
+Программа должна вычислять сумму введенных элементов каждой строки и записывать ее в последнюю ячейку строки.
+В конце следует вывести полученную матрицу.
+'''
+
+M = 5
+N = 4
+a = []
+for i in range(N):
+ b = []
+ s = 0
+ print("%d-я строка:" % i)
+ for j in range(M - 1):
+ n = int(input())
+ s += n
+ b.append(n)
+ b.append(s)
+ a.append(b)
+
+for i in a:
+ print(i)
diff --git a/ALGORITMS/Lesson_3/9.py b/ALGORITMS/Lesson_3/9.py
new file mode 100644
index 0000000..f3aae22
--- /dev/null
+++ b/ALGORITMS/Lesson_3/9.py
@@ -0,0 +1,31 @@
+'''
+9. Найти максимальный элемент среди минимальных элементов столбцов матрицы.
+'''
+
+import random
+
+num = []
+
+for i in range(4):
+ num.append([])
+ num[i].extend([random.randint(0, 99) for _ in range(8)])
+
+min_list = []
+min_list.extend(num[0])
+
+for string in num:
+ print()
+ print(('{:4d} ' * len(string)).format(*string))
+ i = 0
+ for j in string:
+ if j < min_list[i]:
+ min_list[i] = j
+ i += 1
+
+print()
+print('\tМинимальные числа в столбцах\n')
+print(('{:4d} ' * len(min_list)).format(*min_list))
+print()
+
+min_list.sort(reverse=True)
+print('Максимальный элемент среди минимальных элементов столбцов матрицы:', min_list[0])
diff --git a/ALGORITMS/Lesson_4/1.py b/ALGORITMS/Lesson_4/1.py
new file mode 100644
index 0000000..036c1b0
--- /dev/null
+++ b/ALGORITMS/Lesson_4/1.py
@@ -0,0 +1,49 @@
+'''
+1. Проанализировать скорость и сложность одного любого алгоритма, разработанных в рамках домашнего задания первых трех уроков.
+Примечание: попробуйте написать несколько реализаций алгоритма и сравнить их.
+'''
+import cProfile
+
+
+numbers = '22', '33', '555', '99', '1111',
+
+
+def sum_numbers(numbers):
+ summa = 0
+ for item in numbers:
+ summa += int(item)
+ return summa
+
+
+max_number = 0
+max_sum = 0
+for i in numbers:
+ if sum_numbers(i) > max_sum:
+ max_number = i
+ max_sum = sum_numbers(i)
+
+print(f'У числа {max_number} наибольшая сумма цифр = {max_sum}')
+
+
+def main():
+ num = 3 ** 100000
+ res_count = sum_numbers(str(num))
+ res_sum = sum_numbers(str(num))
+
+
+if __name__ == '__main__':
+ cProfile.run('main()')
+
+'''
+У числа 99 наибольшая сумма цифр = 18
+ 6 function calls in 0.073 seconds
+
+ Ordered by: standard name
+
+ ncalls tottime percall cumtime percall filename:lineno(function)
+ 2 0.011 0.005 0.011 0.005 1.py:11(sum_numbers)
+ 1 0.062 0.062 0.073 0.073 1.py:28(main)
+ 1 0.000 0.000 0.073 0.073 :1()
+ 1 0.000 0.000 0.073 0.073 {built-in method builtins.exec}
+ 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
+'''
\ No newline at end of file
diff --git a/ALGORITMS/Lesson_4/2.py b/ALGORITMS/Lesson_4/2.py
new file mode 100644
index 0000000..629d7f3
--- /dev/null
+++ b/ALGORITMS/Lesson_4/2.py
@@ -0,0 +1,56 @@
+'''
+2. Написать два алгоритма нахождения i-го по счёту простого числа.
+Без использования «Решета Эратосфена»;
+Используя алгоритм «Решето Эратосфена»
+Примечание ко всему домашнему заданию:
+Проанализировать скорость и сложность алгоритмов.
+Результаты анализа сохранить в виде комментариев в файле с кодом.
+'''
+
+import cProfile
+
+
+def number(n):
+ #n = 100
+ a = []
+ for i in range(n + 1):
+ a.append(i)
+ a[1] = 0
+ i = 2
+ while i <= n:
+ if a[i] != 0:
+ j = i + i
+ while j <= n:
+ a[j] = 0
+ j = j + i
+ i += 1
+ a = set(a)
+ a.remove(0)
+ print(a)
+
+
+def main():
+ num = 3 ** 100000
+ a1 = number(100)
+
+
+if __name__ == '__main__':
+ cProfile.run('main()')
+
+'''
+{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
+ 108 function calls in 0.002 seconds
+
+ Ordered by: standard name
+
+ ncalls tottime percall cumtime percall filename:lineno(function)
+ 1 0.000 0.000 0.000 0.000 2.py:13(number)
+ 1 0.002 0.002 0.002 0.002 2.py:32(main)
+ 1 0.000 0.000 0.002 0.002 :1()
+ 1 0.000 0.000 0.002 0.002 {built-in method builtins.exec}
+ 1 0.000 0.000 0.000 0.000 {built-in method builtins.print}
+ 101 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'remove' of 'set' objects}
+
+'''
\ No newline at end of file
diff --git a/ALGORITMS/Lesson_5/1.py b/ALGORITMS/Lesson_5/1.py
new file mode 100644
index 0000000..6bbe5a7
--- /dev/null
+++ b/ALGORITMS/Lesson_5/1.py
@@ -0,0 +1,40 @@
+'''
+1. Пользователь вводит данные о количестве предприятий, их наименования и прибыль за 4 квартала
+(т.е. 4 отдельных числа) для каждого предприятия.. Программа должна определить среднюю прибыль
+(за год для всех предприятий) и вывести наименования предприятий, чья прибыль выше среднего и
+отдельно вывести наименования предприятий, чья прибыль ниже среднего.
+'''
+
+from colorama import Fore, Style
+
+company = {}
+n = int(input('Колличество предприятий: '))
+q = 4 # кварталы
+p = 0 # прибыль каждого предприятия
+all = 0 # общая прибыль
+for i in range(n):
+ c_name = input(str(i + 1) + '-е предприятие: ')
+ company[c_name] = i + 1
+ for j in range(q):
+ profit = input('\t' + str(j + 1) + '-ый квартал: ')
+ all += int(profit)
+ p += int(profit)
+ company[c_name] = p
+ p = 0
+print('Предприятия:', company)
+print('Общая прибыль:', all)
+
+avrg = all / n
+print('\nСредняя прибыль за год для всех предприятий: %.0f' % avrg)
+little = []
+big = []
+for i in range(n):
+ x = int(list(company.values())[i])
+ if x > avrg:
+ big.append(list(company.items())[i])
+ else:
+ little.append(list(company.items())[i])
+
+print(f'\nПредприятия с прибылью ВЫШЕ средней: {Fore.GREEN}{big}{Style.RESET_ALL}')
+print('=' * 50)
+print(f'\nПредприятия с прибылью НИЖЕ средней: {Fore.RED}{little}{Style.RESET_ALL}')
diff --git a/ALGORITMS/Lesson_5/2.py b/ALGORITMS/Lesson_5/2.py
new file mode 100644
index 0000000..0acd23c
--- /dev/null
+++ b/ALGORITMS/Lesson_5/2.py
@@ -0,0 +1,28 @@
+'''
+2. Написать программу сложения и умножения двух шестнадцатеричных чисел.
+При этом каждое число представляется как массив, элементы которого это цифры числа.
+Например, пользователь ввёл A2 и C4F. Сохранить их как [‘A’, ‘2’] и [‘C’, ‘4’, ‘F’]
+соответственно. Сумма чисел из примера: [‘C’, ‘F’, ‘1’],
+произведение - [‘7’, ‘C’, ‘9’, ‘F’, ‘E’].
+'''
+
+import collections
+
+
+x = []
+for i in range(2):
+ y = list(input(f'Введите {i+1}-e число в шестнадцатиричном формате: ').upper())
+ x.append(y)
+
+a = collections.deque(x[0])
+b = collections.deque(x[1])
+c = ''.join(a)
+d = ''.join(b)
+summa = int(c, 16) + int(d, 16)
+pr = int(c, 16) * int(d, 16)
+arr1 = hex(summa)[2:].upper()
+arr2 = hex(pr)[2:].upper()
+
+print('Массив чисел:', x)
+print('Сумма чисел:', list(arr1))
+print('Произведение чисел:', list(arr2))
\ No newline at end of file
diff --git a/Lesson_10/__init__.py b/Lesson_10/__init__.py
new file mode 100644
index 0000000..e69de29