▪️ Интересный дизайн, эргономика, удобная клавиатура и качественное сочетание материалов корпуса. По размерам по сути нетбук, но с хорошим железом (не Celeron или Atom, а core i5)
▪️ Две аккумуляторные батареи: внутренняя и внешняя. Если у вас несколько внешних, то их можно поменять без выключения ноутбука. Это удобно. Однако, это не даст большой емкости и автономности, которую можно добиться в цельной батарее, как мне кажется.
▪️ В Thinkpad X250 неплохая модульность. Можно заменить RAM, модули wifi и 4G, накопитель. Но CPU+GPU конечно же распаяны на плате.
▪️ Одна хилая тепловая трубка и маленький вентилятор, не особо продуман теплоотвод.
▪️ Чтобы заменить клавиатуру (у этого ноутбука именно она не работала), нужно разобрать ВЕСЬ ноутбук. Это неудобно.
▪️ Динамики расположены асимметрично и имеют разную геометрию, следовательно звучать будут тоже по-разному, что ухудшает и без того неидеальный звук.
▪️ Очень странное охлаждение. CPU и графика расположены на одном кристалле, но под графику имеется вырез в медной пластинке.. Зачем и почему непонятно.
Однако, если у вас ограниченный бюджет, то лучше взять такой вот б\у ноутбук, чем пытаться найти что-то новое, но некачественный ноунейм.
А вы пробовали Thinkpad ?
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
💡 Игрушка для любителей математики или что такое «бутылка Клейна» ?
Интересный топологический фокус, называемый бутылем Клейна, был выпущен небольшой партией в Калифорнии. Это близкий родственник более знаменитой ленты Мебиуса. Бутыль Клейна была изобретена в 19 веке немецким математиком и геометром Феликсом Клейном. Примечательна эта абстракция тем, что представляет собой объемную фигуру, ограниченную односторонней поверхностью...
📜 Читать полностью
#математика #топология #геометрия #алгебра #math #geometry
💡 Репетитор IT mentor // @mentor_it
Интересный топологический фокус, называемый бутылем Клейна, был выпущен небольшой партией в Калифорнии. Это близкий родственник более знаменитой ленты Мебиуса. Бутыль Клейна была изобретена в 19 веке немецким математиком и геометром Феликсом Клейном. Примечательна эта абстракция тем, что представляет собой объемную фигуру, ограниченную односторонней поверхностью...
📜 Читать полностью
#математика #топология #геометрия #алгебра #math #geometry
💡 Репетитор IT mentor // @mentor_it
📐 Мишустин задал задачку лицеистам, а они её не смогли решить
Премьер-министр Михаил Мишустин приехал в Физтех-лицей имени Капицы в Долгопрудном и задал ученикам задачку. Как пишет ТАСС, «вместе с учителем школьники начали искать варианты решения, высказывая свои предположения, но в итоге так и не справились».
😑 УСЛОВИЕ:
#математика #олимпиады #геометрия #алгебра #math #geometry #разбор_задач
💡 Репетитор IT mentor // @mentor_it
Премьер-министр Михаил Мишустин приехал в Физтех-лицей имени Капицы в Долгопрудном и задал ученикам задачку. Как пишет ТАСС, «вместе с учителем школьники начали искать варианты решения, высказывая свои предположения, но в итоге так и не справились».
😑 УСЛОВИЕ:
Дана окружность диаметром АВ. На этой окружности отмечена произвольная точка С.
🤔 НЕОБХОДИМО: построить из точки С перпендикуляр на диаметр АВ пользуясь ТОЛЬКО линейкой без делений и прямых углов (с помощью линейки можно проводить только прямые линии)
✏️ Подробный разбор этой задаче здесь#математика #олимпиады #геометрия #алгебра #math #geometry #разбор_задач
💡 Репетитор IT mentor // @mentor_it
Media is too big
VIEW IN TELEGRAM
⏳ Как просчитать все ходы? Могут ли три «дамки» загнать одну «дамку» соперника за ограниченное число ходов?
Я не умею играть в шахматы и шашки. Но мне нравятся эти игры, поэтому иногда тренируюсь в приложении на телефоне или в VK. Каждый раз я понимаю, что «Дьявол в деталях», и очередной проигрыш связан с тем, что думаешь на 1-2 хода вперед. Либо просто не хватает времени (на ход выделено 60 сек) чтобы учесть все возможные ходы соперника.
Сегодня ночью я опять решил сыграть и записать на видео игру, чтобы потом посмотреть, где я ошибался. Так вышло, что с одним человеком мы играли две партии подряд. Первую партию я быстро слил, а вот вторая оказалась для меня интересной с точки зрения математической статистики. Обратите внимание на конец второй партии.
⚠️ Правила:
Ничья признается, если участник, имея в окончании партии три дамки против одной дамки соперника и владея при этом "большой дорогой", своим 15-м ходом (считая с момента установления соотношения сил) не совершит взятие дамки соперника.
❓ Вопрос: Можно было бы конкретно в этом случае быстро загнать дамку соперника в тупик?
Скорость видео в режиме реального времени (игра шла с такой же скоростью). #задачи #логические_игры #шашки #статистика #логика #математика #теория_вероятностей
💡 Репетитор IT mentor // @mentor_it
Я не умею играть в шахматы и шашки. Но мне нравятся эти игры, поэтому иногда тренируюсь в приложении на телефоне или в VK. Каждый раз я понимаю, что «Дьявол в деталях», и очередной проигрыш связан с тем, что думаешь на 1-2 хода вперед. Либо просто не хватает времени (на ход выделено 60 сек) чтобы учесть все возможные ходы соперника.
Сегодня ночью я опять решил сыграть и записать на видео игру, чтобы потом посмотреть, где я ошибался. Так вышло, что с одним человеком мы играли две партии подряд. Первую партию я быстро слил, а вот вторая оказалась для меня интересной с точки зрения математической статистики. Обратите внимание на конец второй партии.
Ничья признается, если участник, имея в окончании партии три дамки против одной дамки соперника и владея при этом "большой дорогой", своим 15-м ходом (считая с момента установления соотношения сил) не совершит взятие дамки соперника.
Скорость видео в режиме реального времени (игра шла с такой же скоростью). #задачи #логические_игры #шашки #статистика #логика #математика #теория_вероятностей
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
📝 О проблемах, связанных с оцениванием
Мы с детства привыкаем, что нас оценивают. В школе оценивают учителя. В вузе оценивают преподаватели. Преподавателей оценивает ВАК. Самое страшное — человек привыкает, что его оценивают. Ждать внешней оценки — это нездоровое качество. Нельзя себя ставить в такое положение, чтобы тебя оценивали.
В жизни все гораздо сложнее. Твою деятельность оценивают не люди, а объективные обстоятельства. Заработало - не заработало, получилось - не получилось, удалось - не удалось. И необходимо добиться результата, так сложить обстоятельства, чтобы заработало, получилось, удалось. Это очень сложно.
Приведу пример. Вы хотите создать робота. Это сложнейшее техническое устройство, hi-end электроники, робототехники, программирования. Допустим, робот должен пройти от одного края белой доски до другого, обходя при этом черные области (это случайно наложенная черная бумага). Роботом управляет компьютер, робот ориентируется по видеокамере, расположенной на нем. Робот должен обходить препятствие самостоятельно, без участия человека.
Чтобы его разработать, собрать и отладить, приходится решить около 200 уникальных сложнейших математических задач: геометрия, кинематика, динамика, ходьба, оптическая коррекция, оптическое распознавание, управление на четырех уровнях, система искусственного интеллекта. Только профессиональные математики могут заниматься такой сложнейшей деятельностью.
Теперь вернемся к оценке. Кто оценивает профессионального математика? В учебной математике оценивают учителя и преподаватели. В фундаментальной математике оценивает ВАК или РАН. Но для профессионального математика есть только один критерий оценки — результат. Работают ли сложнейшие модели или технические устройства, которые он разрабатывает? С роботом только один критерий оценки — работает или нет.
Не обращайте внимание на критику обывателей, конкурентов, преподавателей со стороны. Важен только ваш конечный результат. Ваши ошибки и неудачи в ходе работы не имеют никакого смысла в конце, если работа успешно завершена. Ориентируйтесь на результат!
💡 Репетитор IT mentor // @mentor_it
Мы с детства привыкаем, что нас оценивают. В школе оценивают учителя. В вузе оценивают преподаватели. Преподавателей оценивает ВАК. Самое страшное — человек привыкает, что его оценивают. Ждать внешней оценки — это нездоровое качество. Нельзя себя ставить в такое положение, чтобы тебя оценивали.
В жизни все гораздо сложнее. Твою деятельность оценивают не люди, а объективные обстоятельства. Заработало - не заработало, получилось - не получилось, удалось - не удалось. И необходимо добиться результата, так сложить обстоятельства, чтобы заработало, получилось, удалось. Это очень сложно.
Приведу пример. Вы хотите создать робота. Это сложнейшее техническое устройство, hi-end электроники, робототехники, программирования. Допустим, робот должен пройти от одного края белой доски до другого, обходя при этом черные области (это случайно наложенная черная бумага). Роботом управляет компьютер, робот ориентируется по видеокамере, расположенной на нем. Робот должен обходить препятствие самостоятельно, без участия человека.
Чтобы его разработать, собрать и отладить, приходится решить около 200 уникальных сложнейших математических задач: геометрия, кинематика, динамика, ходьба, оптическая коррекция, оптическое распознавание, управление на четырех уровнях, система искусственного интеллекта. Только профессиональные математики могут заниматься такой сложнейшей деятельностью.
Теперь вернемся к оценке. Кто оценивает профессионального математика? В учебной математике оценивают учителя и преподаватели. В фундаментальной математике оценивает ВАК или РАН. Но для профессионального математика есть только один критерий оценки — результат. Работают ли сложнейшие модели или технические устройства, которые он разрабатывает? С роботом только один критерий оценки — работает или нет.
Не обращайте внимание на критику обывателей, конкурентов, преподавателей со стороны. Важен только ваш конечный результат. Ваши ошибки и неудачи в ходе работы не имеют никакого смысла в конце, если работа успешно завершена. Ориентируйтесь на результат!
💡 Репетитор IT mentor // @mentor_it
Соскучились по электричеству и магнетизму, друзья? :) В этой статье мы максимально подробно разберем типичную задачу на RL-цепи. Такие задачи начинают проходить в 11-м классе в физико-математических лицеях, а затем возвращаются к ним в университете примерно на 2-м курсе физ-мата. Но в чем же особенность этих задач? Во-первых, большинство не понимает как их решать. Во-вторых...
📝 Читать заметку полностью
#электродинамика #физика #электричество #магнетизм #разбор_задач
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, друзья! Сегодня продолжим тему олимпиадных задач по математике. Особенность таких задач в том, что их можно решить нетривиальным, ну или как минимум, не часто встречающимся способом. И вот такие способы отлично подчеркивают красоту математики. Кстати, будет очень здорово, если кто-нибудь из подписчиков предложит другой способ решения данной задачи. И да, речь сегодня пойдет о неравенствах.
Доказать неравенство:
|a³ + b³ + c³ - 3•a•b•c| ⩽ (a² + b²+ c²)^(3/2) где a, b, c ∈ ℝ
📝 Читать разбор задачи
#математика #алгебра #олимпиады #разбор_задач #аналитическая_геометрия #линейная_алгебра
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
▪️ Когда нужно быстро сделать анонимную функцию, которую удобно передавать в другие функции высшего порядка, используются лямбда-функии, которые имеют синтаксис:
Lambda аргументы : выражение
Лямбда-функции могут иметь любое количество аргументов, но у каждой может быть только одно выражение. Выражение вычисляется и возвращается. Эти функции могут быть использованы везде, где требуется объект-функция. Лямбда-функцию можно пустить в качестве аргумента другие функции, которые обрабатывают крупные структуры данных: списки, словари, объекты. Синтаксически лямбда-функция ограничена, позволяет представить всего одно выражение.
▪️ Функция
filter()
в Python принимает в качестве аргументов функцию и список . Функция вызывается со всеми элементами в списке, и в результате возвращается новый список, содержащий элементы, для которых функция возвращает результат True
. Мы напишем пример использования функции filter()
для отбора четных чисел из списка.▪️ Функция
map()
принимает в качестве аргументов функцию и список. Функция вызывается со всеми элементами в списке, и в результате возвращается новый список, содержащий элементы, возвращенные данной функцией для каждого исходного элемента.Ниже пример использования функции
map()
для возведения в квадрат всех элементов списка.▪️ Функция
reduce()
принимает на вход три параметра — функцию-обработчик, коллекцию и начальное значение аккумулятора. Этот же аккумулятор возвращается наружу в качестве результата всей операции. Функция вызывается с помощью лямбда-функции и итерируемого объекта и возвращается новый уменьшенный результат (свертка). Так выполняется повторяющаяся операцию над парами итерируемых объектов. Функция reduce()
входит в состав модуля functools
. Да, эта функция самая сложная для понимания. По своей сути функция reduce()
нужная для агрегации (лат. aggregatio «присоединение») элементов в результат-ответ. Функция, передаваемая в reduce()
— самая важная часть и ключ к пониманию работы всего механизма агрегации. Она принимает на вход два значения. Первое — текущее значение аккумулятора, второе — текущий обрабатываемый элемент. Задача функции — вернуть новое значение аккумулятора. reduce() никак не анализирует содержимое аккумулятора. Всё, что она делает, передаёт его в каждый новый вызов до тех пор, пока не будет обработана вся коллекция, и в конце концов вернёт его наружу.# Различие между обычной функцией и лямбда-функцией
def defined_square(x):
return x*x
lambda_square = lambda x : x**2
print(defined_square(16)) # 256
print(lambda_square(16)) # 256
# Применение лямбда-функции к функциям высш.порядка
numbers = [1, 11, 12, 13, 18, 9, 8, 6]
# Лямбда-функции и filter()
new_list = list(filter(lambda x: x % 2, numbers))
print(new_list) # [1, 11, 13, 9]
# Лямбда-функции и map()
new_list = list(map(lambda x: x**2, numbers))
print(new_list) # [1, 121, 144, 169, 324, 81, 64, 36]
# Лямбда-функции и reduce()
from functools import reduce
total = reduce(lambda acc, cur : acc + cur, numbers)
print(total) #1 + 11 + 12 + 13 + 18 + 9 + 8 + 6 = 78
users = [
{ 'name': 'Igor', 'amount': 19 },
{ 'name': 'Danil', 'amount': 1 },
{ 'name': 'Ivan', 'amount': 4 },
{ 'name': 'Matvey', 'amount': 16 },
]
total = reduce(lambda acc, user: acc + user['amount'], users, 0)
# user: Igor, acc = 0, return value 0 + 19
# user: Danil, acc = 19, return value 19 + 1
# user: Ivan, acc = 20, return value 20 + 4
# user: Matvey, acc = 24, return value 24 + 16
print(total) # 40
🔹 Функция reduce в Python
🔹 Агрегация reduce() - свертка
🔹 Лямбда-функция в Python простыми словами
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
Callback
-функции делают код Python более гибким и модульным. Они позволяют создавать функции, которые могут выполнять разные действия в зависимости от переданной им callback-функции. Пример использования
callback
в Python:def calculate(func, x, y):
result = func(x, y)
print(result)
def add(x, y):
return x + y
def multiply(x, y):
return x * y
calculate(add, 2, 3) # выведет 5
calculate(multiply, 2, 3) # выведет 6
В этом примере функция
calculate
принимает функцию в качестве первого аргумента, а также два параметра x и y. Затем функция calculate вызывает переданную функцию и передаёт ей x и y в качестве аргументов. Результат затем выводится на консоль. Функции add
и multiply
определены отдельно и переданы как callback-функции функции calculate
, которая затем вызывает их соответствующим образом. Callback-функции широко используются в различных областях программирования, например: веб-разработка (обработка событий на веб-страницах), разработка игр (обработка событий от игровых контроллеров), мобильная разработка (обработка событий пользовательского интерфейса), машинное обучение (определение функций потерь и метрик для оценки моделей).
▫️Гибкость и расширяемость. Код становится более модульным и гибким. Можно легко изменять поведение функции, передавая ей разные callback-функции.
▫️Асинхронность. Callback-функции часто используются в асинхронном программировании, где выполнение кода не обязательно происходит последовательно. Например, при обработке событий, сетевых запросов или операций ввода/вывода.
▫️Обработка событий. Callback-функции позволяют реагировать на определённые события, такие как нажатие кнопки, получение данных из сети или завершение длительной операции.
💡 Репетитор IT mentor // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
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
В этой заметке рассмотрим задачу с реального собеседования на Python-разработчика
Мы уже ознакомились с lambda-функциями и где они используются. Сейчас же исследуем вырванный из контекста реальный код и задания к нему.
🖥 Исходный код:
▪️ Что не так с кодом ? Если мы запустим в таком виде, то получим
▪️ Что код делает ? Есть некоторая функция, которая принимает в себя callback-функцию predicate и набор объектов (пустой по дефолту). Далее у нас как-то формируется список помеченных объектов, которые попадают в новый список только в том случае, если callback-функция возвращает для них
▪️ Что выведет на экран, если его исправить? Судя по тестовым параметрам, переданная lambda-функция ни на одном из элементов объекта
▪️ Функция оптимизирована? Нет. Дело в том, что она перебирает все остальные элементы (тратит память и время выполнения), когда мы можем ограничиться рассмотрением первого подходящего. Тогда код можно исправить так:
▪️ Какая сложность выполнения данной функции? В худшем случае: O(n) ; в лучшем случае : O(1).
#python #разработка #программирование #IT #алгоритмы
💡 Репетитор IT mentor // @mentor_it
Мы уже ознакомились с 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