войти зарегистрироваться

Персональные блоги Задача с погрешностью и переполнением

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

Суть задачи заключалась в следующем. Есть некое устройство (микроконтроллер), которое умеет обращаться только с 32-битными целыми значениями и не умеет работать с плавающей запятой.
На таком аппарате есть таймер, который в секунду генерирует 32768 тиков. Необходимо написать функцию, переводящую тики в миллисекунды без потери точности (желательно с округлением).

.NETC#: Этюды, часть 7

Сегодня простой этюд, почти без кода.

Допустим, есть некий класс и его статический конструктор:
static C()
{ Console.WriteLine("from static ctor"); }

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

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

Console.WriteLine("before static ctor");
// нужно вызвать здесь
Console.WriteLine("after static ctor");

.NETC#: Этюды от Эрика Липперта

Возможно, вам нравятся головоломки и C#, и, может быть, вы даже решали некоторые из них в моем блоге здесь, на Хабре.

Теперь у вас есть возможность попробовать свои силы в решении головоломок более высокого уровня.

Если вы не слышали о парне по имени Эрик Липперт, то очень советую почитать его блог. Эрик — один из разработчиков компилятора C# и часто пишет о разных необычностях и странностях в работе компилятора и среды исполнения .NET, а главное, объясняет причины такого поведения. Он пишет настолько интересно и увлекательно, что у его блога даже есть перевод на русский.

В своей записи от 8 июля Эрик дает ссылку на видео, в котором он и Neal Gafter (который также является одним из разработчиков платформы .NET) рассматривают несколько головоломок на языке C#. Пока я успел посмотреть только три из них, но мне уже нравится их уровень. (Внимание: за каждой головоломкой идет ответ, если хотите подумать самостоятельно, не забывайте нажимать на паузу)

Рекомендую всем, кто хочет расширить свой познания в C#/.NET.

UPD: поскольку с отображением видео есть определенные проблемы, можно скачать видео напрямую. Для этого идем сюда, вводим в строке поиска puzzlers и выбираем справа Download

UPD2: проблемы с воспроизведением видео на исходном сайте скорее правило, чем исключение, поэтому я залил файл на файлообменник: depositfiles.com/files/7ej8pu7zt

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

Итак, допустим есть здание высотой N этажей, а также m шариков. Известно, что при падении с n-го этажа или выше шарик разбивается, в то время как для n-1 этажа это неверно.

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

Для большей конкретики возьмём N=117, m=5.

UPDATE: в комментариях есть ответ для обобщённого случая.

Под катом подсказка.

Персональные блоги C#: Этюды, часть 6

Со времени последнего этюда прошло очень много времени, но я надеюсь, что хабраюзеры не успели утратить интерес к C#.

В этот раз задачка довольно простая, но новичкам в шарпе она может оказаться полезной. Есть следующий код:

Персональные блоги Задача

Озадачили простой задачей, ломаем голову всей комнатой.

Суть задачи: найти число, которое, если взять последнюю цифру и переместить в начало будет в два раза меньше получившегося числа. То есть, abcde * 2 = bcdea. Разрядность не ограничена.

Может кто-нибудь знает как решить, не прибегая к брутфорсу?

Блог компании REG.RUРазминка

Привет! Решили устроить для вас небольшое программерское состязание с призом. Суть состязания: решить задачку, которая выложена ниже. Приз — подарочный сертификат от Регистратора REG.RU на сумму 1 000 рублей. Победитель может ни в чем себе не отказывать ;)

Итак, приступим. Так как REG.RU занимается доменами и хостингом, задачка будет специфическая:
Напишите мини-мануал (пример кода) для конвертации имён доменов в / из Punycode из PHP. Исходная кодировка: cp1251 или utf8 (по выбору). Можно использовать сторонние открытые библиотеки.

Задача, как понимаете, не имеет одного ответа, вариантов может быть много. Поэтому победителем станет тот, кто предложит оптимальное решение. Оптимальное — это самое работающее, надёжное, понятное и лаконичное. Оценивать решения будут технические специалисты REG.RU.

Решения пишите прямо сюда, в комменты. У нас все открыто и прозрачно. А чтобы не затягивать процесс, давайте поставим срок приема результатов до 20.00 сегодня (реально задача на полчаса). После этого времени подводим черту и на следующий день объявляем победителя, которому торжественно будет активирован подарочный сертификат в размере 1 000 рублей на личный счет в REG.RU для заказа любых услуг ;)

ПС. Если решение-победитель будет предложено несколькими участниками состязания, то победителем будет признан тот, кто запостил свое решение первым. По справедливости.

Персональные блоги C#: Этюды, часть 5

Хабраюзеры нашли решение предыдущего этюда, но я решил вдобавок продемонстрировать свое (там же)

С внутренностями .NET пока остановимся, потому что придумать этюд на эту тему оказалось несколько сложнее, чем я думал: не хватает элемента неожиданности, ощущения «нерешаемости» задачи.

У сегодняшней задачки, надеюсь, с этим все будет в порядке :)

Персональные блоги C#: Этюды, часть 4

Продолжение, предыдущая часть здесь

Итак, сегодня мы с Вами с помощью молотка и лопаты попытаемся сделать трепанацию черепа влезть во внутренности .NET.

Имеется простейший класс: class X { public int Val; }. При создании объекта этого класса какой реальный размер он будет занимать? И какие значения будут содержать дополнительные поля? Предъявите доказательство в виде кода на C# ;)

.NETC#: Этюды, часть 3

В предыдущей части было предложено три разных по своей сути решения.

Сегодня — новая загадка, из области ASP.NET. Её основное отличие от предыдущих в том, что я столкнулся с ней в реальной ситуации, и пришлось потратить время, чтобы разобраться, в чем же дело.

Итак, на странице Test.aspx имеется код: