- 締切済み
タイピングゲームの曖昧入力アルゴリズムについて教えてください。
こんにちは。 タイピングゲームの曖昧入力のアルゴリズムについて教えてください。 あれはどのように実装しているのでしょうか? すべてのパターンを保存しておくというのはさすがにスマートではないと思うので何かしらで判定してると思うのですが、どのように判定すればいいかわかりません。 わかる方お願いします!
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
ちょっと考えたんだけど, きれいな方法は見付からず.... 「入力パターン」を列挙しておくのが簡単な気がします. つまり 「あ」→[a] 「きゃ」→[kilya]/[kixya]/[kya] のように「文字列」に対応する「入力パターンの集合」を配列で表現して, 問題文をこの配列に対する添字の列に変換する. そうすれば, 入力された文字があっているかどうかはパターンを調べていけばわかるはずです. とはいえ, 問題の複雑さが「プログラムの複雑さ」から「準備しておくデータの複雑さ」に変わっただけなんだよなぁ.
- Tacosan
- ベストアンサー率23% (3656/15482)
はい, そんな感じで作るのが簡単じゃないかなと思います. ただし, まじめに入力パターンをサポートすると想像以上に面倒な気がします. 特に促音・拗音・撥音は「次の文字を見ないと『どのパターンになり得るか』が確定しない」という, いやらしい性質を持っています.
お礼
Tacosanさん、回答ありがとうございます。 自分も頭の中で一番問題視しているのはそこの部分なのです。 C言語で実装したいとは思っているのですが、なかなかいいアルゴリズムというか構造が思い浮かびません。 力押しでもなんとかなるとは思いますができるだけスマートにわかりやすく書きたいのでよろしければ知恵を貸していただけるとありがたいです。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
おそらく, 各「かな文字」に対して入力パターンを作っておき, 「現在着目している文字」についてのみ入力パターンを調べている.... ということを #2 で言おうとしているんじゃないかなぁ. 「じゃ」に対して 7通りの入力が可能であるとすると, 確かに「じゃ」を 3回含む文字列はそれだけで 343通りの入力パターンを持ちます. ですが, 実はこのパターンが全て同時に必要なわけではありません. 最初の「じゃ」に対する入力を待つときには, 2個目や 3個目の「じゃ」がどんな入力パターンであるか気にする必要はありません. そして, 最初の「じゃ」を入力し終えたら, それに対してどのような可能性があったかを覚えておく必要もありません.
お礼
Tacosanさん、回答ありがとうございます。 各文字の対応表を作っておいて、実行中に必要に応じて文字列を構成しなおしていきどんどん判定していくという解釈でよろしいでしょうか?? 確かにそうすると膨大な量のデータは必要にならず、問題を作成する際にもひらがなで入力しておくだけで平気なので簡単かもしれませんね。 もう少しで解決できそうです。ありがとうございました。
- junkUser
- ベストアンサー率56% (218/384)
全パターン入っているのでは?
お礼
junkUserさん、回答ありがとうございます。 全パターン入っているというのは「じゃ」という文字列に対して「jya」「ja」「zya」「jilya」「zilya」「zixya」「jixya」と7種類のパターンを準備しておくということでしょうか? もしもそういうことだとすると 「じゃ」という文字列が複数個文字列中に入っていた場合「じゃ」の入力パターンは 「jya」「ja」「zya」「jilya」「zilya」「zixya」「jixya」 と7種類存在するので7の「じゃ」の個数乗ということで文章中に「じゃ」が2つ入ってきただけで49通り、3つ入ってきたときは343通りと膨大な量のデータを準備しなくてはならないと思うのです。 やはりこれではスマートではない気がしてしまいます。 回答ありがとうございました。
- fifaile
- ベストアンサー率25% (622/2403)
>曖昧入力のアルゴリズム どういったものですか?
補足
fifaileさん、説明足らずですみませんでした。 曖昧入力のアルゴリズムということですが、たとえば「じゃ」と打つ場合 「jya」「ja」「zya」「jilya」「zilya」「zixya」「jixya」 と何通りものパターンが存在します。 タイピングゲームを作った場合「じゃ」を「ja」だけにしか対応させていないと普段それ以外のタイピングをしている人はまず打てません。 そこで「じゃ」と打つ場合などに「jya」「ja」「zya」「jilya」「zilya」「zixya」「jixya」のどのパターンでも正解にするようなアルゴリズムを組みたいのです。 判定はローマ字1文字づつにつけていく方式にしたいのです。 説明が下手ですみませんがよろしくお願いします。
お礼
回答ありがとうございます。 やはり私も力押しでなんとかする意外に思い浮かびません。 こんなくだらない問題に真剣になっていただきありがとうございます。