По заданному числу определите, является ли оно складным числом.
Складываемое число - это число, такое, что если вы возьмете его в двоичное представление и «сложите» его пополам, то есть возьмете результат умножения XNOR первой половины числа и второй половины на цифры, обратные, вы получите нуль.
Если число имеет нечетное число цифр в двоичном виде, его средняя цифра должна быть 1 и игнорируется при свертывании.
Поскольку это может немного сбивать с толку, я приведу несколько примеров:
178
Двоичное представление 178
10110010
Чтобы сложить это, мы сначала разделим это пополам
1011 0010
Перевернем вторую половину
1011
0100
И мы XNOR две половинки:
0000
Это ноль, так что это складное число.
1644
Двоичное представление 1644
11001101100
Чтобы сложить это, мы сначала разделим это пополам
11001 1 01100
Средний бит равен 1, поэтому мы выбрасываем его.
11001 01100
Перевернем вторую половину
11001
00110
И мы XNOR две половинки:
00000
Это ноль, так что это складное число.
4254
Двоичное представление 4254
1000010011110
Чтобы сложить это, мы сначала разделим это пополам
100001 0 011110
Средний бит равен 0, так что это не число сгиба.
задача
Ваша задача - взять положительное число и вернуть правду, если число сбрасывается, и ложно, если это не так. Это кодовый гольф, поэтому постарайтесь сохранить обратный отсчет байтов.
Тестовые случаи
Вот первые 99 складных чисел:
[1, 2, 6, 10, 12, 22, 28, 38, 42, 52, 56, 78, 90, 108, 120, 142, 150, 170, 178, 204, 212, 232, 240, 286, 310, 346, 370, 412, 436, 472, 496, 542, 558, 598, 614, 666, 682, 722, 738, 796, 812, 852, 868, 920, 936, 976, 992, 1086, 1134, 1206, 1254, 1338, 1386, 1458, 1506, 1596, 1644, 1716, 1764, 1848, 1896, 1968, 2016, 2110, 2142, 2222, 2254, 2358, 2390, 2470, 2502, 2618, 2650, 2730, 2762, 2866, 2898, 2978, 3010, 3132, 3164, 3244, 3276, 3380, 3412, 3492, 3524, 3640, 3672, 3752, 3784, 3888, 3920, 4000, 4032, 4222, 4318, 4462, 4558]
0
, так что нет. (Возможно, стоит иметь третий подобный пример, подобный этому.) То же самое относится и к 18.