Giới thiệu
Trong thử thách này, bạn sẽ giải được các phép biến đổi Burrows-Wheeler chéo. Dưới đây là tổng quan chung về biến đổi Burrows-Wheeler chéo là gì. Để mã hóa tin nhắn, trước tiên bạn phải đảm bảo rằng nó có độ dài lẻ (tức là 5, 7, 9, v.v.). Sau đó, bạn tạo một lưới, n
bởi n
, n
độ dài của tin nhắn. Hàng đầu tiên là thông điệp ban đầu. Mỗi hàng sau đó là hàng phía trên nó, nhưng dịch chuyển 1 ký tự còn lại với ký tự đầu tiên di chuyển về phía sau. Ví dụ:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Sau đó, bạn lấy từng chữ cái trên đường chéo NW đến SE và đặt nó vào một chuỗi mới:
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
Tin nhắn được mã hóa của bạn là HloWrdel ol
. Để giải mã, trước tiên hãy lấy độ dài của tin nhắn được mã hóa, thêm 1 và chia cho 2. Hãy gọi số này x
. Bây giờ chúng ta đã biết x
, bắt đầu từ chữ cái đầu tiên, mỗi chữ cái là x
sau chữ cái cuối cùng, lặp đi lặp lại. Ví dụ:
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
Bây giờ chỉ cần sắp xếp lại các chữ cái theo đúng thứ tự để có được Hello World
!
Thử thách
Thách thức của bạn là viết hai chương trình, chức năng hoặc một trong hai chương trình. Tuy nhiên, cả hai phải sử dụng cùng một ngôn ngữ. Chương trình đầu tiên sẽ chấp nhận một chuỗi làm đầu vào thông qua STDIN, đối số chương trình hoặc tham số hàm và mã hóa nó bằng phương thức này. Chương trình thứ hai sẽ chấp nhận một chuỗi làm đầu vào thông qua STDIN, đối số chương trình hoặc tham số hàm và giải mã nó bằng phương thức này.
Yêu cầu
Chương trình / Chức năng đầu tiên
- Một đầu vào chuỗi đơn sử dụng bất kỳ phương pháp được liệt kê ở trên.
- Phải mã hóa chuỗi bằng cách sử dụng kiểu biến đổi Burrows-Wheeler chéo.
Chương trình / Chức năng thứ hai
- Một đầu vào chuỗi đơn sử dụng bất kỳ phương pháp được liệt kê ở trên.
- Phải giải mã chuỗi bằng cách sử dụng kiểu biến đổi Burrows-Wheeler chéo.
Những ràng buộc
- Bạn không thể sử dụng bất kỳ chức năng tích hợp hoặc bên ngoài nào để thực hiện nhiệm vụ này.
- Sơ hở tiêu chuẩn không được phép.
- Cả hai chương trình / chức năng phải ở cùng một ngôn ngữ.
Chấm điểm
Đây là mã golf, vì vậy chương trình ngắn nhất trong byte thắng.
Nếu tôi cần thêm thông tin, hãy để lại nhận xét!