Cho một số xác định nếu nó là một số gấp.
Số gấp là một số sao cho nếu bạn lấy đại diện nhị phân và "gấp" nó thành một nửa, đó là kết quả của phép nhân XNOR của nửa đầu của số và nửa sau với chữ số ngược lại, bạn sẽ nhận được số không.
Nếu số có số lẻ trong các chữ số nhị phân thì chữ số giữa của nó phải là 1 và bị bỏ qua khi gập.
Vì điều đó có thể hơi khó hiểu, tôi sẽ đưa ra một số ví dụ:
178
Đại diện nhị phân của 178 là
10110010
Để gấp nó, trước tiên chúng ta chia nó làm đôi
1011 0010
Chúng tôi đảo ngược nửa thứ hai
1011
0100
Và chúng tôi XUẤT HIỆN hai nửa:
0000
Đây là số không nên đây là một số gấp.
1644
Đại diện nhị phân của 1644 là
11001101100
Để gấp nó, trước tiên chúng ta chia nó làm đôi
11001 1 01100
Bit giữa là 1 vì vậy chúng tôi ném nó ra.
11001 01100
Chúng tôi đảo ngược nửa thứ hai
11001
00110
Và chúng tôi XUẤT HIỆN hai nửa:
00000
Đây là số không nên đây là một số gấp.
4254
Đại diện nhị phân của 4254 là
1000010011110
Để gấp nó, trước tiên chúng ta chia nó làm đôi
100001 0 011110
Bit giữa là 0 nên đây không phải là số gấp.
Bài tập
Nhiệm vụ của bạn là lấy một số dương và trả về một sự thật nếu số đó gấp và sai nếu không. Đây là mã golf, vì vậy hãy cố gắng giữ byte đếm ngược.
Các trường hợp thử nghiệm
Dưới đây là 99 số gấp đầu tiên:
[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
, nên không. (Có thể đáng để có một ví dụ hoạt động thứ ba như thế này.) Tương tự như vậy cho 18.