Sẽ sớm có 50 năm kể từ khi IBM công bố dòng máy tính System / 360 của mình. Đây là những người đầu tiên sử dụng bộ ký tự EBCDIC .
Để đánh dấu dịp này, hãy xem ai có thể viết chương trình ngắn nhất có khả năng chuyển đổi văn bản "thông thường" sang và từ mã EBCDIC 037. Chúng tôi sẽ sử dụng bảng dịch từ Wikipedia ánh xạ CP037 sang siêu dữ liệu ISO-8859-1 :
EBCDIC037_to_Latin1 = [
0x00,0x01,0x02,0x03,0x9c,0x09,0x86,0x7f,0x97,0x8d,0x8e,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x9d,0x85,0x08,0x87,0x18,0x19,0x92,0x8f,0x1c,0x1d,0x1e,0x1f,
0x80,0x81,0x82,0x83,0x84,0x0a,0x17,0x1b,0x88,0x89,0x8a,0x8b,0x8c,0x05,0x06,0x07,
0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9a,0x9b,0x14,0x15,0x9e,0x1a,
0x20,0xa0,0xe2,0xe4,0xe0,0xe1,0xe3,0xe5,0xe7,0xf1,0xa2,0x2e,0x3c,0x28,0x2b,0x7c,
0x26,0xe9,0xea,0xeb,0xe8,0xed,0xee,0xef,0xec,0xdf,0x21,0x24,0x2a,0x29,0x3b,0xac,
0x2d,0x2f,0xc2,0xc4,0xc0,0xc1,0xc3,0xc5,0xc7,0xd1,0xa6,0x2c,0x25,0x5f,0x3e,0x3f,
0xf8,0xc9,0xca,0xcb,0xc8,0xcd,0xce,0xcf,0xcc,0x60,0x3a,0x23,0x40,0x27,0x3d,0x22,
0xd8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xab,0xbb,0xf0,0xfd,0xfe,0xb1,
0xb0,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0xaa,0xba,0xe6,0xb8,0xc6,0xa4,
0xb5,0x7e,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0xa1,0xbf,0xd0,0xdd,0xde,0xae,
0x5e,0xa3,0xa5,0xb7,0xa9,0xa7,0xb6,0xbc,0xbd,0xbe,0x5b,0x5d,0xaf,0xa8,0xb4,0xd7,
0x7b,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xad,0xf4,0xf6,0xf2,0xf3,0xf5,
0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xb9,0xfb,0xfc,0xf9,0xfa,0xff,
0x5c,0xf7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xb2,0xd4,0xd6,0xd2,0xd3,0xd5,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xb3,0xdb,0xdc,0xd9,0xda,0x9f];
Quy tắc:
Chương trình của bạn nên có hai đầu vào: (a) một chuỗi văn bản và (b) một cờ cho biết thao tác được thực hiện.
Dựa trên cờ này, chương trình của bạn sẽ chuyển đổi từng byte văn bản thành ký tự EBCDIC tương ứng hoặc ngược lại.
Đầu vào có thể được lấy từ bất kỳ nguồn hợp lý nào (ví dụ: đối số dòng lệnh, stdin, đầu vào bàn phím), nhưng không được mã hóa cứng vào chương trình của bạn.
Đầu ra phải được hiển thị trên màn hình (ví dụ, thiết bị xuất chuẩn,
document.write
) hoặc được ghi vào tệp / đường ống.Không sử dụng bất kỳ chức năng chuyển đổi mã hóa tích hợp hoặc bên ngoài (
iconv
, v.v.).Đây là một thử thách chơi gôn , vì vậy câu trả lời ngắn nhất (ít byte nhất) sẽ giành chiến thắng.
Ví dụ:
(Lưu ý: Những ví dụ này được tạo ra trong một thiết bị đầu cuối được cấu hình để sử dụng mã hóa UTF-8. Bạn có thể thấy các kết quả khác nhau tùy thuộc vào cách hệ thống của bạn được định cấu hình. Tương đương hex chỉ được hiển thị để tham khảo và không phải được tạo bởi mã của bạn .)
Input: "HELLO WORLD", convert to EBCDIC
Output: "ÈÅÓÓÖ@æÖÙÓÄ" (0xc8c5d3d3d640e6d6d9d3c4)
Input: "ÈÅÓÓÖ@æÖÙÓÄ", convert from EBCDIC
Output: "HELLO WORLD"
Input: "lower case mostly ends up as gremlins", convert to EBCDIC
Output "" <-- unprintable in utf-8
(0x9396a68599408381a285409496a2a393a840859584a240a4974081a24087998594938995a2)
s.decode('base64')
để có được bảng tra cứu của mình?