Cập nhật lần cuối:
Palindrome, Ambigram và Anagram - Toán học của trò chơi chữ sinh ra từ số ký tự
Đọc "racecar" ngược lại vẫn là "racecar." Đằng sau trò chơi đơn giản này ẩn chứa toán học sâu sắc liên quan đến lý thuyết tổ hợp, lý thuyết độ phức tạp tính toán và cấu trúc ngôn ngữ. Palindrome, anagram, pangram, lipogram. Những trò chơi chữ sinh ra từ các ràng buộc về thứ tự sắp xếp và số lượng ký tự này vừa là đề bài kinh điển trong các cuộc thi lập trình, vừa là nền tảng của mật mã học, và trên hết là trò chơi trí tuệ thách thức giới hạn năng lực ngôn ngữ của con người.
Palindrome - Đọc xuôi hay ngược đều giống nhau
Palindrome là văn bản đọc từ trước ra sau hay từ sau ra trước đều giống nhau. Trong tiếng Nhật, các ví dụ nổi tiếng bao gồm "shinbunshi" (giấy báo) và "tomato" (cà chua). Trong tiếng Anh, "racecar," "madam" và "A man, a plan, a canal: Panama!" là những ví dụ kinh điển.
Palindrome tiếng Nhật mang một điểm bất đồng mà tiếng Anh không có: cách xử lý dấu dakuten (dấu thanh) và handakuten (dấu bán thanh). Khi hai vị trí đối xứng ghép một kana thanh thường với kana hữu thanh tương ứng, chẳng hạn "ka" và "ga", quan điểm khoan dung coi chúng là cùng một ký tự và vẫn chấp nhận văn bản là palindrome, còn quan điểm nghiêm ngặt thì không. Ví dụ thường được dẫn ra là "takeyabu yaketa" (bụi tre đã cháy): viết bằng kana thì thành "ta-ke-ya-bu-ya-ke-ta", và bảy ký tự đó tự thân đã đối xứng, nên câu này thành palindrome mà không hề dựa vào sự khoan dung nói trên. Những tác phẩm thực sự đổi kết luận theo tiêu chí là các tác phẩm mà hai vị trí đối xứng bất đồng về việc có dấu thanh hay không. Sự "linh hoạt" này mở rộng phạm vi biểu đạt của palindrome tiếng Nhật, nhưng từ góc độ quy tắc cơ bản của văn bản tiếng Nhật, nó có nghĩa là cùng một tác phẩm có thể được tính hoặc không được tính là palindrome nếu tiêu chí chưa được ấn định trước.
Palindrome không chỉ giới hạn ở những câu ngắn. Một số tác giả đã viết trọn cả tiểu thuyết mà toàn bộ văn bản đọc theo hướng nào cũng giống nhau. Hai tác phẩm tiếng Anh được biết đến rộng rãi là "Satire: Veritas" của David Stephens (năm 1980, 58.795 ký tự) và "Dr Awkward & Olson in Oslo" của Lawrence Levine (năm 1986, 31.954 từ). Giữ cho hàng chục nghìn từ đối xứng từ đầu đến cuối buộc phải hy sinh sự tự nhiên của câu văn, nên tính dễ đọc như một tác phẩm văn học và độ khắt khe của ràng buộc đối lập trực tiếp với nhau.
Thuật toán phát hiện Palindrome - Sự thanh lịch của O(n)
Trong lập trình, thuật toán xác định xem một chuỗi có phải palindrome hay không là đề tài nhập môn lý tưởng cho lý thuyết độ phức tạp tính toán. Phương pháp đơn giản nhất là đảo ngược chuỗi và so sánh với chuỗi gốc, đạt độ phức tạp thời gian O(n) và không gian O(n).
Phương pháp hiệu quả hơn đặt hai con trỏ ở hai đầu chuỗi và so sánh từng ký tự hướng vào giữa. Phương pháp này đạt độ phức tạp thời gian O(n) với không gian O(1).
Thuật toán Manacher có thể phát hiện tất cả các chuỗi con palindrome trong thời gian O(n). Được Glenn Manacher công bố năm 1975, thuật toán này tính toán hiệu quả bán kính palindrome dài nhất tại mỗi vị trí. Ý tưởng cốt lõi là giảm phương pháp ngây thơ O(n²) xuống O(n) bằng cách tận dụng tính đối xứng của các palindrome đã tính trước đó.
| Thuật toán | Độ phức tạp thời gian | Độ phức tạp không gian | Đặc điểm |
|---|---|---|---|
| Đảo chuỗi + so sánh | O(n) | O(n) | Triển khai đơn giản nhất |
| Phương pháp hai con trỏ | O(n) | O(1) | Không cần bộ nhớ bổ sung |
| Kiểm tra đệ quy | O(n) | O(n) (ngăn xếp) | Phù hợp lập trình hàm |
| Chuỗi con palindrome dài nhất (Manacher) | O(n) | O(n) | Phát hiện tất cả chuỗi con palindrome |
| Phân hoạch palindrome (DP) | O(n²) | O(n²) | Tìm số phân hoạch tối thiểu |
Trong các cuộc thi lập trình (AtCoder, LeetCode, v.v.), bài toán palindrome xuất hiện thường xuyên. "Longest Palindromic Substring" của LeetCode là câu hỏi phỏng vấn kinh điển. Kiến thức về khớp mẫu trong số ký tự và thiết kế biểu thức chính quy cũng có thể áp dụng cho phát hiện palindrome.
Phát hiện palindrome tiếng Nhật cần tiền xử lý bổ sung: chuẩn hóa dakuten và handakuten, xử lý dấu trường âm "ー", và quyết định xem âm rút gọn (như "kyo") được tính là 1 hay 2 ký tự. Các quy tắc này khác nhau giữa các cộng đồng palindrome và không có tiêu chuẩn thống nhất.
Anagram - Sự bùng nổ tổ hợp từ việc sắp xếp lại ký tự
Anagram là trò chơi chữ sắp xếp lại các ký tự của một từ hoặc câu để tạo thành từ hoặc câu có nghĩa khác. Ví dụ nổi tiếng trong tiếng Anh bao gồm "listen" và "silent", "astronomer" và "moon starer". Tiếng Nhật cũng có những cặp như vậy, chẳng hạn "tokei" (đồng hồ) và "keito" (sợi len), khi viết từ ra hiragana rồi sắp xếp lại thì được một từ khác.
Số tổ hợp anagram lý thuyết từ một từ n ký tự là n! (n giai thừa). Tuy nhiên, cần loại bỏ trùng lặp khi cùng một ký tự xuất hiện nhiều lần.
| Số ký tự | Tất cả ký tự khác nhau (n!) | Ví dụ | Thời gian thử vét cạn ở mức 1 triệu lượt mỗi giây |
|---|---|---|---|
| 3 ký tự | 6 tổ hợp | cat → act | Tức thì |
| 6 ký tự | 720 tổ hợp | listen → silent, enlist, tinsel | Tức thì |
| 7 ký tự | 5.040 tổ hợp | thicken → kitchen | Tức thì |
| 10 ký tự | 3.628.800 tổ hợp | astronomer → moon starer | Khoảng 3,6 giây |
| 15 ký tự | Khoảng 1,3 nghìn tỷ | - | Khoảng 15 ngày |
Lấy astronomer ở cột Ví dụ: vì "o" và "r" mỗi chữ xuất hiện hai lần, số cách sắp xếp thực sự phân biệt được là 907.200, tức 10 giai thừa sau khi chia bớt phần trùng lặp. Khi số ký tự tăng, số ứng viên phình lên với tốc độ giai thừa, nhưng số mục có trong từ điển lại không tăng theo tỷ lệ đó. Nói cách khác, từ càng dài thì mật độ trúng càng loãng, và việc rơi đúng vào một từ khác càng khó. Đó là lý do anagram của các từ dài thường mang hình thức một cụm nhiều từ, như astronomer → moon starer.
Cách hiệu quả nhất để phát hiện anagram trong lập trình là sắp xếp các ký tự của hai chuỗi rồi so sánh. Sắp xếp "listen" được "eilnst", sắp xếp "silent" cũng được "eilnst", xác nhận chúng là anagram. Phương pháp này có độ phức tạp O(n log n). Phương pháp nhanh hơn O(n) đếm tần suất mỗi ký tự rồi so sánh.
Anagram có mối liên hệ sâu sắc với lịch sử mật mã học. Vào thế kỷ 17, các nhà khoa học sử dụng anagram để khẳng định quyền ưu tiên cho phát hiện của mình. Galileo công bố phát hiện vành đai Sao Thổ dưới dạng anagram "smaismrmilmepoetaleumibunenugttauiras", sau đó tiết lộ đó là anagram của "Altissimum planetam tergeminum observavi" (Tôi đã quan sát hành tinh cao nhất là ba phần).
Pangram - Thách thức sử dụng mọi chữ cái
Pangram là câu sử dụng mỗi chữ cái trong bảng chữ cái ít nhất một lần. Pangram tiếng Anh nổi tiếng nhất là "The quick brown fox jumps over the lazy dog," chứa tất cả 26 chữ cái trong 35 ký tự (không tính dấu cách).
Pangram hoàn hảo (perfect pangram) sử dụng mỗi chữ cái đúng một lần. Pangram hoàn hảo tiếng Anh phải gồm đúng 26 ký tự, khiến việc tạo câu có nghĩa cực kỳ khó. "Mr Jock, TV quiz PhD, bags few lynx" (26 ký tự) là một ví dụ hơi gượng ép.
Tiếng Nhật có pangram có lẽ đẹp nhất thế giới: bài thơ Iroha.
"Iro ha nihoheto / chirinuru wo / waka yo tare so / tsune naramu / uwi no okuyama / kefu koete / asaki yume mishi / wehi mo sesu"
Bài thơ này sử dụng tất cả 47 ký tự kana thời đó, mỗi ký tự đúng một lần - một pangram hoàn hảo - đồng thời là bài waka có ý nghĩa thể hiện quan niệm vô thường của Phật giáo. Tác giả của bài thơ không rõ, và ngay cả thời điểm ra đời cũng chỉ xác định được là nằm trong khoảng từ cuối thế kỷ 10 đến giữa thế kỷ 11, với ghi chép cổ nhất còn lại xuất hiện trong một tài liệu năm 1079. Được ngâm đọc suốt gần một nghìn năm mà tên tác giả không lưu lại, bài thơ này là di sản trí tuệ của nhân loại đạt được cả ràng buộc toán học lẫn vẻ đẹp văn học.
Kana tiếng Nhật hiện đại gồm 46 ký tự ("wi" và "we" bị bãi bỏ, "n" được thêm vào), nhưng bài Iroha không chứa "n". Nhiều người đã thử tạo pangram hoàn hảo với 46 kana hiện đại nhưng chưa ai sánh được vẻ đẹp của bài Iroha. Ràng buộc càng nghiêm ngặt, giá trị của tác phẩm thỏa mãn nó càng cao.
Pangram tiếng Anh từ lâu đã có công dụng thực tế trong luyện gõ phím và trong các bản mẫu chữ. Trong số đó, "The quick brown fox jumps over the lazy dog" là câu mẫu lưu hành rộng rãi nhất. Lý do là nó dồn đủ 26 chữ cái vào 35 ký tự không tính dấu cách, cho phép so sánh hình dáng của mọi chữ cái trong một phông chữ chỉ bằng một cái nhìn. Tuy nhiên cần lưu ý rằng chữ hoa duy nhất mà câu này tạo ra là chữ T đứng đầu; hình dáng của các chữ hoa còn lại, cũng như của chữ số và dấu câu, không thể kiểm tra được từ nó. Khi thực sự chọn phông chữ, câu này phải được dùng kèm một bản mẫu có chứa chữ số và dấu câu. Ở đây cũng vậy, bản mẫu gọn đến đâu và cho kiểm chứng được đến đâu là hai điều đánh đổi với nhau.
| Loại Pangram | Ngôn ngữ | Số ký tự | Bộ ký tự sử dụng |
|---|---|---|---|
| The quick brown fox... | Tiếng Anh | 35 ký tự | a-z (26 chữ cái, có lặp) |
| Mr Jock, TV quiz PhD... | Tiếng Anh | 26 ký tự | a-z (pangram hoàn hảo) |
| Bài thơ Iroha | Tiếng Nhật | 47 ký tự | 47 kana (pangram hoàn hảo) |
| Portez ce vieux whisky... | Tiếng Pháp | 37 ký tự | a-z (26 chữ cái, có lặp) |
Lipogram - Ràng buộc tránh ký tự cụ thể
Lipogram ngược lại với pangram - viết văn bản hoàn toàn không sử dụng một ký tự cụ thể. Tác phẩm lipogram nổi tiếng nhất là tiểu thuyết "La Disparition" (Sự biến mất) của nhà văn Pháp Georges Perec xuất bản năm 1969. Cuốn tiểu thuyết khoảng 300 trang này được viết hoàn toàn không dùng chữ "e" - chữ cái được sử dụng nhiều nhất trong tiếng Pháp.
Trong tiếng Anh, "Gadsby" của Ernest Vincent Wright xuất bản năm 1939 rất nổi tiếng. Toàn bộ tiểu thuyết khoảng 50.000 từ không sử dụng chữ "e". Tần suất xuất hiện của "e" trong văn bản tiếng Anh khoảng 12,7% - chữ cái được dùng nhiều nhất - viết tiểu thuyết dài mà loại bỏ nó đòi hỏi năng lực ngôn ngữ phi thường.
Trong thế giới Unicode được thảo luận trong bài đếm ký tự emoji, với hơn 140.000 ký tự khả dụng, việc tránh một ký tự cụ thể rất dễ. Tuy nhiên, viết văn bản có nghĩa trong bộ ký tự hạn chế của ngôn ngữ tự nhiên mà loại trừ một ký tự cụ thể là thách thức trí tuệ ở chiều kích khác so với ràng buộc số ký tự.
Ambigram - Thiết kế chữ đọc được khi xoay
Ambigram là thiết kế mà văn bản có thể đọc được (cùng từ hoặc từ khác) khi xoay 180 độ hoặc soi gương. Chúng trở nên phổ biến qua tiểu thuyết "Thiên thần và Ác quỷ" của Dan Brown.
Ambigram không phải vấn đề thuần túy về số ký tự mà là thiết kế khai thác tính đối xứng thị giác của chữ cái. Trong chữ hoa tiếng Anh, "A," "H," "I," "M," "O," "T," "U," "V," "W," "X," "Y" đối xứng trái-phải, còn "H," "I," "N," "O," "S," "X," "Z" vẫn giữ nguyên hình dáng sau khi xoay 180 độ. Điểm dễ bị bỏ qua ở đây là một từ đọc được sau khi xoay phải thỏa mãn đồng thời hai điều kiện: từng chữ cái phải trở về đúng hình dáng ban đầu của nó, và thứ tự các chữ cái khi đảo ngược vẫn phải đánh vần ra chính từ đó. "NOON" và "SOS" được viết bằng các chữ cái đối xứng xoay và bản thân chúng là palindrome, nên đáp ứng cả hai điều kiện mà không cần thêm thao tác thiết kế nào.
"SWIMS" đi thêm một bước nữa. Xoay 180 độ thì W và M đều không trở về hình dáng của chính mình, nhưng mỗi chữ lại biến thành hình dáng của chữ kia. Đọc ngược S, W, I, M, S vẫn ra S, W, I, M, S, nên từ này cũng đọc được như một hình đối xứng xoay. Không chỉ tìm những chữ cái đối xứng riêng lẻ mà còn tìm các cặp chữ cái đổi vai cho nhau khi xoay, đó mới là điểm cốt yếu của thiết kế ambigram.
Người mở đường cho hình thức biểu đạt này là nhà thiết kế đồ họa John Langdon (1946-2026). Năm 1972 ông vẽ chữ "heaven" sao cho lộn ngược lại vẫn đọc được, và ông được xem là người tiên phong của hình thức này cùng với Scott Kim, người đi đến cùng một ý tưởng một cách độc lập. Bản thân tên gọi "ambigram" do Douglas Hofstadter đặt ra năm 1984. Langdon đã thực hiện các ambigram cho tiểu thuyết "Thiên thần và Ác quỷ" của Dan Brown, và nhân vật chính của tiểu thuyết, Robert Langdon, được cho là đặt tên một phần theo ông. Ít ký tự hơn thì thiết kế ambigram dễ hơn, nhưng tạo ambigram cho từ dài hoặc câu là thách thức nghệ thuật đòi hỏi kỹ năng thiết kế cao.
Palindrome số và Toán học - Số 196 và số Lychrel
Palindrome cũng tồn tại trong thế giới số. Các số palindrome như 121, 1331, 12321 có tính chất toán học thú vị. Với bất kỳ số tự nhiên nào, lặp lại thao tác "cộng số đó với số đảo ngược các chữ số" thường dẫn đến số palindrome. Ví dụ: 59 → 59 + 95 = 154 → 154 + 451 = 605 → 605 + 506 = 1111 (số palindrome).
Tuy nhiên, khi thực hiện thao tác này với số 196, dù lặp lại hàng triệu lần vẫn không đạt được số palindrome. Một số được phỏng đoán rằng dù lặp lại thao tác bao nhiêu lần cũng không bao giờ trở thành palindrome được gọi là số Lychrel, và 196 là ứng viên nhỏ nhất trong hệ thập phân. Quá trình tìm kiếm có một lịch sử dài: năm 1990, khoảng 2,42 triệu lần lặp đạt tới một triệu chữ số; năm 2006, số chữ số đạt 300 triệu; và năm 2011, một tỷ lần lặp cho ra một số dài khoảng 413,93 triệu chữ số, nhưng vẫn không có palindrome nào xuất hiện (tính đến năm 2026). Điều cần lưu ý ở đây là số lần lặp và số chữ số là hai chuyện khác nhau. Mỗi phép cộng chỉ làm tăng nhiều nhất một chữ số, nên "đã tính một tỷ phép cộng" không có nghĩa là "đã đạt tới một tỷ chữ số". Và số chữ số có được kéo dài đến đâu thì điều đó cũng chỉ nói lên rằng chưa tìm được phản ví dụ, chứ không chứng minh được 196 thực sự là số Lychrel. Chỉ riêng việc đếm ký tự (chữ số) không thể giải quyết câu hỏi này, và đó chính là chỗ bộc lộ chiều sâu toán học nằm sau khái niệm đơn giản của palindrome.
Semagram - Thông điệp ẩn trong các yếu tố phi văn bản
Là một dạng trò chơi chữ, semagram cũng đáng được đề cập. Semagram ẩn thông điệp không phải trong bản thân ký tự mà trong trang trí hoặc bố cục của ký tự. Ví dụ, làm đậm nhẹ một số ký tự cụ thể trong thư, hoặc thay đổi tinh tế khoảng cách giữa các từ nhất định để truyền thông điệp bí mật.
Trong thế giới kỹ thuật số, nghiên cứu đã được thực hiện về việc nhúng thông tin bit bằng cách thao tác kerning phông chữ (khoảng cách ký tự). Kerning bình thường đại diện cho "0" và kerning hơi rộng hơn đại diện cho "1", nhúng dữ liệu nhị phân xuyên suốt tài liệu. Kỹ thuật này ẩn thông điệp mà không thay đổi số ký tự, nên không thể phát hiện bằng đếm ký tự.
Lập trình và Trò chơi chữ - Ứng dụng thực tế của ràng buộc ký tự
Những trò chơi chữ này không chỉ là giải trí trí tuệ. Phát hiện palindrome là nền tảng của thuật toán chuỗi và được ứng dụng trong phân tích trình tự DNA (trình tự palindrome là vị trí nhận diện của enzyme cắt giới hạn). Phát hiện anagram liên quan đến thiết kế hàm băm, và pangram được dùng để hiển thị xem trước phông chữ.
| Trò chơi chữ | Ràng buộc ký tự | Độ phức tạp | Ứng dụng thực tế |
|---|---|---|---|
| Palindrome | Đối xứng trước-sau | Phát hiện: O(n) | Phân tích trình tự DNA, xác thực dữ liệu |
| Anagram | Sắp xếp lại cùng ký tự | Phát hiện: O(n log n) | Mật mã học, hàm băm |
| Pangram | Chứa tất cả ký tự | Phát hiện: O(n) | Xem trước phông chữ, luyện gõ |
| Lipogram | Loại trừ ký tự cụ thể | Phát hiện: O(n) | Phân tích văn phong, xác định tác giả |
| Ambigram | Đối xứng thị giác | - | Thiết kế logo, mật mã |
Đếm độ dài chuỗi bằng công cụ đếm ký tự là điểm khởi đầu cho tất cả các trò chơi chữ này. Số ký tự palindrome là chẵn hay lẻ thay đổi cách xử lý ký tự giữa, tăng số ký tự anagram gây bùng nổ tổ hợp, và kích thước bộ ký tự trở thành ràng buộc cho pangram. Phía sau hành động đơn giản đếm ký tự là thế giới rộng lớn của lý thuyết tổ hợp và độ phức tạp tính toán.