Latar Belakang
Pada tahun 1870, Emile Baudot menemukan Baudot Code , sebuah pengkodean karakter dengan panjang tetap untuk telegrafi. Dia merancang kode yang akan dimasukkan dari keyboard manual hanya dengan lima tombol; dua dioperasikan dengan tangan kiri dan tiga dengan tangan kanan:
Jari telunjuk kanan, tengah dan jari manis mengoperasikan kunci I , II , dan
III , masing-masing, dan jari telunjuk kiri dan jari tengah mengoperasikan
IV dan Ⅴ . (Selanjutnya saya akan menggunakan angka Arab Barat mereka, yaitu
1 , sampai 5. ) Karakter dimasukkan sebagai akord. Untuk memasukkan huruf "C," misalnya, operator menekan 1 , 3 , dan 4secara bersamaan, dimana lengan sikat berputar membaca setiap tombol secara berurutan dan mentransmisikan arus atau, untuk kunci yang tidak ditekan, tidak ada arus. Hasilnya adalah, dalam istilah modern, pengkodean biner 5-bit-paling-signifikan-bit-pertama, di mana contoh kita, "C," dikodekan sebagai 10110
.
5 bit ??
Anda mungkin berpikir bahwa 5 bit, yang dapat mengekspresikan paling banyak 32 simbol unik, tidak cukup bahkan untuk semua huruf dan angka bahasa Inggris, untuk tidak mengatakan tanda baca. Namun, Baudot punya trik di lengan bajunya: Perangkat karakternya sebenarnya adalah dua perangkat yang berbeda: Surat dan
Angka , dan dia mendefinisikan dua kode khusus untuk beralih di antara mereka.
Letter Shift , yang beralih ke mode Letters, diaktifkan dengan menekan tombol 5 saja ( 00001
), dan Gambar Shift diaktifkan dengan tombol
4 ( 00010
).
Tantangan
Tantangan Anda adalah menulis program atau fungsi yang menerjemahkan transmisi Kode Baudot.
Transmisi yang sebenarnya akan dimulai dengan beberapa bit inisialisasi, ditambah bit mulai dan berhenti sebelum dan sesudah setiap karakter, tetapi kita akan melewatkan itu dan hanya khawatir tentang 5 bit unik untuk setiap karakter. Format input dan output dibahas di bawah ini.
Kode Baudot
Ada dua versi berbeda dari Kode Baudot: Continental dan Inggris. Kita akan menggunakan versi Inggris, yang tidak termasuk karakter seperti "É" dari bahasa Prancis asli Baudot. Kami juga akan mengabaikan semua simbol dalam versi Inggris yang tidak termasuk dalam karakter ASCII yang dapat dicetak. Anda hanya perlu mendekode karakter dalam tabel di bawah ini, yang semuanya merupakan karakter ASCII yang dapat dicetak kecuali tiga karakter kontrol terakhir yang dijelaskan di bawah tabel.
Kolom "Ltr" menunjukkan karakter dalam mode Letter dan "Fig" menunjukkan karakter mode Gambar:
Encoding Encoding
Ltr Fig 12345 Ltr Fig 12345
--- --- -------- --- --- --------
A 1 10000 P + 11111
B 8 00110 Q / 10111
C 9 10110 R - 00111
D 0 11110 S 00101
E 2 01000 T 10101
F 01110 U 4 10100
G 7 01010 V ' 11101
H 11010 W ? 01101
I 01100 X 01001
J 6 10010 Y 3 00100
K ( 10011 Z : 11001
L = 11011 - . 10001
M ) 01011 ER ER 00011
N 01111 FS SP 00010
O 5 11100 SP LS 00001
/ 11000
Tiga baris terakhir di kolom kanan adalah karakter kontrol:
ER
adalah Penghapusan . Mesin telegraf Baudot akan mencetak simbol seperti tanda bintang untuk karakter ini untuk memberi tahu pembaca bahwa karakter sebelumnya harus diabaikan, tetapi kita akan lebih baik kepada pembaca dan benar - benar menghilangkan (tidak mencetak) karakter sebelumnya . Kerjanya sama dalam mode Letter dan Figure.FS
adalah Gambar Shift . Ini mengalihkan set karakter dari Letters ke Angka. Jika decoder sudah dalam mode Gambar, FS diperlakukan sebagai Spasi (ergoSP
di kolom "Ltr"). Ketika decoder berada dalam mode Gambar, ia tetap dalam mode Gambar sampai karakter LS diterima.LS
adalah Letter Shift . Ini beralih set karakter dari Angka ke Surat. Jika decoder sudah dalam mode Letter, LS diperlakukan sebagai Spasi . Ketika dalam mode Letter, decoder tetap dalam mode Letter sampai karakter FS diterima.
Dekoder selalu dimulai dalam mode Letter.
Berikut ini contoh dengan Gambar Shift, Letter Shift, dan Spasi:
01011 10000 00100 00001 00010 10000 11100 00001 10101 11010
M A Y LS/SP FS/SP 1 5 LS/SP T H
Ini menghasilkan pesan MAY 15TH
. Seperti yang Anda lihat, karakter pertama 00001
(Letter Shift / Spasi) bertindak sebagai spasi, karena decoder sudah dalam mode Letter. Karakter berikutnya, 00010
(Pergeseran Gambar / Spasi) mengalihkan dekoder ke mode Gambar untuk dicetak 15
. Kemudian 00001
muncul lagi, tapi kali ini berfungsi sebagai Letter Shift untuk mengembalikan decoder ke mode Letter.
Untuk kenyamanan Anda, berikut adalah karakter dalam format yang mungkin lebih mudah dicerna di editor, diurutkan berdasarkan kode:
A,1,10000|E,2,01000|/,,11000|Y,3,00100|U,4,10100|I,,01100|O,5,11100|FS,SP,00010|J,6,10010|G,7,01010|H,,11010|B,8,00110|C,9,10110|F,,01110|D,0,11110|SP,LS,00001|-,.,10001|X,,01001|Z,:,11001|S,,00101|T,,10101|W,?,01101|V,',11101|ER,ER,00011|K,(,10011|M,),01011|L,=,11011|R,-,00111|Q,/,10111|N,,01111|P,+,11111
Memasukkan
Input akan berupa string, array, atau daftar bit dengan urutan paling tidak signifikan-bit-pertama. Setiap karakter akan diwakili oleh kuintet 5 bit. Bit dapat dalam format apa pun yang masuk akal, misalnya string biner, array 0
s dan 1
s, string "0"
dan "1"
karakter, angka tunggal yang sangat besar, dll., Selama ia memetakan langsung ke bit transmisi.
Setiap transmisi akan memiliki setidaknya satu kwetet yang dapat dicetak dan paling banyak 255 kwintet (dapat dicetak atau sebaliknya), yaitu 5–1.275 bit inklusif.
Input hanya dapat berisi bit-bit transmisi, dengan dua pengecualian yang diizinkan: Sejumlah 0
bit leading atau trailing dan / atau, untuk input string, baris baru trailing tunggal dapat ditambahkan ke transmisi. Leading atau trailing bits atau karakter tidak dapat ditambahkan sebelum atau setelah setiap quintet, yaitu Anda tidak dapat menambahkan setiap quintet ke 8 bit (atau mengambil setiap quintet sebagai angka tunggal dalam sebuah array — kecuali bahasa Anda memiliki tipe integer 5-bit) atau terpisah kwintet dengan bit tambahan, mis "01111\n11100"
.
Catatan & tepi kasus
Transmisi hanya akan berisi karakter di kolom "Ltr" dan "Fig" pada tabel di atas. Anda tidak akan pernah menerima mis
01110
dalam mode Gambar, karena tidak ada di kolom "Gambar".Diasumsikan bahwa decoder akan selalu dalam mode Letter di awal transmisi. Namun, karakter pertama mungkin merupakan karakter FS untuk segera beralih ke mode Gambar.
Ketika decoder dalam mode Letter, itu mungkin menerima karakter LS, dan ketika itu dalam mode Gambar itu mungkin menerima karakter FS. Dalam kedua kejadian tersebut karakter Space harus dicetak (lihat Output).
Karakter ER tidak akan pernah menjadi karakter pertama dalam suatu transmisi, juga tidak akan pernah segera mengikuti LS, FS, atau ER lainnya.
Karakter FS dapat segera mengikuti karakter LS dan sebaliknya.
Baik karakter LS maupun FS tidak akan menjadi karakter terakhir dalam transmisi apa pun.
The
/
dan-
karakter dapat diterima baik dalam modus Surat (kode11000
dan10001
, masing-masing) atau mode Gambar (10111
dan00111
).
Keluaran
Output mungkin dalam format yang masuk akal, yang paling masuk akal adalah ASCII (atau UTF-8, yang semua karakter yang diwakilkan sama dengan ASCII). Harap cantumkan dalam jawaban Anda jika output Anda dalam format atau penyandian lain.
Catatan
- Karakter spasi (lihat 3. di atas) harus berupa spasi ASCII (0x20) atau yang setara dengan pengkodean Anda, yaitu apa yang Anda dapatkan saat menekan bilah spasi.
Kemenangan
Ini adalah kode-golf . Kode terpendek dalam byte menang.
Batasan
Celah standar dilarang.
Spasi trailing dan / atau satu trailing newline diperbolehkan. Spasi terdepan atau karakter lain (yang bukan bagian dari transmisi) tidak diizinkan.
Anda tidak boleh menggunakan fungsi perpustakaan atau built-in apa saja yang menerjemahkan kode Baudot (atau keturunannya, misalnya Kode Murray, ITA-1, dll.).
Uji Kasus
Input: 001101000010100111101110010101
Output: BAUDOT
Input: 11010010001001100011110111101111100
Output: HELLO
Input: 01011100000010000001000101000011100000011010111010
Output: MAY 15TH
Input: 0001000100010000001000001011101110011100101010010110101010001111100101
Output: 32 FOOTSTEPS
Input: 10110000110101011100111100001111011010000001101110
Output: GOLF
Input: 000100011000001111100000100010110111001100010110010000111111
Output: 8D =( :P
Input: 0000100001000010000100010001111011111011000011100010001
Output (4 leading spaces): -/=/-
00010
terdaftar sebagai SP
dalam mode huruf, dan FS
dalam mode angka. Menurut deskripsi, jika kita dalam mode huruf dan kita menerima kode 00010
, kita harus beralih ke mode angka, tetapi nilai-nilai dalam tabel tampaknya sebaliknya. Demikian juga sebaliknya untuk 00001
.