Как создавать быстрые и эффективные алгоритмы? В статье, на примере задачи по подсчёту уникальных IPv4 адресов, рассматриваются приёмы и методы обработки больших объёмов данных. Вы узнаете, как написать код, работающий в десятки раз быстрее и использующий в несколько десятков раз меньше памяти, чем "наивные" алгоритмы.
Занимательные задачки
Разминаем мозги
ВПР на максималках
Думаю многие, если не большинство, в курсе, что такое ВПР и его неоспоримая сила при поиске и объединении данных из разных таблиц. Те же, кто достиг просветления, используют не менее полезную функцию ИНДЕКС, чтобы не париться, где там идентификатор: слева или справа.
Ниже будет пост о том, каким еще извращенным способом можно надругаться над excel и вытащить данные из другой таблицы по нестандартным условиям без регистрации и смс дополнительных фишек типа VBA и т.п., только штатный функционал excel.
Достаточно ли вы умны для того, чтобы работать на Илона Маска?
Задачка на логическое мышление, которую Илон Маск любил задавать на интервью в ранние дни руководства компанией SpaceX, а также несколько производных от неё задач.
Вы стоите на поверхности Земли. Затем вы начинаете идти: проходите один километр на юг, один на запад и один на север. В итоге вы оказываетесь в начальной точке. Где вы стоите?
Чаще всего кандидаты отвечают «на Северном полюсе», и это правильный ответ. Эта задачка очень старая – самое раннее её упоминание датируется аж 1821 годом. Однако, как утверждает Эшли Вэнс, биограф Маска, тот, получив такой ответ, задавал следующий вопрос: «Хорошо, а есть ли ещё такие точки?»
Лёгкий способ решать задачи о стрелках часов
Однажды много лет назад один немолодой профессор задал мне задачку о перестановке стрелок часов. Точной формулировки за давностию лет я не помню, но поиск в интернете привёл меня к «Занимательной алгебре» Я. И. Перельмана, которая была впервые опубликована в 1933 году:
Возьмём положение стрелок в 12 часов. Если бы в этом положении большая и малая стрелки обменялись местами, они дали бы всё же правильные показания. Но в другие моменты, — например, в 6 часов, — взаимный обмен стрелок привёл бы к абсурду, к положению, какого на правильно идущих часах быть не может: минутная стрелка не может стоять на 6, когда часовая показывает 12. Возникает вопрос: когда и как часто стрелки часов занимают такие положения, что замена одной другою дает новое положение, тоже возможное на правильных часах?
Что любопытно, эта формулировка восходит к книге Александра Мошковского «Альберт Эйнштейн: беседы с Эйнштейном о теории относительности и общей системе мира», опубликованной в 1921 году на немецком языке, и уже в следующем году (!) переведённой на русский язык (и, судя по каталогу РГБ, с тех пор её и не переиздавали; доступен английский перевод).
Истории
Найти вероятность выпадения k (сумма выпавших значений) при бросании n кубиков (часть 1 из 2)
Решение задачи и пояснение алгоритма: Есть n стандартных игральных костей (6-ти гранных кубиков) со стандартным обозначением всех граней от 1 до 6. Бросаем все n кубики разом. Нужно найти вероятность выпадения числа k, а именно суммы всех значений, выпавших на этих кубиках
14 задач по Kotlin lists, которые заставят вас подумать
Привет Хабр! Меня зовут Леонид Иванькин, я ведущий Android-разработчик в МТС Digital, работаю над приложением Мой МТС. В этой статье – сложные и не очень задачи, чтобы проверить, насколько хорошо вы разбираетесь в операторах для списков. Готовы испытать свои скиллы? Тогда переходите под кат!
Специальный календарь на 13 месяцев
Календари это давнее моё увлечение.
Тысячелетиями люди пользуются календарями. В разные времена и у разных народов календари были разными.
Календари обычно требовались для планирования сельхоз работ и проведения религиозных обрядов.
Календари основывались на каких-то природных периодических процессах. Лунный календарь имел в основе изменение вида Луны на небосводе. Солнечный календарь опирался на период обращения Земли вокруг Солнца – год. Год делили на промежутки в виде периода от новолуния до новолуния – месяц. Месяц делили на недели, а недели на дни. Получался лунно-солнечный календарь.
У шумеров недели не было. Месяц делили на дни.
У Майя в неделе было в одном календаре 13 дней, а месяцев в году восемнадцать. Это бытовой календарь. Был у Майя также религиозный календарь содержавший 260 дней, 20 месяцев и 13 дневных недель содержащих по 13 дней.
Не буду утомлять примерами календарей прошлого.
Постепенно официальным календарём в мире стал григорианский календарь, который всем хорошо известен. В этом календаре 365 – 366 дней, 12 месяцев, семидневная неделя. В России остался в употреблении и юлианский календарь (старый стиль), который применяется в церкви.
Календари создавались каменными, бумажными, механическими. Один из старейших механических календарей известен как антикитерский механизм.
Создавались «вечные» календари, представляющие собой бумажную таблицу, по которой можно было отслеживать даты в интервале 100 лет.
В наше время компьютерная техника позволяет создавать цифровые календари.
Математическое решение задачи о матрице «змейкой»
Настоящая статья продолжает тему предыдущей работы (https://habr.com/ru/post/560266/) и также посвящается особо извращенным способам заполнения двухмерных массивов согласно определенному шаблону. Создание громоздких, неуклюжих формул, без применения таких милых сердцу программиста конструкций как циклы и условия оказалось увлекательным занятием. В связи с этим, автор, уподобляясь некоторым государственным чинам (вспоминаем бородатую шутку про разницу между депутатом и программистом), решил потратить кучу драгоценного времени на очередной интересный, но, увы, бесполезный в практическом плане проект. Речь идет о вычислении математическим путем элементов массивов, заполняемых змееподобной траекторией, или проще говоря – «тещиных» матриц.
Различают два класса этих самых матриц: обычные (злобные) и диагональные (крайне злобные).
Первый класс двухмерных массивов (здесь и далее речь идет только о квадратных матрицах) заполняется натуральными числами от 1 до N2 с левого верхнего угла построчно:
Считаем, сколько заплатить в магазине и проверяем поле морского боя: разбор задач для разработчиков C#, iOS и Android
Привет, Хабр! Я Ани, отвечаю в Ozon Tech за обучение.
Сегодня поводом для поста на столь многоуважаемую аудиторию стал разбор задач контеста, который прошёл в рамках отбора участников на курсы Route 256.
Контест нам заменяет скрининг — мы проверяем технические навыки и опыт работы будущих участников, так как курсы рассчитаны на мидлов.
Ранее мы публиковали разбор задач по направлениям Go и QA (раз, два), пришло время поделиться задачами для C#, iOS (Swift) и Android (Kotlin, Java).
В этот раз нам посчастливилось провести контест совместно с Codeforces, и, судя по фидбеку участников, задачи зашли на ура. Надеюсь, разбор будет полезен и вам. А если захотите попробовать свои силы и попасть на курс, ищите ссылку на регистрацию ниже.
Язык-головоломка Marthue
Предлагаю читателям Хабра "эзотерический" язык программирования, обобщающий нормальные алгоритмы Маркова (НАМ) и полусистемы Акселя Туэ (semi-Thue systems). В языке есть возможность интерактивного ввода и вывода, выбора поиска замены подстрок с начала, конца строки или случайным образом, условного рекурсивного вызова одного блока подстановок из другого, а также условного перехода между блоками. Это позволяет совмещать подстановку строк с элементами императивного и даже функционального программирования, а также исследовать недетерминированные алгоритмы.
Интерпретатор написан под Линуксом на языке Common Lisp, который я считаю одним из самых мощных и удобных, в том числе для экспериментальногого программирования. При желании большого труда не составит переписать его на любом популярном языке: например, сделать онлайновую версию в Javascript. Просто для запуска программ Лисп знать практически не нужно: достаточно инсталлировать любую версию Common Lisp и ввести нужный файл парой простых функций. Скачать репозиторий интерпретатора Marthue можно здесь.
Как рисовать с помощью SQL?
Видимо я сделала какое-то очень плохое зло, поэтому живу во время перемен. Справиться с эмоциями и повысить конкурентоспособность на рынке Data Enigneer’ов мне помогает сайт Hackerrank. На пути к решению вообще всех задач по SQL с этого сайта мне попалась задачка на нетривиальные запросы.
В задачке требовалось звёздочками нарисовать прямоугольный треугольник...
Как я hiddenkeywords проходил
Продолжаем проходить различные "квесты" и "пазлы" на просторах интернета. На этот раз в руки мне попался https://hiddenkeywords.com/ Это испытание было создано студией Propellernet - студия маркетингового консалтинга из Англии.
Если ты не боишься спойлеров, то добро пожаловать.
Медианы, подмассивы и времена года: ещё порция задач для QA-инженеров
Ближайшие события
Случайные блуждания и цепи Маркова в геймдизайне
Так уж повелось, что знание математики редко считают необходимым для работы геймдизайнером — а если оно и требуется, то школьной программы хватит. Чаще всего так и есть. Но иногда знание определенных концепций и методов из вышмата может упростить жизнь и помочь иначе взглянуть на проблему.
Всем привет, меня зовут Лев, я геймдизайнер из WhaleKit. И в этой статье мы разберем две математические концепции: цепи Маркова и случайные блуждания. Сразу замечу, что статья скорее «поп», чем «науч», поэтому часть доказательств выведенных формул будет опущена. После теории мы перейдем к реальным кейсам, где эти инструменты могут пригодиться, например:
1. Сколько сундуков откроет игрок, если из сундуков могут выпасть еще сундуки;
2. Сколько золота уйдет на прокачку меча, если меч может ломаться;
3. Какая вероятность победить в денежном поединке.
Интеллектуальный брутфорс: пишем головоломку и солвер для неё
Небольшое предисловие
В колледже я много играл в головоломки. В статье под головоломками я буду подразумевать очень узкое подмножество таких игр. Вот некоторые из примеров:
Также мне посчастливилось изучать структуры данных в Политехническом институте Ренсселера, где в то время студенты профессора Катлера (привет, Барб!) ежегодно участвовали в соревновании по написанию солвера головоломок. Каждый год игра менялась, и в мой год это была Ricochet Robots, которая по сути является головоломкой со скольжением по льду для нескольких игроков. Мне очень понравилось это задание (и я победил в соревновании!), после чего я продолжил участвовать в соревнованиях в качестве ассистента преподавателя.
Цель этой задачи заключалась в том, чтобы познакомить всех с рекурсией и поиском в глубину. Программе передавались исходное состояние игры, а также максимальная глубина рекурсии. Необходимо было вернуть или кратчайшее решение или все возможные решения минимальной длины. В соревнованиях игрокам могли или сообщать, или не сообщать предел глубины; кроме того, возможны были головоломки, не имеющие решения. Я многому научился и получил кучу удовольствия, так что, возможно, вам это тоже понравится.
Лучший технический вопрос, который мне задавали на собеседовании
Много воды утекло с тех пор, как я в последний раз участвовал в собеседовании по программированию как соискатель. Но до сих пор помню особенно полюбившийся мне вопрос с такого собеседования. Дело было в MemSQL, году так в 2013. (Они даже успели переименоваться, поэтому, полагаю, конкретно этот вопрос они на собеседовании уже не задают. Не чувствую вины за то, что выдаю его. Это отличная история, которая также кажется мне поучительной; просто раньше я о ней никогда не писал).
Окей, вообще, это даже не вопрос как таковой, это программерская задачка на засыпку. Не помню, сколько времени мне на нее дали. Скажем, три часа, считая время, потребовавшееся на постановку задачи.
Поскольку компания MemSQL разрабатывала базу данных, этот челлендж из той же оперы.
Города, инверсии и логистика: разбор задач для QA-инженеров
Маски, картины, тайные покупатели и анализ продаж: разбираем решения задач для Go-разработчиков
Методисты All Cups совместно с организаторами разработали алгоритмические задачи, добавив актуального контекста. Здесь много любителей головоломок: предлагаем попробовать свои силы в задачах и сравнить с решениями.
Применение онтологии к решению практических задач ИБ (часть 1)
В мире каждый день появляется много нового, все чаще возникают новые предметные области, о возможности появления которых мы даже не задумывались еще несколько лет назад. При этом старые предметные области уходят, не выдержав конкуренции. Каждая предметная область характеризуется прежде всего специальными знаниями, описывающими объекты этой области и их свойства. Практическое использование таких знаний является уделом экспертов. Собственно, в обладании такими знаниям и состоит профессиональная компетентность эксперта. Однако оставаться всезнающим экспертом в наши дни становится все сложнее...
Ностальгируем и решаем: задачи с Первой Международной Математической Олимпиады IMO 1959 года
- 40 первых лет лидировал СССР, основным конкурентом была… Венгрия.
- Китай врывается в этот чарт только в 1989 году, а к 2001 обгоняет Венгрию (население <10 млн человек), в 2003 обгоняет СССР.
- Америка появляется в этом чарте в 1974 году, в 2005 догоняет Венгрию и селится на второй позиции.
- Северная Корея была дважды исключена за читерство 1991 и 2010 годах.
- Россия к 2011 году (за 20 лет присутствия в рейтинге, без учета медалей СССР) нагоняет и Венгрию и СССР и врывается на 3 место.
- Если посчитать по-честному, то СССР+Россия должны быть на первом месте всегда.
- 6-16 июля 2022 года в Осло, в Норвегии, состоится 63-я Международная Математическая Олимпиада.
Сейчас в олимпиаде участвуют более 100 стран, в которых живет 90% населения Земли. От каждой страны участвуют 6 школьников. Олимпиада проходила каждый год, кроме 1980, когда она была отменена из-за внутренних раздоров в Монголии.
Изначально олимпиада была организована странами-участниками Варшавского договора, но потом к олимпиаде присоединились и другие страны.
Lisa Sauermann, Reid W. Barton, Nicușor Dan and Ciprian Manolescu выиграли по несколько медалей, Григорий Перельман, Terence Tao, Ngô Bảo Châu и Maryam Mirzakhani стали выдающимися математиками, а некоторые получили Филдсовскую премию.
Первая олимпиада проходила в Румынии, в Бухаресте, и в ней принимали участие школьники всего из 7 стран: 46 мальчиков и 6 девочек.
Под катом судьба победителей олимпиады 1959 года и текст задач с решениями.
Вклад авторов
OsipovRoman 842.8samsergey 689.0NWOcs 627.0alizar 621.5itmo 610.0haqreu 577.0AKlimenkov 563.0Kelbon 457.0sannikovdmitry 329.0