ガレージセールで、格安の素敵なヴィンテージ・タイプライターを見つけました! わくわくしながら家に帰り、紙を1枚入れて、さっそく打ち始めます。 ところが、出てきた文字を見てわくわくはしぼんでしまいます。単語がすべて文字化けしているのです! たとえば、"post"の代わりに"stop"、"stale"の代わりに"least"と印字されます。 慎重にもう一度試してみますが、今度は"spot"と"slate"が印字されます。 いろいろ試しているうちに、文字が印字される前にランダムな遅延が入り、それで順番がめちゃくちゃになることがわかりました。 こんなに安かった理由が、今ならわかります!
この癖を利用すればアナグラムを作れることに気づきます。アナグラムとは、ある単語の文字を並べ替えてできる別の単語のことです。 この発見に満足したあなたは、その日一日じゅう、何百ものアナグラムを作って過ごします。
目標の単語と候補の単語の集合が与えられたとき、候補の中から目標のアナグラムであるものだけを選び出すのが課題です。
アナグラムとは、文字を並べ替えて新しい単語を作ったものです。たとえば、"owns"は"snow"のアナグラムです。
ある単語がそれ自身のアナグラムになることはありません。たとえば、"stop"は"stop"のアナグラムではありません。
目標の単語と候補は、1文字以上のASCII英字(A-Zとa-z)からなる単語です。
小文字と大文字は同じものとして扱います。たとえば、"PoTS"は"sTOp"のアナグラムですが、StoPはsTOpのアナグラムではありません。
アナグラムの集合とは、候補の集合のうち目標の単語のアナグラムであるものだけを集めた部分集合です(順序は問いません)。
アナグラムの集合に含まれる単語は、候補の集合と同じ大文字・小文字のままでなければなりません。
目標が"stone"、候補が"stone"、"tones"、"banana"、"tons"、"notes"、"Seton"のとき、アナグラムの集合は"tones"、"notes"、"Seton"です。
アナグラムは、候補の単語に並んでいるのと同じ順番で返す必要があります。