Sebentar lagi akan menjadi 50 tahun sejak IBM meluncurkan keluarga System / 360 komputernya. Ini adalah yang pertama menggunakan set karakter EBCDIC .
Untuk menandai kesempatan ini, mari kita lihat siapa yang dapat menulis program terpendek yang mampu mengubah teks "biasa" ke dan dari kode EBCDIC halaman 037. Kami akan menggunakan tabel terjemahan dari Wikipedia yang memetakan CP037 ke superset dari 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];
Aturan:
Program Anda harus mengambil dua input: (a) string teks, dan (b) bendera yang mengindikasikan operasi yang akan dilakukan.
Berdasarkan bendera ini, program Anda harus mengkonversi setiap byte teks menjadi karakter EBCDIC yang sesuai, atau sebaliknya.
Input dapat diperoleh dari sumber yang masuk akal (misalnya, argumen baris perintah, stdin, input keyboard), tetapi tidak boleh dikodekan ke dalam program Anda.
Keluaran harus ditampilkan di layar (misalnya, stdout,
document.write
) atau ditulis ke file / pipa.Jangan gunakan fungsi konversi penyandian internal atau eksternal (
iconv
, dll.).Ini adalah tantangan kode-golf , jadi jawaban tersingkat (byte paling sedikit) akan menang.
Contoh:
(Catatan: Contoh-contoh ini diproduksi di terminal yang dikonfigurasikan untuk menggunakan pengkodean UTF-8. Anda dapat melihat hasil yang berbeda tergantung pada bagaimana sistem Anda dikonfigurasikan. Setara hex ditampilkan hanya sebagai referensi, dan tidak harus dihasilkan oleh kode Anda .)
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)
sumber
s.decode('base64')
untuk mendapatkan tabel pencarian saya?Jawaban:
Bash + tr, 240 byte
Hexdump
Solusi yang agak sepele. Membaca dari STDIN, mencetak ke STDOUT.
Cara Penggunaan
Untuk menyimpan skrip dan membuatnya dapat dieksekusi, jalankan perintah ini:
Untuk mengonversi ke EBCDIC (encode), jalankan perintah biasa:
Untuk mengonversi dari EBCDIC (decode), tentukan setiap argumen pertama:
sumber