Tantangan
Tugas Anda adalah menyandikan integer sebagai string karakter ASCII , lalu berhasil mendekodekannya setelah string tersebut diacak secara acak.
Anda akan menulis dua program / fungsi , yang akan disebut sebagai Encoder dan Decoder .
Encoder
- Input: bilangan bulat dalam kisaran .
- Output: string dari ASCII karakter (tidak harus dicetak).
Dekoder
- Input: permutasi acak dari string .
- Output: bilangan bulat .
Mencetak gol
Biarkan menjadi panjang maksimum dari di semua nilai yang mungkin dari . Jika Encoder bertindak non-deterministik (yang diizinkan, lihat di bawah), maka akan menjadi panjang maksimum yang mungkin terjadi (mungkin ).
Biarkan menjadi panjang Encoder dalam byte dan yang panjang Decoder dalam bytes.
Maka skor Anda adalah .
Kemenangan diberikan kepada pengajuan tersebut skor terendah .
Batas waktu
Ada batas waktu yang agak arbitrer 1 menit pada waktu eksekusi Encoder dan Decoder untuk testcase tunggal (yaitu nilai tunggal ).
Tujuannya adalah untuk menghindari solusi yang menemukan bahwa memaksa enkode dengan menghitung semua urutan dengan sifat-sifat tertentu. Jika solusi Anda melakukan sesuatu yang lebih pintar dari itu, kemungkinan besar akan sesuai dengan batasan waktu dan akan dianggap valid. Demikian juga, jika bekerja pada TIO untuk beberapa nilai n yang dipilih secara acak itu akan dianggap valid. Kalau tidak, saya akan mengujinya di komputer saya, tetapi perhatikan bahwa jika solusi Anda murni kasar, hampir pasti akan gagal.
Aturan
- The Encoder dan Decoder harus ditulis dalam bahasa yang sama .
- The Decoder keharusan output yang benar bilangan bulat untuk setiap permutasi yang mungkin dari string dikembalikan oleh Encoder .
- The Encoder dan Decoder yang tidak diizinkan untuk berbagi informasi dengan cara apapun (misalnya dengan cara variabel global atau file).
- Output dari Encoder perlu tidak menjadi deterministik (yaitu, input yang sama dapat menghasilkan string output yang berbeda jika Encoder dijalankan beberapa kali), tetapi Decoder harus selalu menebak bilangan bulat yang benar .
- The Encoder dan Decoder dapat mengambil dan mengembalikan bilangan bulat dalam setiap cara yang nyaman (misalnya jika itu baik untuk masukan untuk menjadi
14
,"14"
atau[1,4]
). - The Encoder mungkin keluaran string baik dengan mencetak pada
stdout
atau dengan mengembalikan string, daftar / array karakter atau daftar / array bilangan bulat dalam rentang ; perhatikan bahwa Decoder akan menerima sebagai input permutasi dari seperti yang dikembalikan oleh Encoder , sehingga ia harus menerima string dalam format yang sama dengan . - Celah standar dilarang.
- Jika memungkinkan, jelaskan cara kerja kode Anda dan mengapa skor yang Anda klaim benar.
Contoh
Asumsikan .
- The Encoder menerima
14
sebagai masukan. Ini dapat menghasilkan"qwerty"
.- The Decoder menerima permutasi dari
"qwerty"
sebagai masukan, misalnya"tweyqr"
. Ini harus menampilkan14
(dalam format apa pun yang nyaman).
The Encoder bisa kembali [113,119,101,114,116,121]
juga, dalam hal ini Decoder akan menerima (misalnya) [116,119,101,121,113,114]
.
Perhatikan bahwa string yang dikembalikan oleh Encoder juga dapat menyertakan karakter ASCII yang tidak dapat dicetak (tetapi selalu dalam jangkauan [0x00, ..., 0x7F]
).