еще одна задачка
Jan. 17th, 2008 07:53 pmЭта запись будет интересна только программистам (ну или еще может математикам). Задача не особенно сложная, комменты скрывать не буду, не смотрите туда, если не хотите спойлеров.
Задача: написать функцию f(x), так, что f(f(x) = -x. Разрешено использовать только
целые числа. x - целочисленный аргумент (например, 32-битный).
Update: интересно, что никто, кажется, не дал правильного решения для 32-битных чисел (для "вообще целых чисел" правильных решений куча).
Update: неудивительно, потому что для 32-битных решения нет! :) У меня был глюк.
Задача: написать функцию f(x), так, что f(f(x) = -x. Разрешено использовать только
целые числа. x - целочисленный аргумент (например, 32-битный).
Update: интересно, что никто, кажется, не дал правильного решения для 32-битных чисел (для "вообще целых чисел" правильных решений куча).
Update: неудивительно, потому что для 32-битных решения нет! :) У меня был глюк.
no subject
Date: 2008-01-17 06:05 pm (UTC)no subject
Date: 2008-01-17 06:06 pm (UTC)no subject
Date: 2008-01-17 06:07 pm (UTC)no subject
Date: 2008-01-17 06:10 pm (UTC)no subject
Date: 2008-01-17 06:13 pm (UTC)(I know, I know)
no subject
Date: 2008-01-17 06:13 pm (UTC)f(x) = odd(x) ? x + sgn(x) : -x+sgn(x)
no subject
Date: 2008-01-17 06:14 pm (UTC)typo
Date: 2008-01-17 06:43 pm (UTC)no subject
Date: 2008-01-17 06:45 pm (UTC)f(x)=x-(2*x*(x&1))+sgn(x)
no subject
Date: 2008-01-17 06:54 pm (UTC)Но с минусом-то решения вроде быть не может --- изменение знака на обычных 32-битовых числах со знаком имеет две неподвижные точки (ноль и -2^31), а стало быть это нечётная перестановка (произведение 2^31-1 инверсий). А нечётная перестановка не может быть квадратом другой перестановки.
no subject
Date: 2008-01-17 06:56 pm (UTC)if (0 < x < max/2)
f(x) = max - 7
else if (X > max/2)
f(x) = x - max
else if (mix/2 < x < 0)
f(x) = min - x
else
f(x) = x - min
no subject
Date: 2008-01-17 07:23 pm (UTC)no subject
Date: 2008-01-17 07:25 pm (UTC)no subject
Date: 2008-01-17 07:32 pm (UTC)Жиличка Пятеркина положила в печь пять поленьев, жиличка Тройкина - три. После того, как они вместе с жильцом Бестопливным приготовили себе еду, он достал восемь рублей и задумался, как их поделить. Помогите ему.
no subject
Date: 2008-01-17 07:48 pm (UTC)f(x) = { 2x + 1 | x%2 == 0
(1-x)/2 | other }
но думаю, что это не то, что ты имел в виду.
no subject
Date: 2008-01-17 08:10 pm (UTC)Сколько принципиально разных подходов для ... вы можете предложить
Вроде классической задачи - написать функцию, которая 0->1->0
В фольклоре считалось, что хороший с-программист может дать сразу 6 различных короткий решений, отличный - 10
no subject
Date: 2008-01-17 08:41 pm (UTC)no subject
Date: 2008-01-17 08:42 pm (UTC)no subject
Date: 2008-01-17 08:44 pm (UTC)no subject
Date: 2008-01-17 08:48 pm (UTC){
if ($x>0)
$sign = 1;
else
$sign = -1;
if ($x % 2==0)
return $x+$sign*1;
else
return -($x-$sign*1);
}
Почти то же самое. Правда на ПХП :)
no subject
Date: 2008-01-17 08:52 pm (UTC)no subject
Date: 2008-01-17 08:58 pm (UTC)no subject
Date: 2008-01-17 08:58 pm (UTC)function f($x) { if (is_array($x)) return $x[0]; return array(-$x); }:)
no subject
Date: 2008-01-17 09:01 pm (UTC)Но, фактически, это противоречит условиям задачи ;)
no subject
Date: 2008-01-17 09:04 pm (UTC):)