Thử thách trước đây của tôi, In văn bản vô hình khá phổ biến, có thể là do nó tầm thường như thế nào.
Tuy nhiên, những người quan sát nhiều hơn về bạn có thể nhận thấy rằng bạn không thực sự in văn bản vô hình, bởi vì không thể đọc những gì được nhập chỉ đưa ra đầu ra.
Vì vậy, tôi đã tìm hiểu làm thế nào về một thách thức văn bản vô hình thực sự .
Đưa ra một chuỗi chỉ bao gồm các ký tự ASCII có thể in ( 0x20-0x7E
), chuyển đổi từng ký tự thành một ký tự Unicode riêng biệt (theo mã UTF-8) không phải là một trong 95 ký tự ASCII có thể in (bất kỳ ký tự UTF-8 nào ngoài 0x20-0x7E
phạm vi)
Đầu vào
Một chuỗi các ký tự ASCII có thể in, dưới dạng một chuỗi hoặc danh sách / mảng ký tự
Đầu ra
Chuỗi đầu vào với mỗi ký tự được thay thế bằng một ký tự không thể in riêng biệt. Mỗi ký tự đã cho phải có một ký tự không in được tương ứng không được sử dụng thay thế cho bất kỳ ký tự nào khác.
Nếu bạn không thể in các ký tự không in được, bạn có thể xuất các giá trị ký tự thay thế.
Ví dụ nếu mã của bạn thay thế tất cả chữ thường a
's với 0x01
, bạn có thể không sử dụng 0x01
như thay thế cho bất kỳ nhân vật khác.
Mã của bạn cũng phải có tính quyết định . Điều này có nghĩa là nếu, được cung cấp chuỗi Hello
, tất cả các chữ thường l
được thay thế bằng 0x03
, mã của bạn cũng phải thay thế tất cả các chữ thường l
bằng 0x03
bất kỳ chuỗi nào khác.
Tủ thử
Việc viết thử nghiệm cho thử thách này hơi khó khăn, vì vậy tôi chỉ đơn giản hiển thị đầu ra dưới dạng danh sách các mã hex
input -> output
"Hello" -> [0x01, 0x02, 0x03, 0x03, 0x04]
"Hi!" -> [0x01, 0x05, 0x06]
"" -> []
" H " -> [0x07, 0x07, 0x07, 0x01, 0x07, 0x07, 0x07]
"yo! " -> [0x08, 0x04, 0x06, 0x07]