最終更新:

回文 / アンビグラム / アナグラム - 文字数が生む言葉遊びの数学

約 7 分で読めます

「しんぶんし」を逆から読んでも「しんぶんし」。この単純な遊びの裏には、組み合わせ論、計算量理論、そして言語の構造に関する深い数学が潜んでいます。回文、アナグラム、パングラム、リポグラム。文字の並び順や文字数に制約を課すことで生まれるこれらの言葉遊びは、プログラミングコンテストの定番問題であり、暗号学の基礎でもあり、そして何より人間の言語能力の限界に挑む知的な遊戯です。

回文 - 前から読んでも後ろから読んでも同じ

回文 (palindrome) は、文字列を前から読んでも後ろから読んでも同じになるテキストです。日本語では「竹やぶ焼けた」「トマト」「新聞紙」などが有名です。英語では「racecar」「madam」「A man, a plan, a canal: Panama!」が古典的な例として知られています。

日本語の回文には、英語にはない判定の揺れがあります。濁点・半濁点の扱いです。対称の位置に「か」と「が」のような清音・濁音の組が来たとき、濁点を無視する立場ではこれを同じ文字とみなして回文と認め、厳密に区別する立場では認めません。よく引かれる「竹やぶ焼けた」は、かなに開くと「たけやぶやけた」の 7 文字がそのまま左右対称になるため、この寛容さに頼らずに成立します。基準の違いが結果を分けるのは、対称の位置で濁点の有無が食い違う作品のほうです。この「ゆるさ」が日本語の回文の幅を広げている一方で、日本語テキストの基本ルールの観点からは、判定基準を先に決めないと同じ作品が回文にも非回文にもなるという厄介さを抱えています。

回文は短い一句にとどまらず、全文が回文になった長編小説も書かれています。英語ではデイヴィッド・スティーヴンスの「Satire: Veritas」(1980 年・58,795 文字) と、ローレンス・レヴィンの「Dr Awkward & Olson in Oslo」(1986 年・31,954 語) の 2 作が知られています。文全体を対称にするという制約を数万語にわたって守り切るため、こうした作品では文意の自然さが犠牲になりやすく、読み物としての可読性と制約の厳しさは正面から衝突します。

回文判定のアルゴリズム - O(n) の美しさ

プログラミングにおいて、文字列が回文かどうかを判定するアルゴリズムは、計算量理論の入門として最適な題材です。最もシンプルな方法は、文字列を反転させて元の文字列と比較すること。これは O(n) の時間計算量と O(n) の空間計算量で実現できます。

より効率的な方法は、2 つのポインタを文字列の両端に置き、中央に向かって 1 文字ずつ比較していく手法です。この方法なら O(n) の時間計算量と O(1) の空間計算量で判定できます。

Manacher のアルゴリズムは、文字列中の全ての回文部分文字列を O(n) で検出できる高度なアルゴリズムです。1975 年にグレン・マナッカーが発表したこのアルゴリズムは、各位置を中心とする最長回文の半径を効率的に計算します。ナイーブな方法では O(n²) かかる処理を、以前に計算した回文の対称性を利用して O(n) に削減するのが核心的なアイデアです。

アルゴリズム時間計算量空間計算量特徴
文字列反転 + 比較O(n)O(n)実装が最もシンプル
2 ポインタ法O(n)O(1)追加メモリ不要
再帰的判定O(n)O(n) (スタック)関数型プログラミング向き
最長回文部分文字列 (Manacher)O(n)O(n)全ての回文部分文字列を検出
回文分割 (DP)O(n²)O(n²)最小分割数を求める

プログラミングコンテスト (AtCoder、LeetCode など) では、回文に関する問題が頻出します。LeetCode の「Longest Palindromic Substring」(最長回文部分文字列) は、面接問題としても定番中の定番です。正規表現の文字数と設計で触れたパターンマッチングの知識も、回文検出に応用できます。

日本語の回文判定では、追加の前処理が必要です。濁点・半濁点の正規化、長音記号「ー」の扱い、拗音 (「きょ」など) を 1 文字として扱うか 2 文字として扱うかの判断。これらのルールは回文コミュニティによって異なり、統一された基準は存在しません。プログラムで日本語の回文を判定する場合、どのルールセットを採用するかを明示的に定義する必要があります。

アナグラム - 文字の並べ替えが生む組み合わせ爆発

アナグラム (anagram) は、ある単語や文の文字を並べ替えて別の意味のある単語や文を作る言葉遊びです。英語の有名な例として「listen」と「silent」、「astronomer」と「moon starer」があります。日本語でも「とけい (時計)」と「けいと (毛糸)」のように、ひらがなに開いてから並べ替えると別の語になる組み合わせがあります。

n 文字の単語から作れるアナグラムの理論的な組み合わせ数は n! (n の階乗) 通りです。ただし、同じ文字が複数含まれる場合は重複を除く必要があります。

文字数全て異なる文字の場合 (n!)例1 秒に 100 万通り試した場合の総当たり時間
3 文字6 通りcat → act一瞬
6 文字720 通りlisten → silent, enlist, tinsel一瞬
7 文字5,040 通りthicken → kitchen一瞬
10 文字3,628,800 通りastronomer → moon starer約 3.6 秒
15 文字約 1.3 兆通り-約 15 日

表の「例」に挙げた astronomer は「o」と「r」が 2 回ずつ現れるため、実際に区別できる並べ替えは 10! を重複で割った 907,200 通りになります。文字数が増えると候補の数は階乗で膨らみますが、辞書に載っている語の数がそれに比例して増えるわけではありません。つまり長い語ほど「当たり」の密度は下がり、1 語への並べ替えは見つかりにくくなります。そのため長い語のアナグラムは、astronomer → moon starer のように複数語の句へ開く形で成立させるのが定石です。

プログラミングでアナグラムを判定する最も効率的な方法は、2 つの文字列の文字をソートして比較することです。「listen」をソートすると「eilnst」、「silent」をソートしても「eilnst」になるため、アナグラムであると判定できます。この方法の時間計算量は O(n log n) です。さらに高速な方法として、各文字の出現回数をカウントして比較する O(n) のアルゴリズムもあります。

アナグラムは暗号学の歴史とも深い関係があります。17 世紀の科学者たちは、発見の優先権を主張するためにアナグラムを使いました。ガリレオは土星の環の発見を「smaismrmilmepoetaleumibunenugttauiras」というアナグラムとして公表し、後にこれが「Altissimum planetam tergeminum observavi」(最も高い惑星が三重であることを観察した) のアナグラムであると明かしました。

パングラム - 全ての文字を使い切る挑戦

パングラム (pangram) は、アルファベットの全文字を少なくとも 1 回ずつ使った文です。英語で最も有名なパングラムは「The quick brown fox jumps over the lazy dog」で、35 文字 (スペース除く) で 26 文字のアルファベットを全て含んでいます。

完全パングラム (perfect pangram) は、各文字をちょうど 1 回ずつ使った文です。英語の完全パングラムは 26 文字ちょうどで構成される必要があり、意味の通る文を作ることは極めて困難です。「Mr Jock, TV quiz PhD, bags few lynx」(26 文字) は、やや無理のある文ですが完全パングラムの一例です。

日本語には、世界で最も美しいパングラムが存在します。「いろは歌」です。

「いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす」

この歌は、当時使われていた 47 文字のかな文字を全て 1 回ずつ使い切った完全パングラムであり、しかも仏教的な無常観を詠んだ意味のある和歌になっています。作者は不明で、成立時期も 10 世紀末から 11 世紀半ばの間とされるにとどまります (現存最古の記載は 1079 年の文献)。作者の名が残らないまま千年近く読み継がれてきたこの歌は、数学的制約と文学的美しさを両立させた人類の知的遺産です。

現代日本語のかな文字は 46 文字 (「ゐ」「ゑ」が廃止され「ん」が追加) ですが、いろは歌に「ん」は含まれていません。現代のかな 46 文字で完全パングラムを作る試みは多くの人が挑戦していますが、いろは歌ほど美しい作品は生まれていません。制約が厳しいほど、それを満たす作品の価値は高くなるのです。

英語のパングラムは、タイピング練習やフォントの見本表示に実用的に使われてきました。とくに「The quick brown fox jumps over the lazy dog」は、書体見本の定番文として広く流布しています。スペースを除いて 35 文字のなかに 26 文字すべてを収めているため、書体の全文字の形を一目で見比べられるのが理由です。ただしこの文に現れる大文字は先頭の T だけで、残りの大文字や数字・記号の形は分かりません。実際の書体選定では、この文に加えて数字と記号を含む見本を併用することになります。文字数の少なさと確認できる範囲の広さは、ここでもトレードオフの関係にあります。

パングラムの種類言語文字数使用文字セット
The quick brown fox...英語35 文字a-z (26 文字、重複あり)
Mr Jock, TV quiz PhD...英語26 文字a-z (完全パングラム)
いろは歌日本語47 文字かな 47 文字 (完全パングラム)
Portez ce vieux whisky...フランス語37 文字a-z (26 文字、重複あり)

リポグラム - 特定の文字を使わない制約

リポグラム (lipogram) は、パングラムとは逆に、特定の文字を一切使わずに文章を書く制約です。最も有名なリポグラム作品は、フランスの作家ジョルジュ・ペレックが 1969 年に発表した小説「La Disparition」(消失) です。この約 300 ページの小説は、フランス語で最も頻繁に使われる文字「e」を一切使わずに書かれています。

英語では、アーネスト・ヴィンセント・ライトが 1939 年に発表した「Gadsby」が有名です。約 50,000 語の小説全体で「e」を使っていません。英語のテキストにおける「e」の出現頻度は約 12.7% であり、最も頻繁に使われる文字を排除して長編小説を書くことは、驚異的な言語能力を要求します。

絵文字の文字数カウントの記事で解説した Unicode の世界では、使える文字が 14 万文字以上あるため、特定の文字を避けること自体は容易です。しかし、自然言語の限られた文字セットの中で特定の文字を排除しながら意味の通る文章を書くことは、文字数の制約とは異なる次元の知的挑戦です。

アンビグラム - 回転しても読める文字デザイン

アンビグラム (ambigram) は、文字列を 180 度回転させたり、鏡に映したりしても読める (同じ単語または別の単語として) デザインです。ダン・ブラウンの小説「天使と悪魔」で広く知られるようになりました。

アンビグラムは純粋な文字数の問題ではなく、文字の視覚的な対称性を利用したデザインです。英語のアルファベットでは、大文字の「A」「H」「I」「M」「O」「T」「U」「V」「W」「X」「Y」が左右対称、「H」「I」「N」「O」「S」「X」「Z」が 180 度回転しても同じ形に見えます。ここで見落としやすいのは、回転しても読める単語を作るには「1 文字ずつ元の形に戻る」ことと「並び順が反転しても語として成立する」ことの両方が必要だという点です。「NOON」「SOS」は回転対称の文字だけで書かれ、しかも語自体が回文なので、特別な意匠を加えなくても条件を満たします。

「SWIMS」はさらに一歩進んだ例です。W と M はそれぞれ単独では 180 度回転しても元の形に戻りませんが、回転すると互いの形になります。S・W・I・M・S を反転して読み直すと再び S・W・I・M・S になるため、この語も回転対称として読めるわけです。単独で対称な文字を探すだけでなく、回転で入れ替わる文字の組を見つけることが、アンビグラム設計の勘所になります。

この表現を切り開いたのは、グラフィックデザイナーのジョン・ラングドン (1946〜2026 年) です。彼は 1972 年に「heaven」を「逆さに読める語」として描き、同じ着想に別途たどり着いたスコット・キムと並ぶ先駆者になりました。「アンビグラム」という呼び名自体は、1984 年にダグラス・ホフスタッターが与えたものです。ラングドンはダン・ブラウンの小説「天使と悪魔」のアンビグラムを手がけており、同作の主人公ロバート・ラングドンは彼を着想の一部にしているとされます。文字数が少ないほどアンビグラムの設計は容易ですが、長い単語や文のアンビグラムを作ることは、高度なデザインスキルを要求する芸術的挑戦です。

数字の回文と数学 - 196 とリシュレル数

数字の世界にも回文は存在します。121、1331、12321 などの回文数 (palindromic number) は、数学的に興味深い性質を持っています。任意の自然数に対して「数字を逆順にした数を足す」操作を繰り返すと、多くの場合は回文数に到達します。例えば、59 → 59 + 95 = 154 → 154 + 451 = 605 → 605 + 506 = 1111 (回文数)。

しかし、196 という数に対してこの操作を行うと、何百万回繰り返しても回文数に到達しません。この操作をいくら繰り返しても回文数にならないと予想される数は「リシュレル数」(Lychrel number) と呼ばれ、196 は 10 進法における最小の候補です。探索の歴史は長く、1990 年に約 242 万回の反復で 100 万桁、2006 年に 3 億桁、2011 年には 10 億回の反復で 4 億 1,393 万桁の数に到達しましたが、回文数は現れていません (2026 年時点)。ここで注意したいのは、反復回数と桁数は別物だということです。1 回の加算で桁数はせいぜい 1 桁増えるため、「10 億回計算した」ことは「10 億桁に達した」ことを意味しません。そして桁数がどれだけ伸びても、それは反例が見つかっていないという事実にとどまり、196 が本当にリシュレル数であることの証明にはなりません。文字数 (桁数) を数え続けるだけでは決着しないという点に、回文という単純な概念が持つ数学的な深さがあります。

セマグラム - 文字以外の要素に隠すメッセージ

言葉遊びの一種として、セマグラム (semagram) も触れておく価値があります。セマグラムは、文字そのものではなく、文字の装飾やレイアウトにメッセージを隠す手法です。例えば、手紙の中で特定の文字だけをわずかに太くしたり、特定の単語の間隔を微妙に変えたりすることで、秘密のメッセージを伝えます。

デジタルの世界では、フォントのカーニング (文字間隔) を操作してビット情報を埋め込む手法が研究されています。通常のカーニングを「0」、わずかに広いカーニングを「1」として、文書全体にバイナリデータを埋め込むのです。この手法は文字数を一切変えずにメッセージを隠せるため、文字数カウントでは検出できません。

プログラミングと言葉遊び - 文字数制約の実用

これらの言葉遊びは、単なる知的娯楽にとどまりません。回文判定は文字列アルゴリズムの基礎であり、DNA 配列の解析 (回文配列は制限酵素の認識部位) にも応用されています。アナグラム検出はハッシュ関数の設計に関連し、パングラムはフォントのプレビュー表示に使われています (「The quick brown fox...」がフォント見本に使われる理由はまさにこれです)。

言葉遊び文字数の制約計算量実用的な応用
回文前後対称判定: O(n)DNA 配列解析、データ検証
アナグラム同じ文字の並べ替え判定: O(n log n)暗号学、ハッシュ関数
パングラム全文字を含む判定: O(n)フォントプレビュー、タイピング練習
リポグラム特定文字を排除判定: O(n)文体分析、著者推定
アンビグラム視覚的対称性-ロゴデザイン、暗号

文字数カウントツールで文字列の長さを測ることは、これらの言葉遊びの出発点です。回文の文字数が偶数か奇数かで中央の文字の扱いが変わり、アナグラムの文字数が増えるほど組み合わせ爆発が起き、パングラムは使用文字セットの文字数が制約条件になります。文字を数えるという単純な行為の先に、組み合わせ論と計算量理論の広大な世界が広がっているのです。

この記事を共有