Giới thiệu:
Tôi có vô số mật mã khác nhau được lưu trữ trong một tài liệu tôi từng biên soạn khi còn bé, tôi đã chọn một vài trong số những mật mã mà tôi nghĩ là phù hợp nhất cho các thử thách (không quá tầm thường và không quá khó) và biến chúng thành thử thách. Hầu hết trong số họ vẫn còn trong hộp cát, và tôi không chắc liệu tôi sẽ đăng tất cả chúng hay chỉ một vài. Đây là cái thứ hai ( Mật mã máy tính là cái đầu tiên tôi đăng).
Đối với Mật mã Trifid (không sử dụng từ khóa), bảng chữ cái (và ký tự đại diện bổ sung) được chia thành ba 3 cho 3 bảng:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Một văn bản chúng tôi muốn mã hóa là ký tự đầu tiên theo ký tự được mã hóa thành các số cột-hàng-cột. Ví dụ: văn bản this is a trifid cipher
trở thành:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Sau đó, chúng tôi đặt mọi thứ sau một hàng khác trong bảng ở trên trong nhóm ba:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
Và chúng được chuyển trở lại thành các ký tự bằng cách sử dụng cùng một bảng:
s y y z a g d d y y u i q u z w u u h u y o
Một điều cần lưu ý, độ dài đầu vào phải là số nguyên tố bằng 3. Vì vậy, nếu độ dài là bội số của 3, chúng ta sẽ thêm một hoặc hai khoảng trắng ở cuối để làm cho độ dài đầu vào không phải là bội số 3 nữa.
Thử thách:
Cho một chuỗi sentence_to_encipher
, mã hóa nó như mô tả ở trên.
Bạn chỉ phải mã hóa cho sentence_to_encipher
, vì vậy không cần phải tạo chương trình / chức năng giải mã. Tuy nhiên, tôi có thể thực hiện thử thách phần 2 cho việc giải mã trong tương lai (mặc dù tôi có cảm giác nó không quan trọng / tương tự như quá trình mã hóa).
Quy tắc thử thách:
- Bạn có thể giả sử
sentence_to_encipher
chúc chỉ chứa các chữ cái và dấu cách. - Bạn có thể sử dụng cả chữ thường hoặc chữ hoa đầy đủ (vui lòng cho biết cái nào bạn đã sử dụng trong câu trả lời của mình).
- Bạn có thể chọn nối thêm một hoặc hai dấu cách khi độ dài đầu vào là 3 để làm cho nó không còn là bội số của 3 nữa.
- I / O là linh hoạt. Cả đầu vào và đầu ra có thể là một chuỗi, danh sách / mảng / luồng ký tự, v.v.
Quy tắc chung:
- Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'. - Quy tắc chuẩn áp dụng cho câu trả lời của bạn với quy tắc I / O mặc định , vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, chương trình đầy đủ. Cuộc gọi của bạn.
- Lỗ hổng mặc định bị cấm.
- Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ: TIO ).
- Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.
Các trường hợp thử nghiệm:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)