基本的には、単にチャットファイルを検索しているだけです。ROシステムが自動生成している定型フォーマットなので、わりと簡単です。『モンスターを全滅させた。宝箱が出現した』となっている行を、終端として利用します。このログ以降〜最新行が、現在の宝箱用のヒント、ということです。先頭が『......[』で始まる行が、いわゆるヒントの行。複数プレイヤー==ヒント行も複数行ありうるので、とりあえずバッファにため込みます。今回の場合、ヒント・罠名に出てくる文字に「同じ文字が複数回入りうる」ことが面倒でした。2人のヒントが以下だった場合。最終的なヒントはどうするか。してくししん期待値は、「くししてん」。単純に足し算しちゃうと、「し」が多くなりすぎる。「すでにあるものは足さない」という考え方だと、うまくやらないと2個目の「し」が載せられない。人間だと直感的にできるものですが、プログラムにするにはアルゴリズムを考えないとならんので。結局友瀬は、いろいろ考えて、以下のようなやりかたを実施しました。うまい手はあるかもしれんけど。1回のヒント文字群は1文字ずつソートしておく。ROから受けたヒントが「て」「ん」「し」なら、「してん」にソート。左ほど『若い』ようにしておくわけです。1つの「マージ元」に対して、「追加ヒント」をマージするんだけど、ここが肝。1手ずつ、動きを説明する。「マージ元」および「追加ヒント」、それぞれ先頭の1文字目に注目する。注目している1文字同士を、比較する。「一致」した場合、「すでに知っているヒント」。「最終結果」にこの文字を追加して、「マージ元」と「追加ヒント」、それぞれ注目点を1つ後ろにずらす。これによって追加ヒントが全て終わったら、マージ元の現在位置から後ろの全てを「最終結果」に追加して、マージ終了。これによってマージ元が全て終わったら、追加ヒントの現在位置から後ろの全てを「最終結果」に追加して、マージ終了。一致せず、かつマージ元のほうが「若い」場合、「マージ元だけが知っているヒント」。マージ元の現在文字を「最終結果」に追加、マージ元の注目文字を1文字進めて、2に戻る。ここでマージ元が最後になる可能性がある。追加ヒントの現在位置から後ろの全てを「最終結果」に追加して、マージ終了。一致せず、かつ追加ヒントのほうが「若い」場合、「追加ヒントだけが知っている」ヒント。追加ヒントの現在文字を「最終結果」に追加、追加ヒントのの注目文字を1文字進めて、2に戻る。ここで追加ヒントが最後になる可能性がある。マージ元の現在位置から後ろの全てを「最終結果」に追加して、マージ終了。マージ元:くししん追加ヒント:して→期待される最終結果:くししてん上記ルールに従って、1文字ずつチェックしていく。上記「マージ元のほうが若い」ケース。「く」を最終文字に追加して、マージ元注目点を2文字目に。上記「一致」のケース。「し」を最終文字に追加して、マージ元注目点を3文字目、ヒント注目点を2文字目に。上記「マージ元のほうが若い」ケース。「し(3文字目)」を最終文字に追加して、マージ元注目点を4文字目に。上記「追加ヒントのほうが若い」ケース。「て」を最終文字に追加して、追加ヒント注目点を1つ後ろに・・・で、追加ヒント終了。マージ元の残りのヒントを全部マージして終了。上記ヒントのマージに近い形で「1文字ずつ」比較するように実装しました。同じ文字が複数回続くケースも、上記と同じように「進める」感じで処理したわけです。考えると、このマッチングは正規表現でできたな(笑)そっちのほうがスマートだ(^^;;;まあそんな感じ。編集操作バックアップある名言。