Động lực
Trong thử thách này, nhiệm vụ của bạn là nhân hai chuỗi, điều này tự nhiên giới thiệu một cách để lấy căn bậc hai của chuỗi.
Làm thế nào nó hoạt động?
Đưa ra một chuỗi (ví dụ pub
) điều đầu tiên bạn cần làm là xác định mã ASCII cho mỗi ký tự:
"pub" -> [112, 117, 98]
Tiếp theo, bạn ánh xạ các mã này vào phạm vi [0..94]
bằng cách trừ 32
từng giá trị:
[112, 117, 98] -> [80, 85, 66]
Bây giờ bạn cần tìm cho mỗi giá trị modulo gốc của nó 95
(ví dụ: 40*40 % 95 = 80
bạn cũng có thể chọn 55
):
[80, 85, 66] -> [40, 35, 16]
Và cuối cùng, bạn sẽ ánh xạ nó trở lại phạm vi [32..126]
và chuyển đổi nó thành một chuỗi:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
Thật vậy, "HC0" ⊗ "HC0" = "pub"
như bạn có thể xác minh với một giải pháp từ các thách thức khác ở đây .
Những người quen thuộc với số học mô-đun có thể nhận thấy rằng modulo căn bậc hai 95
không phải lúc nào cũng tồn tại, ví dụ như không có root cho 2
. Trong trường hợp như vậy, căn bậc hai của một chuỗi không được xác định và chương trình / hàm của bạn có thể bị sập, lặp không xác định, v.v.
Để thuận tiện cho bạn, đây là danh sách các ký tự có căn bậc hai (cái đầu tiên là khoảng trắng):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Quy tắc
- Bạn sẽ viết một chương trình / hàm lấy một chuỗi (hoặc danh sách các ký tự) làm đối số và trả về bất kỳ căn bậc hai nào nếu nó tồn tại
- Bạn có thể cho rằng đầu vào luôn có căn bậc hai
- Đầu vào có thể bao gồm một chuỗi rỗng
- Đầu vào sẽ nằm trong phạm vi có thể in (
[32..126]
) - Đầu ra được in ra bàn điều khiển hoặc bạn trả về một chuỗi nếu căn bậc hai tồn tại
- Trong trường hợp căn bậc hai không tồn tại, hành vi của chương trình / hàm của bạn không được xác định
- Nếu bạn chọn in gốc đến bảng điều khiển thì các dòng mới hoặc khoảng trắng đều ổn
Các trường hợp thử nghiệm
Lưu ý rằng đây không nhất thiết là giải pháp duy nhất:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(đó là phạm vi có thể in được), đó là một lỗi đánh máy - xin lỗi về điều đó.