Code Golf

Feb 28, 2024 19:43

Хорошую задачу на алгоритмическое собеседование нашёл. Написать функцию, которая для натурального n выдаст количество «конечных» нулей в десятичной записи n! (эн факториал).
Над экзаменатором издеваться можно?

f:+/1_{x%5}\ f 1000 249
Короче не сумел :-)
Я понял только, что это не на брейнфаке :) Но это не точно.

( отсюда)
... Проблемы ( Read more... )

taglibro, ligiloj, tekniko

Leave a comment

Comments 38

phd February 28 2024, 16:53:16 UTC
Нужно считать двойки, пятёрки (FizzBuzz, ага) и нули. Но я этот fuck brain пропущу, и сразу перейду к PS.

PS. Я так понимаю, главная проблема ареоформирования Земли - это "где Земля, а где Марс?" Где Гея, а где Арес?…

PPS. "Почему белые медведи не едят пингвинов?" ;-)

Reply

slobin February 28 2024, 17:09:23 UTC
В принципе да, но двоек заведомо больше, чем пятёрок, поэтому достаточно посчитать пятёрки.

А проблемы, видимо, противоположны проблемам терраформирования Марса. Убрать куда-то лишнюю атмосферу, из оставшейся убрать лишний кислород, большую часть воды куда-то девать. Ещё всё это как-нибудь остудить немножко. Задачу уменьшить гравитацию, видимо, не ставим -- всё равно непонятно, как ещё решать, а к этой привыкнуть можно. Что ещё? От магнитного поля как-то избавиться? Периоды суточного вращения и наклоны осей у нас близкие, удобно.

Оффтопик: ты малайзийскую (на самом деле совместную) Войну Миров смотрел? Вот эту? Очень странная штука, но если любишь стимпанк, аниме и ретро-политические шуточки кагбе столетней давности, то вполне неплохо.

... Мой хвост отправился в Улан-Удэ ...

Reply

phd February 28 2024, 18:00:33 UTC
> В принципе да, но двоек заведомо больше, чем пятёрок, поэтому достаточно посчитать пятёрки.

Хорошая мысль. Но степени десятки всё равно придётся считать отдельно.

> А проблемы, видимо, противоположны проблемам терраформирования Марса. Убрать куда-то лишнюю атмосферу, из оставшейся убрать лишний кислород, большую часть воды куда-то девать. Ещё всё это как-нибудь остудить немножко. Задачу уменьшить гравитацию, видимо, не ставим -- всё равно непонятно, как ещё решать, а к этой привыкнуть можно. Что ещё? От магнитного поля как-то избавиться? Периоды суточного вращения и наклоны осей у нас близкие, удобно.

:-D

> Оффтопик: ты малайзийскую (на самом деле совместную) Войну Миров смотрел? Вот эту? Очень странная штука, но если любишь стимпанк, аниме и ретро-политические шуточки кагбе столетней давности, то вполне неплохо.

Не смотрел. Спасибо, учту.

Reply

slobin February 28 2024, 22:31:02 UTC
Не, двойки (и десятки) отдельно учитывать не надо вообще никак. Некоторую трудность составляет необходимость учитывать квадраты пятёрок, кубы пятёрок и так далее. Ладно, не хочешь, не надо, никто ж не заставляет. :-)

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

Reply


vitus_wagner February 28 2024, 17:19:08 UTC

Попереписываюсь с твоей фортуной.

Представил себе статью с названием "проблемы ареоформирования Земли" изданную этак перед Первой Мировой.

И в ней список литературы

А. Богданов "Красная Звезда"

К. Лассвиц "На двух планетах"

Г. Уэллс "Война миров".

А автор М.С. Лось.

Reply

slobin February 28 2024, 22:27:51 UTC
Вот Лассвица я как-то пропустил, спасибо.

Мы как-то в ЖЖ Белашей обсуждали некоторые возможные неувязки в "Аэлите" (от физики до политики), и какой фанфик из этого можно сделать. Жаль тебя там не было.

... Векторы прерываний были завязаны узлом ...

Reply

vitus_wagner February 29 2024, 04:34:13 UTC

Я его тоже совершенно неожиданно для себя недавно открыл, когда стал в связи с сюжетом про попаданку в революционную среду прорабатывать работы Коллонтай. А у нее там оказался обзор про женские образы во всякой литературе. Оттуда на Лассвица и вышел.

Reply


ichthuss February 28 2024, 17:56:14 UTC
А разве не "ареоморфирования"?

Reply

slobin February 28 2024, 23:04:51 UTC

Вроде "терраформирование" устойчивый термин.

... One who shaves on the run ...

Reply

murdalak February 29 2024, 03:01:02 UTC
"Полиамория должна вызывать отвращение у любого хоть сколько-нибудь нормального человека. Либо полифилия, либо мультиамория. А мешать греческий и латинский в одном слове это просто мерзко."

Reply

murdalak February 29 2024, 03:04:26 UTC
Хотя я бы сказала "мультамория", наверное. "Мультиамория" по латыни как-то неграциозно.

Reply


nasse February 29 2024, 06:09:17 UTC
Офф

... Ну как ты в приличном обществе покажешь на пальцах число 132? ...

А как предполагается делать это неприлично?

Я вроде знаю один приличный способ, но он непонятный. На пальцах можно считать "по-эльфийски", двенадцатиричная система, два разряда.

Reply

slobin February 29 2024, 06:15:01 UTC

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

... Берегитесь метафорической деформации! ...

Reply

nasse February 29 2024, 06:20:20 UTC
Ы!!!

Вот честно, не знала, что так можно. В восторге. Спасибо.

Тогда да, "эльфийский" вариант приличнее.

Reply


ald1976 February 29 2024, 10:22:23 UTC
C одной стороны глупо давать как задачу на программирование то, что легко делается на салфетке.

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

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

Reply

ichthuss February 29 2024, 10:59:26 UTC
А в чем проблема придумать эффективный алгоритм? Если убрать конечные нули, то последняя оставшаяся цифра вычисляется через произведение последних цифр оставшихся множителей с отбрасыванием старших разрядов. Эта цифра легко считается как произведение степеней двойки, тройки и семерки, так что достаточно посчитать эти степени (по модулю длины цикла).

Reply

ald1976 February 29 2024, 11:09:09 UTC
Ну попробуйте. Вдруг ваша изначальная идея не работает?

Например на числе 13 :)

13 много, 5 хватит. 5!=120 = 8*3*5; 8*3=24 --> 2=4!!!

Reply

ichthuss February 29 2024, 11:51:56 UTC
Ну пробую.

2*3*4*5*6*7*8*9*10*11*12*13
Убираем два нуля
3*4* 6*7*8*9* 11*12*13
Отбрасываем старшие цифры
3*4* 6*7*8*9* 1 * 2* 3
Раскладываем на степени 2,3,7
3 * (2^2) * (2*3) * 7 * (2^3) * (3^2) * 2 * 3
2^7 * 3^5 * 7
Периоды последней цифры степеней двойки, тройки и семерки - 4 (с исключением 2^4 неконгруэнтно 2^0), поэтому берем степени по модулю 4
2^3 * 3^1 * 7
Получаем последнюю цифру 8, как и должно быть.

Все степени при 2, 3 и 7 ведут себя совершенно предсказуемым образом с ростом N, главное - чтобы хватило салфетки, времени и дотошности.

Reply


Leave a comment

Up