Hướng dẫn rot13 python - con trăn rot13

Lâu rồi cảm giác phê ấy mới trở lại ~^.^~ Giống như mỗi lần vắt óc giải một bài ProjectEuler và bấm vào nút check kết quả thấy nó màu xanh :3
Giống như mỗi lần vắt óc giải một bài ProjectEuler và bấm vào nút check kết quả thấy nó màu xanh :3

Hôm nay là ROT13, thật ra nó chẳng có gì phức tạp cả, nhưng sau khi implement được ROT13 sử dụng một ngôn ngữ mới thì lại phải phê.

Tại sao lại là ROT13 - 13 - 13 - 13 ? ROT13 ["rotate by 13 places"] là một phương pháp "mã hoá" đơn giản bằng việc thay thế 1 chữ cái bằng chữ cách nó 13 chữ cái trong bảng chữ cái tiếng Anh. Lý do có số 13 [mà không phải 14 hay 15 cho trăng tròn] bởi bảng chữ cái tiếng Anh gồm 26 chữ, và nhờ vậy mà để giải mã các ký tự đã bị đảo đi, người ta chỉ cần dịch nó đi tiếp 13 chữ là thu được kết quả ban đầu. Tưởng tượng bảng chữ cái là một vòng tròn như sau: ... a b c ... x y z a b c ...?
ROT13 ["rotate by 13 places"] là một phương pháp "mã hoá" đơn giản bằng việc thay thế 1 chữ cái bằng chữ cách nó 13 chữ cái trong bảng chữ cái tiếng Anh. Lý do có số 13 [mà không phải 14 hay 15 cho trăng tròn] bởi bảng chữ cái tiếng Anh gồm 26 chữ, và nhờ vậy mà để giải mã các ký tự đã bị đảo đi, người ta chỉ cần dịch nó đi tiếp 13 chữ là thu được kết quả ban đầu. Tưởng tượng bảng chữ cái là một vòng tròn như sau: ... a b c ... x y z a b c ...

Hoặc tưởng tượng khác đi một chút, hãy chia bảng chữ cái làm đôi và xếp cạnh nhau, ta có:

a  b  c  d  e  f  g  h  i  j  k  l  m n  o  p  q  r  s  t  u  v  w  x  y  z
n  o  p  q  r  s  t  u  v  w  x  y  z

ROT13 chỉ việc thay một chữ cái bằng chữ tương ứng ở nửa bên kia [a - n, b - o, ... ].

Tất nhiên nếu thích, bạn có thể phát minh ra vài cái ROT với một số khác, kiểu ROT6, ROT9, ROT906 đều được cả, chỉ là nó không thể dùng 1 phương pháp duy nhất mà lại vừa "mã hoá" lại vừa "giải mã" được mà thôi. ROT5 và ROT47 là hai phương pháp cũng phổ biến sau ROT13.

Khi viết trên máy tính, vấn đề phức tạp hơn một chút vì bảng mã ASCII là bảng mã 256 ký tự và nó không phải là "vòng tròn". Nhưng chỉ cần giải quyết cộng trừ một chút thì sẽ ra ngay, rất thích hợp làm bài tập về nhà cho các sinh viên năm nhất năm hai ngành lập trình.

Một vài điều thú vị về ROT13: - Người dùng terminal có thể dùng lệnh sau để thực hiện ROT13:
- Người dùng terminal có thể dùng lệnh sau để thực hiện ROT13:

$ echo "The Quick Brown Fox Jumps Over The Lazy Dog" | tr 'A-Za-z' 'N-ZA-Mn-za-m' Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt
Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt
$ echo "The Quick Brown Fox Jumps Over The Lazy Dog" | tr 'A-Za-z' 'N-ZA-Mn-za-m' | tr 'A-Za-z' 'N-ZA-Mn-za-m' The Quick Brown Fox Jumps Over The Lazy Dog
The Quick Brown Fox Jumps Over The Lazy Dog

- Người dùng vim có thể gõ g? để ROT13 nội dung từ đang chọn [ví dụ để ROT13 một dòng, bấm V [shift +v] , bấm g?.vim có thể gõ g? để ROT13 nội dung từ đang chọn [ví dụ để ROT13 một dòng, bấm V [shift +v] , bấm g?.

Khi test với dòng chữ "nananana", ban biên tập đã rất bất ngờ khi nhận được kết quả sau khi "ROT13" là: "anananan". Điều này thật là kỳ diệu và chúng tôi cảm ơn ca sỹ Bảo Thy đã bí mật đưa những thứ này vào ca khúc "Công chúa bong bóng" :x :x :x.

PS: code python để sinh ra hai nửa bảng chữ cái:

In [9]: import string
In [15]: '  '.join[string.lowercase[13:]] Out[15]: 'n  o  p  q  r  s  t  u  v  w  x  y  z'
Out[15]: 'n  o  p  q  r  s  t  u  v  w  x  y  z'

In [16]: '  '.join[string.lowercase[:13]] Out[16]: 'a  b  c  d  e  f  g  h  i  j  k  l  m'
Out[16]: 'a  b  c  d  e  f  g  h  i  j  k  l  m'

Python function để trả về giá trị số thứ tự [ordinal] của một ký tự - ord:

In [30]: ord['m'] Out[30]: 109
Out[30]: 109

Python built-in function trả về giá trị string của một số [trong khoảng 0-255] - chr:

In [34]: chr[65] Out[34]: 'A'
Out[34]: 'A'

Hoặc unichr để trả về string của một thứ tự trong bảng mã unicode:

In [41]: unichr[123]Out[41]: u'{'
Out[41]: u'{'

Hết.

Hướng dẫn python rotate list of lists - python xoay danh sách danh sách

Bạn có thể xoay danh sách danh sách của mình 90 ° bằng cách sử dụng zip[*reversed[your_list]] như thế này:grid = [[., ., ., ., ., .], [., 0, 0, ., ...

Kiểm tra mảng tăng dần python

Hãy viết chương trình Python sắp xếp các phần tử trong mảng theo thứ tự tăng dần và giảm dần, danh sách các phần tử do người dùng nhập vào và đó phải ...

Hướng dẫn dùng typecaste python

Specify a Variable TypeThere may be times when you want to specify a type on to a variable. This can be done with casting. Python is an object-orientated language, and as such it uses classes to ...

Hướng dẫn append column to list python - nối cột vào danh sách python

Tôi sẽ đề xuất đối tượng Sympy Matrix để làm điều đó:a = [[ 2, 1, 180], [ 1, 3, 300], [-1, -4, 0]] b = [[1,0], [0,0], [0,1]] import sympy as ...

Hướng dẫn dùng of. meaning python

Nội dung chínhPython là gì?Các tính năng chính của PythonHàm Anonymous hoặc Lambda trong Python là gì?Tầm quan trọng của các hàm Lambda trong PythonCú pháp và cách sử ...

Chủ Đề