Thử thách
Vì vậy, ừm, có vẻ như, trong khi chúng ta có rất nhiều thử thách hoạt động với số vuông hoặc số có hình dạng khác, chúng ta không có một câu hỏi đơn giản:
Cho một số nguyên n
(trong đó n>=0
) làm đầu vào trả về giá trị trung thực nếu n
là một hình vuông hoàn hảo hoặc giá trị falsey nếu không.
Quy tắc
- Bạn có thể nhận đầu vào bằng bất kỳ phương tiện hợp lý, thuận tiện nào miễn là được phép theo quy tắc I / O tiêu chuẩn .
- Bạn không cần xử lý các yếu tố đầu vào lớn hơn những gì ngôn ngữ bạn chọn có thể xử lý nguyên bản cũng không dẫn đến sự thiếu chính xác của dấu phẩy động.
- Đầu ra phải là một trong hai giá trị trung thực / falsey nhất quán (ví dụ:
true
hoặcfalse
,1
hoặc0
) - trung thực nếu đầu vào là một hình vuông hoàn hảo, falsey nếu không. - Đây là mã golf nên số byte thấp nhất sẽ thắng.
Các trường hợp thử nghiệm
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
2**54-2
vẫn lớn hơn gấp đôi có thể xử lý một cách an toàn, ít nhất là trong JavaScript18014398509481982 > 9007199254740991
2**54-2
vào bảng điều khiển JS và so sánh những gì bạn nhận được 18014398509481982
(giá trị chính xác). Do đó, JS đưa ra giá trị chính xác, do đó 2**54-2
có thể biểu diễn bằng một kép. Nếu điều đó vẫn không thuyết phục được bạn, hãy lấy dữ liệu nhị phân 0100001101001111111111111111111111111111111111111111111111111111
, diễn giải nó dưới dạng float chính xác kép của IEEE-754 và xem giá trị bạn nhận được.
18014398509481982
(2**54-2
), mà là biểu diễn với một đôi, và gây ra câu trả lời rằng việc sử dụngsqrt
thất bại.