CodeLab
145 subscribers
538 photos
20 videos
159 links
Говорим просто о сложном

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
🔗 Код:

num1 = int(input())
num2 = int(input())
sign = (input())

if num2 == 0 and sign == '/':
print ('На ноль делить нельзя!')
else:
if sign == ('/'):
print (num1 / num2)
elif sign == ('*'):
print (num1 * num2)
elif sign == ('+'):
print (num1 + num2)
elif sign == ('-'):
print (num1 - num2)
else:
print('Неверная операция')
Теперь, я думаю, можно немного отвлечься и поговорить об алгоритмах, не так давно начал читать супер базовую книгу, которые мне рекомендовали абсолютно везде #Книги
Книжонка абсолютно ахуенно сделана и расписана так, что поймет чел с абсолютно любым мышлением, но в идеале иметь какие-то знания по программированию
Хотелось бы продолжить вести этот канал для 1 одного зрителя как мой собственный дневник больного, поэтому разберу с самого начала, что же я там начитал. Если периодически писать про прочитанные штуки, то , возможно, что-нибудь да запомню
🧑‍💻Итак, че это такое ваше Big(O)⁉️

0️⃣ Вообще, O это типо производительность нашего с вами алгоритма, скорость его выполнения (по мере увеличения входных данных), ‼️так как некоторые алгоритмы показывают свое превосходство именно при увеличении данных, которые мы подаем. ‼️

1️⃣🔗 В общем, есть некоторые разновидности этого самого Big(O).

Возьмем первые два вида и ахуеный пример из книги.

3️⃣ Первый вид это конечно O(n). Это у нас линейное время, а используется для простого поиска (это вы запомните).

4️⃣ Второй вид это O(log n) - это как раз логарифмическое время (используется для бинарного поиска). Даже нашел вам первую попавшуюся картинку, кстати показано все
максимально наглядно. #Алгоритмы
5️⃣ Как мы можем заметить, O(1) и O(log n) работает одинаково хорошо. Давайте разберем каждый из них.

🖇 Первый это O(1), время выполнения не зависит от количества входных данных, алгоритм выполняет фиксированное количество операций независимо от того, насколько большими или малыми могут быть входные данные, а это значит что он супер эффективный.

🔗 К примеру:

У нас есть, значит, массив, допустим, набор цифр от 1 до 10. Выполнение алгоритма будет таким быстрым, потому что мы сразу имеем доступ к элементу этого массива.

⭕️ Хотим мы вывести 5 элемент массива и выводим.

6️⃣ Теперь O(log n)
. Как я уже сказал в прошлом посте, ‼️ такому алгоритму присущ бинарный поиск, ща мы его и рассмотрим, тут же рассмотрим O(n), также из прошлого поста (Просто их проще сравнивать). #Бинарный_поиск
7️⃣ Берем пример из книги, есть у вас 128 имен (отсортированных ес че). Хотите вы найти определенное имя, пусть оно будет под номером 🟰12🟰. Что же бя делать?

8️⃣ Первое, что можно сделать, это тупо перебрать, как раз это у нас и есть O(n) - простой поиск.❗️ Но обычный перебор 128 имен это как-то слишком скучно, давайте быстрее. Тут выходит ферзь O(log n),‼️ Именно это Big(O) отвечает за бинарный поиск. 🔝Скорость этого алгоритма растет логарифмически с ростом размером данных (Типа чем больше данных, тем круче он будет по сравнению с O(n), ща объясню).

🔗Вернемся к 128 именам. Вместо того, чтобы как дауничи перебирать сидеть, разделяем 128 на 2 и спрашиваем, находится ли число, которое мы ищем, посередине??

9️⃣⭕️ Если нет, то сравниваем 12 и 64. Оказывается, что 12 меньше 64 (ахеть), а значит перемещаемся в диапазон от 1 до 64, теперь у нас 64 имени, та половина нам больше не нужна.

1️⃣0️⃣ Дальше делим 64 на 2 и смотрим, посередине ли находится наше искомое имя? Если нет, то снова сравниваем, 12 < 32, значит идем в диапазон от 1 до 32.

1️⃣1️⃣ Тоже самое делаем при последующем делении на 2, сначала получаем 16, потом 8. попадаем в диапазон от 8 до 16. Мы почти близко... ИИ того у нас получается каких то 5 шагов вместо 128!!!!!
(Это мы разницу разобрали между простым и бинарным поиском) #Бинарный_поиск
ну и двумя видами Big(O) ‼️
Итак, подается 4 числа, нам нужно понять, имеют ли две клетки одинаковый цвет, или нет? #Шахматная_доска
🔗 Шахматная доска 5.1

Итак, начнем с того, что❗️сумма координат всех белых клеток всегда четное число, а вот черных наоборот - нечетное.

⭕️ Если сумма координат для первой клетки это четное и сумма координат для второй клетки это тоже четное число, то выводим ('YES').

🔗 Код:

x1, y1, x2, y2 = int(input()), int(input()), int(input()), int(input())
if (x1 + y1) % 2 == (x2 + y2) % 2:
print('YES')
else:
print('NO')
⭕️ Абсолютно также можем проверить с разностью координат, ничего не поменяется.

🔗 Код:

x1, y1, x2, y2 = int(input()), int(input()), int(input()), int(input())
if (x1 - y1) % 2 == (x2 - y2) % 2:
print('YES')
else:
print('NO')
🔗 Римские цифры 5.1

Итак, вводим арабскую цифру, а программа нам выводит римскую.

⭕️ Для начала нам понадобится список римских цифр ['I', 'II', 'III', 'IV','V', 'VI', 'VII', 'VIII', 'IX', 'X'] - Кайф. Затем пишем решение #Римские_цифры

🔗 Код:

num = int(input())
num -= 1
a = ['I', 'II', 'III', 'IV','V', 'VI', 'VII', 'VIII', 'IX', 'X']
if -1 < num <= 10:
print(a[num])
else:
print('ошибка')
🧑‍💻 С первой строчкой все понятно, разберем вторую:

‼️ Если вспомним, то индексация начинается с 0. Как раз для этого и нужна 2 строчка. Допустим, вводится число 7, вторая строка отнимает 1 и получаем 6. Как раз 6 индекс это VII.

🔗 Код:

num = int(input())
num -= 1
a = ['I', 'II', 'III', 'IV','V', 'VI', 'VII', 'VIII', 'IX', 'X']
if -1 < num <= 10:
print(a[num])
else:
print('ошибка')
🌶🌶Разберем босса с 2 перчиками.

На вход программе подаются четыре целых числа a1, b1, a2, b2. ‼️

⭕️ Обязательное условие, что a1<b1, a2<b2.

Прикреплю также один из прекрасных наглядных комментариев. #Пересечение_отрезков
Итак, работаем, отталкиваясь, от подсказки.🧑‍💻Сначала, конечно же, вводим 4 int(input)-а.

0️⃣❗️Далее, разберем первый случай, когда общего пересечения нет (следующий скрин).

То есть, если один из двух случаев существует, значит общего пересечения нет.
Дальше, прописываем много много elif.

1️⃣ Значит так, если b1 == a2, значит пересечением будет точка a2.‼️АНАЛОГИЧНО‼️ будет и наоборот, если мы отрезки поставим, грубо говоря, наоборот, про это тоже не забываем

⭕️ То есть, пересечением второго отрезка будет точка a1
2️⃣ Идем дальше. ЕСЛИ a2 > a1 AND b1 < b2, то отрезок a2;b1 будет пересечением, и также наоборот по аналогии.