Как стать автором
Обновить
0

Кодобред

Код, за который должно быть стыдно

Сначала показывать
Порог рейтинга
Уровень сложности

Поиск в ширину (BFS) на С#

Время на прочтение4 мин
Количество просмотров47K
Сразу скажу, что статья больше подойдёт людям, желающим познакомиться с поиском в ширину, и новичкам, осваивающим программирование. К тому же, когда мне понадобился этот метод, я нигде не нашёл наглядного рабочего примера на C#.

Устно об алгоритме:

Разберём алгоритм на произвольном графе (для простоты примера рёбра не имеют вес).

Последовательность алгоритма заключается в следующим:

1. Выбирается произвольно вершина графа (отмечается серым).
2.Последовательно рассматриваются вершины (так же отмечаются серым), связанные с нашей первой вершиной (после этого она становится не серой, а чёрной).
3. Выполняется пункт 2 для отмеченных (серых) вершин до тех пор, пока все вершины не будут закрашены чёрным.


Читать дальше →
Всего голосов 16: ↑6 и ↓10-4
Комментарии3

Полная кастомизация select без использования JS

Время на прочтение4 мин
Количество просмотров83K
imageСколько я не мучил поисковик, а решения этого вопроса так и не нашлось. Конечно, всегда можно использовать JS и это нормально, но иногда заказчик душа просит изысков.
Читать дальше →
Всего голосов 47: ↑40 и ↓7+33
Комментарии90

Вычисление средней температуры по больнице

Время на прочтение14 мин
Количество просмотров19K
Статистика
Начать стоит с того, что это, статья совершенно не серьёзна. Новый год, праздник, сил никаких нет заниматься чем-то серьёзным как писателям, так и читателям. Именно поэтому было принято решение о написании статьи про, внезапно, статистику.
Читать дальше →
Всего голосов 44: ↑33 и ↓11+22
Комментарии20

Как растаращить class-файл

Время на прочтение4 мин
Количество просмотров44K
Обычно при компиляции Java-файла получаются .class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать .class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре. Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Читать дальше →
Всего голосов 111: ↑106 и ↓5+101
Комментарии63

Истории

Язык программирования Petooh

Время на прочтение1 мин
Количество просмотров110K
Пользователь Github с ником Ky6uk после трех лет разработки наконец-то опубликовал фундаментально новый (дословно) язык программирования Petooh. Это диалект Brainfuck, в котором непонятные и неудобные символы заменены на человекочитаемые слова. Для исполнения кода используются скрипты на Haskell и Perl, на выбор пользователя. Из прочих примеров творчества автора можно упомянуть разве что табурет, написанный на Javascript

Пример кода:
Скрытый текст
KoKoKoKoKoKoKoKoKoKo Kud-Kudah
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
KoKoKo Kud-Kudah
kOkOkOkO kudah kO kud-Kudah Ko Kukarek kudah
KoKoKoKo Kud-Kudah KoKoKoKo kudah kO kud-Kudah kO Kukarek
kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO
Kukarek
Всего голосов 89: ↑34 и ↓55-21
Комментарии27

Сериализация C++ с полиморфизмом и прототипами

Время на прочтение6 мин
Количество просмотров20K
Уже достаточно давно заинтересовался темой сериализации, а если конкретно, то сериализацией объектов, хранящихся по указателю на базовый класс. Например, если мы хотим загружать интерфейс приложения из файла, то скорее всего нам придется заполнять полиморфными объектами контейнер по типу “std::vector<iWidget*>”. Возникает вопрос, как подобное реализовать. Этим я недавно решил заняться и вот что получилось.

Для начала я предположил, что нам все-таки придется унаследовать в базовом классе интерфейс iSerializable, такого вида:

class iSerializable
{
public:
    virtual void serialize (Node node) = 0;
};
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии18

Код, которого нет

Время на прочтение7 мин
Количество просмотров89K
Привет, хабравчане!

Около года назад Хабр захлестнула волна постов на тему "%string% в N строчек на JavaScript". Уже и не вспомню, чем все закончилось, но началось все с «Excel в 30 строк». Следом появилось много и других интересных вариаций на эту тему, даже игра в ноль строк на JS, но это уже совсем другая история…

Как я ни старался придумать что-то еще более компактное — ничего не выходило. Тогда было принято решение посмотреть на проблему под другим углом. Примерно в этот момент в голове промелькнул вопрос: а можно ли «сколлапсировать» код так, чтобы его не было вообще? И тут мне позвонил Дэвид Блейн.

Я попробовал добавить немного магии и вот что у меня получилось.

image
Сим салабим!
Всего голосов 125: ↑111 и ↓14+97
Комментарии57

Elementary OS. Наводим чистоту и порядок в Applications

Время на прочтение7 мин
Количество просмотров96K
Здравствуйте!

Когда впервые зашла на хабр, поняла, что я дома. Home, Sweet Home.…
Всё не решалась написать. Вот, решилась! Пишу. Хорошо иль плохо, но пишу.



Меня всегда удручал беспорядок в [… всюду, не люблю беспорядок… ] в меню приложений Mandriva, Suse, Ubuntu, Elementary OS (Решила перечислить их в порядке использования. Пишу и ностальгирую). Конечно, ситуация одинакова для поголовного большинства дистрибутивов, так как информацию о том, как и где показывать программу прописывают сами создатели этих программ в *.desktop файлах. И многих из них похоже не волнует тот беспорядок, который происходит от такого халатного отношения к логике построения навигации.

Решила я это исправить. Давно давно давно, страшно давно. И через время, давно… Таки исправила. А вам решила и собралась показать только сейчас.
Подробно
Всего голосов 199: ↑134 и ↓65+69
Комментарии120

Книги по программному коду

Время на прочтение2 мин
Количество просмотров33K
Привет Хаброжители!
Издательство Питер решило вспомнить о хороших, но забытых книгах по чистому коду:

image

1. Чистый код: создание, анализ и рефакторинг. Библиотека программиста — Р. Мартин
2. Идеальный код — Э. Орам, Г. Уилсон
3. Читаемый код, или Программирование как искусство — Д. Босуэлл, Т. Фаучер
Читать дальше →
Всего голосов 22: ↑19 и ↓3+16
Комментарии4

Эзотерические сортировки Дэвида Морган-Мара

Время на прочтение6 мин
Количество просмотров28K


Планировал написать про чё-нибудь эдакое мегаумное, если не про чётно-нечётную сортировку слиянием Батчера, то, на худой конец, про сортировку декартовым деревом. Но потом вспомнил, что грядёт череда торжеств, а значит стоит предложить что-нибудь праздничное, я бы даже сказал — легкомысленное.

Сплошная алгоритмическая эзотерика
Всего голосов 44: ↑40 и ↓4+36
Комментарии14

[Неочевидные алгоритмы очевидных вещей] Алгоритм 2. Принадлежность точки треугольнику в пространстве

Время на прочтение2 мин
Количество просмотров24K
Серия постов [Неочевидные алгоритмы очевидных вещей] будет содержать алгоритмы действий, которые кажутся очевидными и простыми, но если задать себе вопрос «как это делается?», то ответ является далеко не очевидным. Разумеется, все эти алгоритмы можно найти в литературе. Под катом располагается алгоритм определения принадлежности точки P треугольнику ABC в пространстве.
Читать дальше →
Всего голосов 52: ↑16 и ↓36-20
Комментарии16

[Неочевидные алгоритмы очевидных вещей] Алгоритм 1. Корень квадратный

Время на прочтение1 мин
Количество просмотров29K
Серия постов [Неочевидные алгоритмы очевидных вещей] будет содержать алгоритмы действий, которые кажутся очевидными и простыми, но если задать себе вопрос «как это делается?», то ответ является далеко не очевидным. Разумеется, все эти алгоритмы можно найти в литературе. Под катом располагается алгоритм вычисления корня квадратного числа X.

Читать дальше →
Всего голосов 75: ↑41 и ↓34+7
Комментарии25

Прямые в гексагональном растре

Время на прочтение4 мин
Количество просмотров11K
Данное исследование не претендует на оригинальность, я полагаю, что на самом деле изобретаю велосипед, но никаких деталей от него при (признаю, довольно поверхностном) изучении интернета мне найти не удалось.

Понаблюдав за разнообразными игрушками, передвижение персонажей в которых производится на плоскости, вымощенной правильными шестиугольниками, меня зацепил вопрос — а как должна выглядеть прямая на такой плоскости. Собственно, задача оптимального перемещения персонажа из шестиугольника A в шестиугольник B (подразумеваю, что на плоскости нет препятствий, под оптимальным перемещением подразумеваю такое, чтобы оно происходило через наименьшее количество шестиугольников) может быть решена кучей разных способов, маршрут далеко не единственен, так же, как, впрочем, и на плоскости, покрытой квадратами. Но мне хотелось бы, чтобы маршрут был приближен к отрезку прямой, как приближено к отрезку прямой изображение, построенное по алгоритму Брезенхэма, и в то же время реализация должна быть достаточно прозрачной и простой.
Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии23

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Скрипт проверки наличия свободных дат в посольстве

Время на прочтение7 мин
Количество просмотров75K
Предисловие:

В Беларуси стоит острая проблема с получением виз в Еврозону (т.е. Шенген). Все из-за того, что Польское посольство предоставляет так называемые мульти-визы за покупками (т.е. многократные). Регистрация производится на сайте посольства онлайн. Но вся проблема состоит в том, что свободных дат не словить. Единственный вариант — круглосуточно чекать страницу, и если появится дата — быстро «ловить» ее и заканчивать регистрацию. Т.к. свободного времени для круглосуточного чека нет, было принято решение об автоматизации данного процесса.
Сразу оговорюсь, что существуют различные скрипты, которые вылавливают свободные даты и за которые люди получают деньги. Мой скрипт не претендует на их место по быстроте, качеству и т.д. Данный скрипт был сделан только для себя, никакой коммерческой и иной выгоды я не преследовал.
Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии22

И снова сертификат Mail.ru

Время на прочтение1 мин
Количество просмотров59K
Напоминаю, начало истории тут.

На этой странице был обнаружен фишинговый баннер flash-плеера:
oracle-fl-player.com/update2.php (уже заблокирована, зеркало для файла)

Прошло уже три месяца, но ничего не изменилось. Файл подписан сертификатом LLC Mail.Ru. Если у них была утечка — они до сих пор его не отозвали, если утечки не было — какого черта?
Читать дальше →
Всего голосов 121: ↑100 и ↓21+79
Комментарии85

Что-то посложнее факториала

Время на прочтение14 мин
Количество просмотров28K
Давным-давно, когда трава была зеленее, а деревья выше, жил-был тролль, по имени Xenocephal. Жил он, в принципе, во многих местах, но мне повезло встретить его на одном форуме, где я, в то время, набирался ума-разума. Я уже не вспомню топика, в котором протекала беседа, но суть ее сводилась к тому, что Xenocephal пытался убедить всех окружающих, что Lisp (с его макросами) — всему голова, а C++, с его шаблонами, жалкое подобие левой руки. Также утверждалось, что наметапрограммировать в нем что-то сложнее набившего оскомину факториала не представляется возможным.
Читать дальше →
Всего голосов 65: ↑59 и ↓6+53
Комментарии47

Квадратное уравнение? Да раз плюнуть!

Время на прочтение4 мин
Количество просмотров81K
Бытует мнение, что только 10% программистов способны написать двоичный поиск. Это мнение мы испытывать не будем, но что насчёт квадратного уравнения?

Поставим задачу конкретнее: решение квадратного уравнения вида ax2+bx+c=0 с целочисленными коэффициентами. На вход подаются три целых числа в рамках int (коэффициенты a, b и c). Программа должна всегда выдавать результат.
Казалось бы, плёвое дело: пять минут и готово! И вот спустя те самые пять минут имеем на выходе следующий код:
Читать дальше →
Всего голосов 63: ↑29 и ↓34-5
Комментарии61

Читаем с экрана красиво

Время на прочтение6 мин
Количество просмотров18K


Лирика


Желаю доброго дня уважаемому Хабра-сообществу.

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

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

Видимо ностальгия ударила по мне, а может хроническая лень на секунду отпустила, но загорелся я идеей улучшить качество чтения различной литературы с монитора. Конечно каждый скажет – да кто сейчас читает-то с экрана? Вон устройств каких только не понавыпускали, пользуйся да ни о чем не волнуйся. Однако есть моменты, когда почитать хочется именно сию секунду, а качество оформления текста удручает.
О чем это я?
Всего голосов 19: ↑14 и ↓5+9
Комментарии8

SSH и FTP через Dropbox

Время на прочтение2 мин
Количество просмотров15K
Всем доброго хабрадня!

Сегодня я расскажу вам, уважаемые хабралюди, об одной бредовой идее, пришедшей в мою голову и даже воплощённой в жизнь.

Внимание! Всё нижеописанное не является руководством к действию и воспринимать это стоит не иначе как юмор. А то больно всерьёз все восприняли… =)

Для начала немного предыстории. Недавно возникла очень острая необходимость в ssh доступе на некоторый unix-based компьютер, дабы выполнить там svn diff > mypatch.diff и перекинуть результат по ftp. Но оказалось, что целевая машина по некоторым причинам не хочет пинговаться! Причём, по словам админов, и не предвидится пинг к ней, хотя выход в интернет она имеет. И я решил, что неплохо бы пробросить ssh через что-то стороннее. В голову сразу начали лезть VPN, reverse ssh, туннели и прочее. Но для большинства решений нужна дополнительная машина и/или дополнительный софт, либо это требует перенастройки самой сети (что для меня совсем не вариант — сеть-то не моя). Я уже готов был отчаяться и гуглить упорнее, но тут в мою не совсем здоровую голову пришла мысль: а что если заюзать дропбокс?
И вот что получилось...
Всего голосов 61: ↑47 и ↓14+33
Комментарии28

Цзяньшицзы и tcl

Время на прочтение4 мин
Количество просмотров5.1K
Есть такой редкий малоизвестный язык программирования tcl. В википедии он расписан хорошо, но при написании программы возникнут вопросы.
Цзяньшицзы — это такая китайская(судя по названию) игра, переводится как «выбирание камней», интересна сама по себе: есть две кучки камней с любым количеством камней, играют двое. Каждый игрок может взять любое число камней из любой кучи, а также равное количество сразу из обоих. Побеждает тот, кто возьмет последний камень. Более подробное описание тут. Игра на сохранение баланса: с одной стороны, нужно чтобы числа в кучах различались, с другой, чтобы различие было не слишком большим. Начнем с того, что игра имеет выигрышную стратегию, происхождение которой мы рассматривать не будем. Возьмем лишь краткое описание. Существуют сочетания размеров куч, при которых игрок, который будет делать следующий ход, проигрывает.




Квадратные скобки обозначают взятие целой части. Нет, первая формула — это не числа Фибоначчи, хотя коэффициент тот же, но тут арифметическая прогрессия, а не геометрическая. Сразу заметим, что разница между числами пары составляет n.

Ранее на хабре были Реверси на TCL в 64 строки и Пятнашки на TCL в 10 строк, в которых был компактный и красивый код, здесь вы такого не увидите. Также он, возможно, далек от правил хорошего тона. Вобщем, если вам что-то покажется говнокодом, скорее всего так оно и есть. С другой стороны, это даже хорошо, потому что будет что улучшать в дальнейшем. Отчасти из-за того, что язык для меня новый, отчасти чтобы было удобнее делать пояснения. Также отсутствуют необязательные проверки.
Далее будут идти куски программы. Она далеко не оптимальна, но показывает особенности языка и работает.
Читать дальше →
Всего голосов 7: ↑4 и ↓3+1
Комментарии15

Вклад авторов