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

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
⭕️ Допустим, у нас 5 месяц, по второму условию, если m <= 7, то 30 + m%2.

Остаток от деления 5 на 2 получаем 1, прибавляем к 30 и получаем 31 день.

🔗 Если бы вышел 4 -й месяц, то остаток от деления будет равен 0, значит и дней у нас 30

🔗Код:

m = int(input())

if m == 2:
print('28')
elif m <= 7:
print(30 + m%2 )
else:
print(31 - m%2 )


🔗 Другой вариант решения:

x = int(input())

if x == 2:
print(28)
elif (x < 8 and x % 2 == 0) or (x > 7 and x % 2 != 0):
print(30)
else:
print(31)


Из за того, что в июле и августе по 31 дню, такие решения и получаются
А если m > 7, допустим 9 месяц (сентябрь если че), делим на 2 получаем 1, вычитаем из 31 единицу, значит и дней 30 (Кстати ауеть в сентябре 30 дней)
Итак, задание описывать совершенно нет смысла, просто прописываем, за что отвечает каждое введенное значение #Самописный_калькулятор
🔗 Код:

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️⃣❗️Далее, разберем первый случай, когда общего пересечения нет (следующий скрин).

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