Pull to refresh
6
0
Send message

Perfect shuffle

Reading time7 min
Views19K

Меня всегда привлекали элементарные алгоритмы, с помощью которых можно создавать сложные паттерны. Есть в таких алгоритмах что-то фундаментальное. Один из таких алгоритмов — Perfect Shuffle. Посмотрим на его необычные свойства, а также попробуем нарисовать несколько впечатляющих фракталов с помощью этого алгоритма.

Дальше много картинок, gif-анимации и немного музыки.
Total votes 62: ↑60 and ↓2+58
Comments19

Реализация «Тетриса» в игре «Жизнь»

Reading time39 min
Views38K
То, что начиналось как приключение, закончилось одиссеей.

image

Задача по созданию тетрис-процессора размером 2 940 928 x 10 295 296


Этот проект стал кульминацией труда множества пользователей в течение последних полутора лет. Хотя состав команды со временем менялся, в написании этой статьи принимали участие следующие авторы:

  • PhiNotPi
  • El'endia Starman
  • K Zhang
  • Muddyfish
  • Kritixi Lithos
  • Mego
  • Quartata

Также мы хотим поблагодарить 7H3_H4CK3R, Conor O'Brien и многих других пользователей, вложивших свои труд в решение этой задачи.

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

Стоит также заглянуть в GitHub нашей организации, в котором мы выложили весь код, написанный для решения задачи. Вопросы можно задавать в нашем чате разработки.
Читать дальше →
Total votes 166: ↑166 and ↓0+166
Comments47

Яндекс.Блиц. 12 алгоритмических задач отборочного раунда и их разборы

Reading time18 min
Views108K

В конце сентября мы рассказывали, что решили попробовать провести контест, где желающие могут потренироваться в решении задач, максимально приближенных к «боевым». Так участники могут понять, какого формата задания получают разработчики на собеседованиях в Яндексе (этим интересуются очень многие), а самое главное — с чем они сталкиваются, работая над Поиском. Типичная задача на собеседовании — составить алгоритм, доказать его корректность, предложить пути оптимизации. Если человек разбирается в алгоритмах, то он быстро сумеет их реализовывать на любом доступном ему языке.


В Блице можно использовать Java, C++, C# или Python. Кроме того, участие в контесте дает возможность проверить свои знания. Если в итоге вы понимаете, что их стоит подтянуть, — это тоже результат. Кстати, тогда вам может пригодиться специализация на курсере «Алгоритмы и структуры данных», в создании которой Яндекс участвовал.


image


Давайте теперь разберем задачи, которые предлагались в отборочном раунде. У нас было несколько одинаковых по сложности вариантов, каждый из которых содержал по шесть задач. Мы разберем один набор задач полностью, а также наиболее интересные задачи из других наборов. К слову, из 1762 участников квалификационного раунда в финал прошли лишь 263. Так что задачи оказались не самыми простыми.

Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments18

Хаскель — ход конем II

Reading time8 min
Views7.9K
image

Во второй статье я бы хотел продолжить начатую тему и рассмотреть задачу нахождения циклического маршрута при заполнении квадратов NxN ходом коня. Но в комментариях к первой статье подсказали интересную эвристику, за что комментаторам большое спасибо, и эту подсказку, безусловно, стоит рассмотреть подробнее. Идея известна как правило Варнсдорфа и требует из списка возможных ходов в первую очередь выбирать ход с наименьшим количеством продолжений.
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments14

Чтение на выходных: 17 независимых блогов по математике, алгоритмам и языкам программирования

Reading time5 min
Views58K
Сегодня мы подготовили очередную [наш IaaS-дайджест и материалы по структурированию кода] подборку полезных источников. На этот раз мы решили изучить тематическую ветку на Hacker News и рассказали о блогах, которые могут хорошо дополнить чтение «Хабра».

Авторы данных блогов готовят как материалы для новичков с туториалами и разъяснениями основ, так и более углубленные статьи и исследования. Всех заинтересовавшихся приглашаем под кат.

Disclaimer: мы решили разбить подборку на несколько частей в соответствии с тематическими потоками и хабами. Начнем с блогов по математике, алгоритмам и языкам программирования, а в следующих выпусках перейдем к веб-разработке и дизайну.

Читать дальше →
Total votes 25: ↑21 and ↓4+17
Comments1

Геометрия данных 1. Симплексы и графы

Reading time11 min
Views21K
Звездное небо напоминает, — точки являются фундаментальной абстракцией, основой окружающего пространства.



Введение


Это первая статья серии, посвященной описанию свойств базисов пространств на основе элементов (а не векторов). Базис определяет систему координат — описание элементов пространства в виде набора чисел, характеризующих положение элемента относительно базиса.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments23

Иллюзия движения

Reading time17 min
Views68K
История о чувстве зрения, восприятии кадров и частоты обновления, размытости движущегося объекта и телевизионных экранах.
(также см. перевод статьи того же автора «Иллюзия скорости» — прим. пер.)

Введение


Вы могли слышать термин кадры в секунду (FPS), и что 60 FPS — действительно хороший ориентир для любой анимации. Но большинство консольных игр идут на 30 FPS, а кинофильмы обычно записывают на 24 FPS, так зачем же нам стремиться к 60 FPS?

Кадры… в секунду?


Ранние времена кинопроизводства



Съёмки голливудского фильма 1950 года «Юлий Цезарь» с Чарлтоном Хестоном

Когда первые кинематографисты начали снимать кино, многие открытия делались не научным методом, а путём проб и ошибок. Первые камеры и проекторы управлялись вручную, а плёнка была очень дорогой — настолько дорогой, что при съёмке старались использовать наименьшую возможную частоту кадров, лишь бы сэкономить плёнку. Этот порог обычно находился между 16 и 24 FPS.
Читать дальше →
Total votes 89: ↑89 and ↓0+89
Comments51

Сложно ли сделать из мухи слона?

Reading time3 min
Views12K
Недавно, перед тем как написать про свои соображения о путях развития ИИ, решил посмотреть, что уже писали об ИИ на Хабре. В числе прочих наткнулся на статью с довольно сложным решением (через генетический алгоритм) широко известной задачи поиска метаграмм: дано два слова (существительных) одинаковой длины, нужно получить из первого второе, меняя только одну букву и получая при этом имеющее смысл слово.


Сальвадор Дали. Искушение св. Антония. 1946. (Фрагмент).
Бельгийский Королевский музей изящных искусств (Брюссель).

Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments29

Уравнение Пуассона и распределение Больцмана (часть 1)

Reading time4 min
Views12K
В продолжение предыдущей статьи «Есть ли плазма в космосе?» я хотел бы в познавательных целях рассказать об уравнениях, которые применялись при выводе уравнения Дебая-Хюккеля. Это уравнение Пуассона и распределение Больцмана.

Уравнение Пуассона

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

$F = k \frac{q_1 q_2}{r^{2}_{12}}$


где $q_1, q_2$ – величины взаимодействующих точечных зарядов, $r^{2}_{12}$ – квадрат расстояния между зарядами. Коэффициент k является константой. Если мы используем систему в электростатических единицах СГС, обозначаемых СГСЭq, то k = 1. Если используется система СИ, то $k = \frac{1}{4 \pi \epsilon \epsilon_{0}}$, где $\epsilon$ – диэлектрическая проницаемость среды, в которой расположены заряды, $\epsilon_0$ – электрическая постоянная, равная 8,86 ∙ $10^{-12} м^{-3} кг^{-1} c^4 F^2$.
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments12

Эзотерический язык, транслирующийся в шаблоны C++

Reading time23 min
Views20K
КПДВ с примерами кода Шаблоны C++ — полный по Тьюрингу язык, на котором можно писать compile-time программы. Только вот синтаксис рассчитан на описание параметризованных типов и слабо приспособлен к ясному выражению чего-то более сложного. В этой статье рассмотрим, как типы и шаблоны становятся значениями и функциями, а также узнаем, к чему привела попытка автора создать свой функциональный язык, транслирующийся в шаблоны C++. Для прочтения текста знания в области функционального программирования почти не требуются.
Читать дальше →
Total votes 59: ↑59 and ↓0+59
Comments10

Спектроскоп-калейдоскоп

Reading time4 min
Views6.5K
Это заметка о том, что на основании алгоритма генерации спектров (о котором было рассказано в статье «Спектроскоп Салтана...») создан тестовый сервис, обратиться к которому может любой желающий.

Под катом — инструкция по использованию сервиса и его возможностей.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments4

Создание языка программирования с использованием LLVM. Часть 1: Введение и лексический анализ

Reading time7 min
Views58K
Добро пожаловать в учебник «Создание языка программирования с LLVM». Этот учебник знакомит вас с созданием простейшего языка программирования, и при этом показывает, каким оно может быть легким и интересным, а также даёт вам начальные знания, которые вы затем сможете применить на других языках программирования. Код в этом учебнике также может быть использован в качестве стартовой площадки для ваших творений с помощью LLVM.

Целью данного учебника является постепенное представление нашего языка, описание его пошагового создания. Это позволит нам охватить достаточно широкий спектр вопросов проектирования языков и использования LLVM, попутно показывая и объясняя код без огромного количества ненужных деталей.
Читать дальше →
Total votes 65: ↑61 and ↓4+57
Comments28

Математический пакет для Android — «Микро-Математика» — теперь с открытым исходным кодом

Reading time3 min
Views15K

Некоторое время назад я писал здесь о «Микро-Математике» — математическом пакете для Android, который я разработал в качестве хобби-поделки. Этим летом исполняется три года с тех пор, как «Микро-Математика» была выложена в Google Play на всеобщее обозрение. С тех пор программа развивалась дальше, и вот настал момент, когда доход от Google Play окупил разработку. В связи с этим я не вижу смысла дальше утаивать исходный код от общественности и перевожу проект в разряд Open Source. Тех, кому интересно познакомиться с репозиторием «Микро-Математики» на github, и, быть может, поучаствовать в дальнейшем развитии проекта, прошу под кат.

Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments20

Интерфейс vs interface

Reading time7 min
Views30K

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


Часто сложность в понимании принципа "программируйте на уровне интерфейса" кроется в концентрации на инструменте, а не на смысле. Из-за наличия в Java ключевого слова interface, происходит искажение понимания принципа, и он превращается в "программируйте, используя interface". Так как в Python инструмент в виде ключевого слова interface отсутствует, некоторые питонисты пропускают этот принцип.


В книге Банды Четырех примеры приводятся на Smalltalk и C++. Оба этих языка не имеют ключевого слова interface, но это не мешает авторам применять принцип, используя имеющиеся в распоряжении конструкции языка:


У манипулирования объектами строго через интерфейс абстрактного класса есть два преимущества:

  • клиенту не нужно иметь информации о конкретных типах объектов, которыми он пользуется, при условии, что все они имеют ожидаемый клиентом интерфейс;
  • клиенту необязательно "знать" о классах, с помощью которых реализованы объекты. Клиенту известно только об абстрактном классе (или классах), определяющих интерфейс.


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

Но даже приведенные в цитате преимущества не являются единственными, если посмотреть на принцип под более широким углом.

Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments7

Идеальная домашняя сеть или «сам себе злобный перфекционист»

Reading time15 min
Views63K

Мудрость Бертрама Гилфойла
«Соник Уолл Соник Пойнт Эй-Си-И» вместе с «Ти-Зи 600» — самый передовой фаерволл, встроенная защита от атак, дешифратор SSL, анализатор управления приложениями и фильтрация контента.

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

Как говорит технический директор Qrator Labs Артём ximaera Гавриченков, DDoS-mitigation начинается там, где заканчиваются силы и время одного хорошего системного администратора.

В день системного администратора, который в Qrator Labs считают профессиональным праздником даже больше, чем день программиста, мы задумались — о чём таком можно было б рассказать на Хабре, с чем точно сталкивался каждый?..

Решение было найдено быстро, ведь есть такое место, где каждый человек может побыть системным администратором в любой удобный, а порой и неудачно-вынужденный, момент времени — дома.
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments32

Незабытые технологии: паровозы

Reading time6 min
Views46K


Существует немало технологий, обычно ассоциируемых у нас с прошлым и даже с позапрошлым веком, но, тем не менее, всё ещё используемых в жизни. Одни из них представляют лишь исторический интерес, другие ещё широко используются, но в скором времени окончательно уступят своё место современным аналогам, третьи же прочно заняли свою узкую нишу и не собираются сдавать позиции. Большинство этих технологий неэкономичны и сложны в использовании – в этом их слабость. Но есть у них и сильные стороны: это внутренняя простота, лёгкость изготовления и независимость от современной энергетической и информационной инфраструктуры.

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

Но даже если они не имели бы вообще никаких преимуществ, их всё равно нужно было бы сохранить по крайней мере из исторических и эстетических соображений. Прошлое не исчезает – оно живёт рядом с нами, и в его сплетении с будущем рождается наше настоящее.
Total votes 31: ↑29 and ↓2+27
Comments186

Как мы упоролись и откалибровали кофе-машину на спектрофотометре

Reading time7 min
Views62K


Однажды, посреди рабочего дня мы внезапно осознали, что мы больше не можем так жить. Душа требовала совершить что-то бессмысленное и беспощадное во имя науки. И мы решили откалибровать кофе-машину. Нормальные люди тыкают в дефолтную кнопку и пьют все, что вытечет из кофеварки. Чуть более продвинутые для этого открывают инструкцию и тщательно ей следуют. Может быть еще читают рекомендации обжарщика, если конечно это не прогорклые noname зерна, которые пару лет лежали на безымянном складе. Нас к нормальным можно отнести с большой натяжкой, поэтому мы решили идти своим путем. Короче говоря, под легкой кофеиновой интоксикацией от седьмой чашки эспрессо мы решили задействовать весь возможный арсенал лаборатории, чтобы получить эталонный напиток.

Добро пожаловать в мир безумия, ультрацентрифуг, спектрофотометрии кофе в специальных планшетах и небольшого количества python, pandas и seaborn, чтобы визуализировать все это безобразие.
Total votes 182: ↑180 and ↓2+178
Comments132

Постквантовая реинкарнация алгоритма Диффи-Хеллмана: прошлое и настоящее

Reading time11 min
Views15K

Как известно, последняя революция в криптографии случилась в 1976 году из-за статьи “New Directions in Cryptography” американских ученых Уитфилда Диффи (Whitfield Diffie) и Мартина Хеллмана (Martin Hellman).

Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments8

gdb-дуэль — списки, деревья и хэш таблицы против командной строки

Reading time6 min
Views9.3K

Первый раз я увидел команду duel в gdb на каком-то древнем IRIX-е, лет пятнадцать назад. Это была невероятно крутая штука для просмотра разных связанных списков, массивов структур, и прочих подобных конструкций. Помечтал, мол, если б в Линуксе такая была, и забыл. Лет десять назад вспомнил, погуглил — оказалось, что DUEL, это вообще-то патч 93-го года для gdb 4.6, а вовсе не что-то уникальное в IRIX. Только автор по идейным соображениям выпустил его как public domain, а gdb-шники были тоже идейные и хотели GPL, так что попасть в upstream этому патчу не грозило. Я портировал его на тогдашний gdb 6.6.2, отдал в gentoo и до выхода 7-го gdb наслаждался жизнью. Потом duel из gentoo выкинули, портировать на новый gdb было сложно, никто не взялся. А недавно я его попробовал оживить. Только вместо патча (надо собирать вместе с gdb из исходников, использует всякие внутренние gdb-шные функции) я его написал с нуля на питоне. Теперь Duel.py (так называется новая реализация Duel-а) грузится в gdb на лету, и, надеюсь, Python API не будет меняться от версии к версии так, как недокументированные gdb-шные потроха. Итак, встречайте: DUEL — высокоуровневый язык анализа данных для gdb.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments16

Типизируя техническое интервью

Reading time9 min
Views9.3K

Предлагаю читателям "Хабрахабра" перевод статьи Kyle Kingsbury, a.k.a "Aphyr".
Ранее: Заклиная техническое интервью


В прежние времена, задолго до восхода Церкви, все заклятья произносились по чистому случаю, все действия были разрешены, а смерть была обыденностью. Многие ведьмы покалечились из-за своей магии, их находили изломанными в центре круга искривленных, застеклившихся деревьев и горящих камней, не гаснущих даже под водой; некоторые полностью исчезали, или начинали путешествовать по горным перевалам, никогда не касаясь ногами земли, никогда не согревая воздух своим дыханием.

Читать дальше →
Total votes 27: ↑20 and ↓7+13
Comments7

Information

Rating
Does not participate
Location
Paris, Paris, Франция
Registered
Activity