Репетитор IT men
12.8K subscribers
1K photos
21 videos
32 files
865 links
Блог с заметками преподавателя по математике, физике, информатике. Рассказываю о задачах, о способах их решения.

vk.com/itmentor
dzen.ru/itmentor
https://www.youtube.com/@it_men

Автор: @physicist_i

№ 5535340568
Download Telegram
⚙️ Трактат о силе трения: интересные факты, о которых вы боялись спросить

Во многих школьных учебниках, по которым начинают изучать физику в школе, даны несколько «аксиом» (аксиомы указаны в кавычках не просто так) по поводу силы трения:
1. Трение не зависит от площади поверхности.
2. Коэффициент силы трения скольжения (динамического трения) меньше единицы.
3. Сила трения скольжения равна максимальной силе трения покоя.
4. Коэффициент силы трения зависит только от рода соприкасающихся материалов.
Давайте так.. Не всегда, но часто можно встретить такие тезисы. И проблема в том, что абстрактно это вроде всё верно. Но как всегда есть парочка «NO». И в этой статье мы с вами разберем много интересного...

✏️ Читать статью

#разбор_задач #механика #трение #техника #олимпиады #репетитор #математика #информатика #программирование #физика #задачи

💡 Репетитор IT mentor
// @mentor_it
👍123🔥3😍1
🤔 Как ускорить выполнение цикла? Алгоритм оптимизации циклов

Что-то на канале давно ничего не было про кодинг. Попытаюсь исправить ситуацию. Сегодня поговорим с вами об оптимизациях цикла. Хорошо известно, что для оптимизации программы, для её ускорения, наши усилия должны быть сосредоточены на локальных областях, чтобы отдача была максимальной. Конструкции цикла в программе как раз представляют собой такие области. И вот что с ними можно сделать...

👨🏻‍💻 Читать статью полностью

#программирование #алгоритмы #структуры_данных #coding #разбор_задач #development

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥63🤯1
🖥 Помните предыдущие два поста про примитивные callback-функции и фильтрующие функции? Может возникнуть вопрос, а можно ли, реализовать свой аналог reduce() ?

Давайте сразу напишем такой пример:
numbers = [1, 11, 12, 13, 18, 9, 8, 6]

from functools import reduce

func = lambda acc, cur : acc + cur

total = reduce(func, numbers, 0)
print('Встроенная reduce: ',total)

def _reduce(callback, collection, init = 0):
acc = init
for k in collection:
acc = callback(acc, k)
return acc

_total = _reduce(func, numbers)
print('Моя reduce: ',_total)


Теперь объясним параметры и работу конструкции:
result = reduce( function, iterable[, initializer] ) :
▫️function — функция, применяемая к элементам итерации. Она должна принимать два аргумента.
▫️iterable — итерируемый объект, элементы которого вы хотите уменьшить. Это может быть список, кортеж или любой другой итерируемый объект.
▫️initializer — (необязательно): начальное значение аккумулятора (накопителя). Оно используется в качестве первого аргумента при первом вызове функции, если оно предусмотрено.

⚠️ Обработка пустых итераций: Одной из распространенных ошибок при использовании функции reduce() является обработка пустых итераций. Передача пустой итерации в reduce() без инициализатора вызывает Ошибку типа поскольку нет начального значения для запуска процесса сокращения. Чтобы избежать этого, всегда указывайте инициализатор, когда итерируемый объект может быть пустым.

⚙️ Производительность:
▫️ Эффективность reduce() по сравнению с циклами: Функция reduce() может быть более эффективной, чем явные циклы, потому что она реализована на C, что может обеспечить преимущества в производительности. Однако это преимущество часто незначительно и зависит от сложности применяемой функции.
▫️Преимущества использования встроенных функций в производительности: Встроенные функции, такие как sum(), min(), и max() высоко оптимизированы с точки зрения производительности. Они реализованы на C и могут выполнять операции быстрее, чем эквивалентный код Python с использованием reduce().

🖥 Зачем разработчикам нужна функция reduce() ? Функция reduce() полезна при итеративной обработке данных, избегая явных циклов и делая код более читаемым и кратким. Некоторые распространенные варианты использования включают:
▫️ Суммирование чисел в списке: Быстрое суммирование всех элементов.
▫️ Умножение элементов итеративного элемента: Вычисление произведения элементов.
▫️ Объединение строк: Объединение нескольких строк в одну.
▫️ Нахождение максимального или минимального значения: Определение самого большого или самого маленького элемента в последовательности.

#python #разработка #программирование #IT #алгоритмы

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍53🤯2
В этой заметке рассмотрим задачу с реального собеседования на Python-разработчика

Мы уже ознакомились с lambda-функциями и где они используются. Сейчас же исследуем вырванный из контекста реальный код и задания к нему.

🖥 Исходный код:
def get_first_matching_object(predicate,objects=[]):
matching_objects = (obj for obj in objects if predicate(obj))
if matching_objects:
object = matching_objects[0]
return object
return None

print(get_first_matching_object(lambda x: x == 1, [2, 3, 4]))


▪️ Что не так с кодом ? Если мы запустим в таком виде, то получим TypeError: 'generator' object is not subscriptable. Это означает, что объект-генератор matching_objects представляет собой итератор: он генерирует значения в том порядке, в котором они запрашиваются циклом for или вызовом next(matching_objects). Однако, дальше по коду пытаются получить доступ по индексу так, как будто это список или любой другой Sequence-тип, который позволяет получать доступ к произвольным k-м элементам через matching_objects[k]. Если мы хотим, чтобы всё работало, нам нужно преобразовать в список list() или закрыть генератор в квадратные скобки: matching_objects = [obj for obj in objects if predicate(obj)]

▪️ Что код делает ? Есть некоторая функция, которая принимает в себя callback-функцию predicate и набор объектов (пустой по дефолту). Далее у нас как-то формируется список помеченных объектов, которые попадают в новый список только в том случае, если callback-функция возвращает для них True. Следующая конструкция говорит нам о том, что если полученный список matching_objects не пустой, то мы выделяем первый входящий в него объект и возвращаем его. В противном случае возвращается None. Но последняя строчка не является обязательной. Потому что, в случае НЕсрабатывания условного оператора, у нас итак вернется None.

▪️ Что выведет на экран, если его исправить? Судя по тестовым параметрам, переданная lambda-функция ни на одном из элементов объекта [2, 3, 4] не вернет True. Поэтому список matching_objects окажется пустым, в итоге нам вернется None.

▪️ Функция оптимизирована? Нет. Дело в том, что она перебирает все остальные элементы (тратит память и время выполнения), когда мы можем ограничиться рассмотрением первого подходящего. Тогда код можно исправить так:
def get_first_matching_object(predicate,objects=[]):
for obj in objects:
if predicate(obj):
return obj
return None

print(get_first_matching_object(lambda x: x == 1, [1, 2, 3, 4])) # 1

▪️ Какая сложность выполнения данной функции? В худшем случае: O(n) ; в лучшем случае : O(1).

#python #разработка #программирование #IT #алгоритмы

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥64
🔣 Задача по программированию для подписчиков 👨🏻‍💻

Дано игровое поле, которое задано матрицей m x n, где каждая ячейка представляет собой клетку корабля «X» или пустую клетку «.».

Необходимо найти количество всех кораблей на игровом поле.

Примечания:
▪️ Корабли можно размещать на игровом поле только горизонтально или вертикально
▪️ Два корабля разделяет по крайней мере 1 горизонтальная или вертикальная клетка.

📝 Обсуждение задачи здесь 📝

#разбор_задач #задачи #программирование #информатика #математика #computer_science

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
💡 Как перенести названия всех файлов текущей директории в текстовый файл .txt в Python?

Решил написать небольшой скрипт на Python. Повседневная задача редактора технического канала: Перенести названия всех файлов из нужной директории (задается путем), и записать их в текстовый файл example.txt с добавлением номеров каждого файла. Записать имена в файл с предварительной сортировкой по дате создания (или скачивания). Рассказываю как это реализовать на Python в несколько строк...

👨🏻‍💻 Читать заметку полностью

#python #файлы #информатика #программирование #OS

💡 Репетитор IT mentor // @mentor_it
👍112🔥1🤨1
🐍 Циклы и их прерывания в Python: алгоритм поиска в строке

Это заметка будет для начинающих, которые только знакомятся с программированием, информатикой и с языком Python, в частности. Вчера мы с учеником изучали циклы и некоторые операторы, которые дают возможность управлять циклами. В этой небольшой статье я покажу несколько примеров. При этом от совсем простых абстракций постараемся углубиться в более полезные вещи с практической точки зрения. [ Уровень сложности: ~7..8 класс ]

👨🏻‍💻 Читать заметку полностью

#python #алгоритмы #информатика #программирование #циклы

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1😢1🤩1
👨🏻‍💻 Задача по программированию

Тривиальная задача сравнения метода вычисления факториал с помощью цикла и метода вычисления факториала с помощью рекурсии. Берется некоторое число n, для которого вычисляем факториал разными способами. Вычисления засовываем в цикл с 1000 итераций, чтобы снизить погрешность. Засекаем время с помощью метода Milliseconds() (библиотека Utils). Выводим результаты. В большинстве случаев рекурсия выполняется быстрее. Предлагаю обсудить, почему так происходит?
[ Язык реализации: Pascal ]

Обсуждение задачи:
vk.com/wall-51126445_30047
📝 Полный код: https://pastebin.com/UzPkbXDa

Были еще на канале интересные статьи по этой теме:

▪️ Что работает быстрее: цикл или рекурсия? Измеряем производительность

▪️ 🐍 Разбираем циклы в Python на простых примерах. Какой цикл быстрее?

▪️ Как ускорить выполнение цикла? Алгоритм оптимизации циклов

#программирование #информатика #pascal #задачи #профилирование

💡 Репетитор IT mentor // @mentor_it
👍102🤯1😱1
🎲 Задача из ЕГЭ по информатике: математика, статистика, код

Разбирал со своими учениками очередной ЕГЭ тест и наткнулся на задачу, с помощью которой можно потренировать как аналитические способности алгоритмического мышления, так и навыки программирования с помощью численного решения. А ещё по ходу дела вспомнить математическую статистику и логику. Готовы? Тогда приятного чтения...

📝 Читать разбор задачи

А какая у вас самая нелюбимая задача из ЕГЭ по информатике?

#математика #статистика #math #математическая_статистика #itmentor #егэ #разбор_задач #информатика #программирование

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥3😍1
👨‍💻 Накопители (SSD или HDD) являются удобными и надежными устройствами хранения больших объемов информациию. Но информацию нужно не только аккуратно складывать по «сундукам» но и уметь быстро ее находить и эффективно использовать.

Самую большую роль в этой цели играет организация хранения информации, её структура. Одна из книг известного теоретика и автора языка Pascal Никлауса Вирта (Niklaus Virth) называется «Алгоритмы + структуры данных = программы».

Вирт справедливо считал, что эффективность программ зависит не только от используемых алгоритмов и качества их реализации, но и в равной степени от правильности выбора структуры данных, которая была бы наиболее подходящей для данной конкретной задачи. То же самое можно сказать и о способах хранения информации.

#математика #программирование #алгоритмы #computer_science #информатика

💡 Репетитор IT mentor // @mentor_it
🔥9👍82🤔1
📝 Что такое численные методы и почему они упрощают жизнь? Разбор на простом примере

Допустим, нам требуется найти точку, в которой пересекаются две функции. Для большей простоты будем искать точку пересечения двух прямых, заданных уравнениями y(x) = 2*x + 1 и g(x) = 5 - x. С этой задачей в первый раз можно столкнуться в школе, примерно в 6-7 классе при изучении графиков функций. Посмотрим как её можно решить разными методами, а также как её можно усложнить...

📝 Какие книги читать по численным методам? — В этой заметке хочется обсудить полезную литературу по теме численных методов и математического моделирования физических систем. Что ж, тут не всё так однозначно, потому как, что подходит одному человеку, может показаться сложным другому. Но давайте приведем более менее неплохой список книг для начала.

📝 Численные методы: составление обратной зависимости x(y) для сложных зависимостей y(x)

#математика #math #численные_методы #программирование #разбор_задач

💡 Репетитор IT mentor // @mentor_it
👍76🔥2😱2
👩‍💻 Перевод из 10-чной системы счисления в систему счисления с основание base ∈ [2; 16]

# Перевод из десятичной в двоичную
# Пример: вход: x = 589 и base = 16
# выход: 24D
def dec_to_base(x, base):
digits = ['0','1','2','3','4','5','6',
'7','8','9','A','B','C','D','E','F']
copy = x
s = ''
while copy > 0:
rest = copy % base
copy = copy // base
s = digits[rest] + s
return s

x = 589
base = 16
print(f'{x} в {base}-чной СС: {dec_to_base(x,base)}')


👩‍💻 OUTPUT: 589 в 16-чной СС: 24D

#разбор_задач #программирование #информатика #python #code #computer_science

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤‍🔥4👨‍💻21🔥1
💡 Интересная задачка попалась мне, когда перебирал свои старые черновики

Есть шахматное поле n на n. На поле m ладей. Нужно определить какое число клеток не заняты и не находятся под боем.

Мне стало интересно сделать визуализацию решения, чтобы можно было легко посчитать пальцем число свободных клеток, тем самым проверить правильность работы программы. На вход программы подается матрица [8][8], в которой цифрой "1" отмечены места, в которых стоят ладьи. По этой матрице строится другая матрица, в которой "0" отмечаются свободные поля, а клетки, которые находятся под ударом отмечаются FLAG_ATTACK = -1. По матрице позиций под атакой рисуются красные клетки, иллюстрирующие запрещенные ходы.

Остальная доска рисуется алгоритмом, который переключает цвета с помощью деления по модулю 2. ( 0 - белый цвет, 1 - серый ). Плюс для компактности я решил использовать сквозной индекс по двумерному массиву. Хотя, вложенных циклов в некоторых местах итак получилось по 4.

Думаю, что графических процедур в программе будет достаточно, чтобы написать какую-нибудь простенькую пиксельную игру типа "змейка" :) Если вам было бы интересно почитать про реализацию змейки или другой пиксельной игры, то напишите об этом в комментариях и проявите какую-то активность.

📝 В данном случае язык реализации был Pascal ( IDE: PascalABC ):
https://pastebin.com/yg5zKEu7 — реализация через графические примитивы, никаких высокоуровневых библиотек.

#математика #программирование #информатика #pascal #delphi

💡 Репетитор IT mentor // @mentor_it
👍144🔥3
🟧🔺Запутанная задача [тип №6] из ЕГЭ по информатике

Пару дней назад с моим учеником наткнулись на сложную вариацию задачи №6 из ЕГЭ по информатике. Предполагаю, что у многих учащихся школ эта задача вызовет трудности, поэтому в этой заметке мы с вами максимально подробно разберем все способы решения данной проблемы. И порисуему геометрию, и покодим алгоритмы... Готовы? Тогда приятного чтения.

🟡 Читать заметку полностью

#ЕГЭ #разбор_задач #информатика #программирование #алгоритмы #математика

💡 Репетитор IT mentor // @mentor_it
👍73🔥2
👀 Новая вариация задания #6 из ОГЭ по информатике — разбор с параметром 🅰️

Разберем 6-ое задание из ОГЭ по информатике. Новая вариант этого задания немного смущает учащихся 9-го класса из-за появления параметра, который нужно изменять и думать, что будет происходить при данном изменении.

📝 Читать заметку полностью

#информатика #программирование #ОГЭ #разбор_задач #алгоритмы #параметры

💡 Репетитор IT mentor // @mentor_it
🔥6👍3😱21
👨🏻‍💻 Рекурсия и задача с исполнителем из ЕГЭ по информатике

Недавно разбирали с учеником 23 задачу из ЕГЭ по информатике. Хотел бы поделиться своими мыслями и некоторыми лайфхаками решения этой задачи с моими дорогими подписчиками. Очень надеюсь, что кому-нибудь эта заметка будет полезна или хотя бы интересна. Поэтому прошу не поскупиться на обратную связь, если эта тема интересна. А пока погнали начинать, сразу с практики :)

💡 Читать статью

📝 Задача:
... Сколько существует таких программ, которые исходное число 3 преобразуют в число 12 и при этом траектория вычислений программы содержит число 10?.. #рекурсия #программирование #python #ЕГЭ

💡 Репетитор IT mentor // @mentor_it
👍8🔥42
📜 Задачка про счастливый билет : решаем на Python

Задача: Определить, является ли заданное шестизначное число счастливым. (Счастливым называют такое шестизначное число, в котором сумма его первых трех цифр равна сумме его последних трех цифр.)

🖥 Читать заметку

#задачи #разбор_задач #программирование #информатика

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥43👨‍💻1
📜 Математика количества счастливых билетов

Сегодня я закончил работу над расширенной версией этой статьи про счастливые билеты. Рассмотрим куда более серьезную задачу — теорию аналитического моделирования количества счастливых билетов в общем случае для (k = 2n) - значных билетов. Здесь будет всё: математика, рекурсия, рекуррентные соотношения, верхние и нижние оценки, моделирование с помощью Python двумя способами.

🔍 Читать статью полностью ✏️

#задачи #разбор_задач #программирование #информатика #олимпиады

👨🏻‍💻 Репетитор IT mentor // @mentor_it
👍72🔥2🤯2
🤔 Как ускорить выполнение цикла? Алгоритм оптимизации циклов

Что-то на канале давно ничего не было про кодинг. Попытаюсь исправить ситуацию. Сегодня поговорим с вами об оптимизациях цикла. Хорошо известно, что для оптимизации программы, для её ускорения, наши усилия должны быть сосредоточены на локальных областях, чтобы отдача была максимальной. Конструкции цикла в программе как раз представляют собой такие области. И вот что с ними можно сделать...

👨🏻‍💻 Читать статью полностью

#программирование #алгоритмы #структуры_данных #coding #разбор_задач #development

💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74👨‍💻2🤩1
Пожалуй, это самые подробные в интернете разборы задачи про счастливые билеты. Почему-то эти статьи собрали мало охватов на Дзен. Так что если вы пропустили данные заметки, то ознакомьтесь. Там много интересного с точки зрения математики и алгоритмов. Статьи приведены в порядке возрастания сложности.

👨🏻‍💻 Задачка про счастливый билет : решаем на Python

📜 Математика количества счастливых билетов

#задачи #разбор_задач #программирование #информатика #олимпиады

💡 Репетитор IT mentor // @mentor_it
👍6🔥21🤨1