ワードパズルの日本語版はなぜ難しいか:文字の数の問題
遊びを見つける執筆にClaudeを使用しています。

英語の5文字当てゲームを、そのまま日本語に移す場面を考えてみます。マスを5つ用意し、ひらがな5文字の言葉を当てることにします。見た目は同じ構造ですが、遊んでみると「候補が絞れない」「どこかが不公平に感じる」という違和感が出やすくなります。原因は、日本語の「1マス」が運ぶ情報が英語の1文字とは違うことにあります。 この記事では、その違いを自分で数えて確かめる手順を示します。数える対象は、語彙リスト、文字の出現の偏り、判定ルールの3つです。結果の数値はこの記事には載せません。手元のリストで数えれば、手元のゲームについての答えが出ます。
この記事の目次
同じ「5マス」でも、マスが運ぶ情報が違う
英語のアルファベットは26文字で、文字と音の対応はゆるやかです。単語の長さを数えるときも、基本的には文字数を数えれば足ります。
日本語は事情が複雑です。ひらがなの基本の46文字に加えて、濁点・半濁点のつく文字があります。「ゃゅょ」「っ」のような小さい文字や、長音を表す「ー」もあります。さらに、漢字を使うなら常用漢字だけで2,136字あり、1つの漢字に複数の読みがあります。
つまり、マス1つを何に対応させるかを決めた時点で、パズルの性格がほぼ決まります。
- マス=かな1文字にすると、「きゃ」は2マスを使います。
- マス=拍(モーラ、ひと続きで一拍と数える音の単位)にすると、「きゃ」は1マスです。
- マス=漢字1字にすると、読みの当てっこから、字そのものの当てっこに変わります。
どれが正しいという話ではありません。この選択が、出題できる言葉の幅と、プレイヤーの推理のしやすさを変えます。
数える前に決める三つの単位
集計は、単位を先に決めておかないと途中でぶれます。次の3つを区別して記録します。
- 文字数、数え方:画面に出る文字を1つずつ数える、「きゃんぷ」の場合:4
- 拍数、数え方:拗音(きゃ)は1、促音(っ)・撥音(ん)・長音(ー)は各1、「きゃんぷ」の場合:3
- 読みの数、数え方:同じ表記に読みがいくつあるか(漢字語向け)、「きゃんぷ」の場合:語ごとに確認
文字数と拍数がずれるのは、小さい「ゃゅょぁぃぅぇぉ」が前の文字にくっつくときです。「っ」「ん」「ー」は独立した1拍なので、拍数では1つとして数えます。
英語では、文字数と音の数のずれは別の形で現れます。たとえば綴りと発音が一致しない語があります。ここを深追いすると話が散らかるので、比較する英語側は「文字数」だけで数えて構いません。
手順1:語彙リストを作り、長さを三通りで数える
準備するものは、日本語の言葉のリストです。出題候補にしたい単語を、ひらがなの読みで100語以上並べます。リストの出どころは、自分で書き出したものでも、利用条件を確認した公開の語彙集でも構いません。権利や利用条件は、配布元の案内で確認してください。
次に、表計算ソフトに次の列を作ります。
- 読み(ひらがな)
- 文字数
- 拍数
- 文字数と拍数が違うか(はい/いいえ)
拍数の数え間違いを減らすには、下の短いスクリプトが使えます。ブラウザの開発者ツールのコンソールに貼り付けて実行します。
const small = 'ゃゅょぁぃぅぇぉゎ';
function splitMora(word) {
const out = [];
for (const ch of word) {
if (small.includes(ch) && out.length) out[out.length - 1] += ch;
else out.push(ch);
}
return out;
}
function freq(words) {
const t = {};
for (const w of words)
for (const m of splitMora(w)) t[m] = (t[m] || 0) + 1;
return Object.entries(t).sort((x, y) => y[1] - x[1]);
}
const words = ['さかな', 'きゃんぷ', 'こーひー']; // ここに自分のリストを入れます
words.forEach(w => console.log(w, [...w].length, splitMora(w).length));
console.log(freq(words));このスクリプトは、「ゃゅょ」などの小書き文字を直前の文字に結合して1拍と数えます。「っ」「ん」「ー」は独立した1拍として扱います。
実行すると、各語の文字数と拍数が並びます。そのあとに、拍ごとの出現回数が多い順に表示されます。
読み取り方
次の2点を、自分のリストで比べます。
- 文字数5の語と拍数5の語を、それぞれ何語集められるか。「5マスで遊べる語」の数が、単位の選び方でどれだけ変わるかが分かります。
- 文字数と拍数が違う語が、リスト全体のどれくらいの割合か。割合が大きいほど、単位の選択が出題の幅に影響します。
手順2:文字の偏りを調べる
次に問うのは、「最初の一手で何を入力すればよいか」が分かりやすいかどうかです。あるマスにどの文字が来やすいかの偏りが大きいと、推理は楽になります。偏りが小さいと、手がかりが得にくくなります。
先のスクリプトの freq の出力を使い、次の2つを記録します。
- 出現回数の上位10拍が、全体の何割を占めるか(上位10拍の合計÷全拍数)
- 位置別の出現。語頭の1拍目だけを集めて、同じ集計を行います
比べる相手として、英語の5文字語のリストを用意します。こちらも利用条件を確認したうえで、同じ集計をしてください。見るのは、上位10文字(拍)が占める割合です。
- 日本語の割合が英語より低ければ、同じ手数で得られる手がかりが薄く、候補が絞れにくいと考えられます。
- 高ければ、偏りが推理の足がかりになります。
注意点があります。日本語のかなは音の種類が多く、1拍ごとの出現頻度はばらけやすい、というのは仮説にすぎません。必ず自分のリストで数えて判断してください。また、リストの語の選び方(名詞だけ、外来語を含む、など)でも結果は動きます。条件をそろえずに比べないでください。
濁点の扱いも、ここで決めておきます。「か」と「が」を別の文字として数えるか、「か」に濁点がついたものとして数えるかです。別文字にすれば選択肢が増えます。同じ文字の変形として扱えば、濁点の有無が手がかりとして独立します。両方で集計して、上位10拍の割合がどう変わるかを見ると、設計の違いがはっきりします。
手順3:判定のルールを試す
出題だけでなく、判定にも日本語特有の難しさがあります。色や記号で「位置が合っている」「文字は含まれるが位置が違う」「含まれない」を返す方式を考えてみます。次の場面で判定が割れます。
- 重複する文字:答えが「こころ」で、予想が「ここここ」のように同じ拍が重なるとき、何回まで「含まれる」と返すか。
- 濁点の違い:答えが「ばなな」で、予想が「はなな」のとき、「ば」と「は」は別物として扱うか。
- 長音と小書き:「こーひー」の「ー」を、前の母音の繰り返し(「こおひい」)と同一視するか。
- 入力経路:スマートフォンのかなキーボードとパソコンのローマ字入力では、変換前の文字列が違います。確定前の入力を判定対象にするかどうかを決めておく必要があります。
判定の関数は、次のように書けます。位置が合う拍を先に確定し、残りの拍だけで「含まれる」を数える二段階の方式です。
function judge(answer, guess) {
const a = splitMora(answer), g = splitMora(guess);
const res = g.map(() => 'x');
const left = {};
a.forEach((c, i) => {
if (g[i] === c) res[i] = 'G';
else left[c] = (left[c] || 0) + 1;
});
g.forEach((c, i) => {
if (res[i] === 'x' && left[c] > 0) { res[i] = 'Y'; left[c]--; }
});
return res.join('');
}
console.log(judge('さかな', 'なかさ')); // YGY になれば正しく動いていますG は位置も合っている拍、Y は含まれるが位置が違う拍、x は含まれない拍です。splitMora を先に貼り付けてから実行してください。
記録の取り方
答えを1つ決め、予想を10通り用意します。重複する拍を含む予想、濁点だけが違う予想、長音を含む予想を混ぜます。それぞれの判定結果を、自分が期待した結果と並べて記録します。期待と食い違った行が、ルールを決め直すべき箇所です。
結果の読み方と起こりやすい誤り
ここまでの集計から、題名の問いに対する自分なりの答えが出ます。判断の目安は次のとおりです。
- 文字数5の語と拍数5の語が大きく食い違うなら、マスの単位の選択が出題の幅を決めています。拍単位にすると、小書き文字を含む語を自然に出題できます。
- 上位10拍の割合が英語より低いなら、最初の手がかりが得にくい設計です。出題語を絞るか、ヒントの段階を足すことで補えます。
- 判定の確認で食い違いが多いなら、濁点と長音の扱いをプレイヤーに先に示す必要があります。
誤りやすい点も挙げておきます。
- 単位を途中で変える:文字数で数え始め、途中から拍数に変えると、表が比べられなくなります。
- リストの偏りを見落とす:外来語が多いリストは、長音や小書き文字の出現が増えます。語の種類を記録しておきます。
- 英語側の条件がそろっていない:出題用の語だけのリストと、入力を許可する語まで含むリストを混ぜないでください。分けるかどうかは設計の選択ですが、比べるときはそろえる必要があります。
- 少ない語数で結論を出す:数十語では偏りが偶然に左右されます。語数を増やして、結果が安定するかも確かめてください。
次の行動
まず手元に100語程度のリストを作り、文字数と拍数を別々に数えてみてください。そのうえで、judge に濁点と長音を含む予想を入れて、自分が決めたルールで期待どおりに動くかを確認します。
この集計から決めた設計で小さなワードパズルを作ったら、アソバースに投稿できます。HTMLファイル、またはZIPでアップロードし、入力、表示の確認、公開の3段階で進めます。遊び方の欄に判定ルール(濁点・長音の扱い)を書いておくと、遊ぶ人が迷いにくくなります。

