Nhiều ngôn ngữ lập trình được viết bằng cách sử dụng ASCII, tab và dòng mới có thể in được. 97 ký tự này sau đó được lưu trữ trong các byte 8 bit (thực sự có khả năng chứa 256 ký tự khác nhau!), Điều này rất kém hiệu quả - đặc biệt là trong môn đánh gôn, trong đó mỗi byte đều có giá trị! Trong thử thách này, bạn sẽ có thể giảm điểm của mình bằng cách sử dụng chuyển đổi cơ sở.
Thử thách
Chương trình / hàm của bạn lấy một chuỗi hoặc chuỗi ký tự làm đầu vào, sau đó nó diễn giải thành một số cơ sở 97 . Sau đó, nó chuyển đổi số này thành số cơ sở 256 và đếm số ký hiệu (tức là byte) cần thiết để biểu thị số này. Số này sẽ là giá trị đầu ra / trả về của chương trình / hàm của bạn.
Một ví dụ đơn giản sử dụng cơ sở-2 và cơ sở-10 (nhị phân và thập phân): nếu đầu vào là 10110
, đầu ra sẽ là 2, vì 10110 2 = 22 10 (hai chữ số cần thiết để biểu thị đầu ra). Tương tự, 1101 2 trở thành 13 10 , cũng cho đầu ra là 2 và 110 2 trở thành 6 10 , do đó, đầu ra sẽ là 1.
Chuỗi đầu vào có thể chứa tất cả 95 ký tự ASCII có thể in, cũng như \n
tab dòng mới và bằng chữ \t
, tạo ra một bảng chữ cái nguồn gồm 97 ký hiệu cho chuyển đổi cơ sở của bạn. Do đó, bảng chữ cái chính xác sẽ là (thay thế \t
và \n
bằng thẻ chữ và dòng mới thực sự; lưu ý không gian bằng chữ theo dòng mới) :
\t\n !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Lưu ý rằng thứ tự của bảng chữ cái này rất quan trọng: ví dụ, cơ sở-97 \t
tương ứng với số thập phân 0
và !
tương ứng với số thập phân 3
.
Một số testcase: (bạn không cần xử lý một chuỗi rỗng)
Input Output
'example@domain.com' 15
'All your base are belong to us!' 26
' abcd' 9
'~ abcd' 10
'ABCDEFGHIJK' 9
'zyxwvutsrpq' 10
'{".~"}.~' 7
'\t\t\t\t\t\t\t\t' 1 (with \t a literal tab; the result is 0, which can be represented with 1 byte)
'!\t\t\t\t\t\t\t\t' 7 (with \t a literal tab)
Chấm điểm
Nếu mục nhập của bạn chỉ sử dụng ASCII, dòng mới và / hoặc tab có thể in: Điểm số của chương trình của bạn sẽ là đầu ra của chương trình, khi được cung cấp mã nguồn riêng làm đầu vào.
Nếu mục nhập của bạn sử dụng bất kỳ ký tự nào không thể in ASCII, dòng mới hoặc tab: Điểm số của chương trình của bạn chỉ đơn giản là số byte, như trong mã golf .