pengantar
Dalam tantangan ini, Anda akan menyelesaikan transformasi Burrows-Wheeler diagonal. Berikut ini adalah gambaran umum tentang apa transformasi Burrows-Wheeler diagonal. Untuk menyandikan pesan, Anda harus memastikan bahwa panjangnya aneh (mis. 5, 7, 9, dll.). Kemudian Anda membuat kotak, n
dengan n
, di mana n
panjang pesan. Baris pertama adalah pesan asli. Setiap baris setelah itu adalah baris di atasnya, tetapi bergeser 1 karakter ke kiri dengan karakter pertama bergerak ke belakang. Sebagai contoh:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Kemudian Anda mengambil setiap huruf pada NW ke SE diagonal dan memasukkannya ke dalam string baru:
Hello World H
ello WorldH l
llo WorldHe o
lo WorldHel W
o WorldHell r
WorldHello d
WorldHello e
orldHello W l
rldHello Wo (space)
ldHello Wor o
dHello Worl l
Pesan Anda yang disandikan adalah HloWrdel ol
. Untuk memecahkan kode, pertama-tama ambil panjang pesan yang disandikan, tambahkan 1, dan bagi dengan 2. Ayo panggil nomor ini x
. Sekarang kita tahu x
, mulai dari huruf pertama, setiap huruf adalah x
setelah huruf terakhir, berputar-putar. Sebagai contoh:
H l o W r d e l o l
1
Then...
H l o W r d e l o l
1 2
And again...
H l o W r d e l o l
1 3 2
Until you get...
H l o W r d e l o l
1 3 5 7 9 11 2 4 6 8 10
Sekarang atur ulang surat-surat dengan urutan yang benar untuk mendapatkan Hello World
!
Tantangan
Tantangan Anda adalah menulis dua program, fungsi, atau masing-masing. Namun, keduanya harus menggunakan bahasa yang sama. Program pertama akan menerima string sebagai input melalui STDIN, argumen program, atau parameter fungsi dan menyandikannya menggunakan metode ini. Program kedua akan menerima string sebagai input melalui STDIN, argumen program, atau parameter fungsi dan mendekode menggunakan metode ini.
Persyaratan
Program / Fungsi pertama
- Input string tunggal menggunakan metode apa pun yang tercantum di atas.
- Harus menyandikan string menggunakan gaya transformasi Burrows-Wheeler diagonal.
Program / Fungsi kedua
- Input string tunggal menggunakan metode apa pun yang tercantum di atas.
- Harus mendekode string menggunakan gaya transformasi Burrows-Wheeler diagonal.
Kendala
- Anda tidak dapat menggunakan fungsi internal atau eksternal yang menyelesaikan tugas ini.
- Tidak ada celah standar.
- Kedua program / fungsi harus dalam bahasa yang sama.
Mencetak gol
Ini adalah kode golf, jadi program terpendek dalam byte menang.
Jika saya perlu menambahkan lebih banyak informasi, tinggalkan komentar!