0

私は辞書を持っているとしましょう、辞書は値として辞書を持つ辞書です

dict = {'**Leon**':{'Name':'Leon L','**follow**':['Apple', 'PPy','Jack','Tommy']},'**Jack**':{'name':'Jack Y','**follow**':['Apple','Cruise','Jay']},'**Tommy**':{'name':'Tommy T','**follow**':['Hill']},'**Apple**':{'name':'Apple A','**follow**':['Jack']},**'Cruise'**:{'name':'Cruise L','**follow**':['Jay']}}

**follow**このユーザーがフォローしているユーザーを意味します。たとえば、Leon は Apple、PPy、Jack、Tommy をフォローしています。

タスクを含むクエリファイルがあります。タスクを完了し、ユーザー名のリストを返す必要があります (ユーザー名は dict のキーです。たとえば、「Leon」、「Jack」、「Tommy」)。そのファイルの形式は次のとおりです。

SEARCH
Leon
follow
follow-by # there might be many more follow, and follow-by
FILTER
name-include Leon
follow Apple # format: keyword follow, a space and a username. same apply to follow-by username
follow-by Leon # there might be more name-include, , follow username, follow by username

クエリ ファイルの意味: SEARCH と FILTER はキーワードです。SEARCH の後の行は開始ユーザー名です (リストに入れる必要があるため、リストに user_list という名前を付けます)。検索仕様には 2 つのステップがあります (この場合)。

  1. Leon を含むリストを作成し、このリストを L1 と呼びます
  2. follow は、L1 の各人物 p を p をフォローしている人物に置き換えると言い、L2 を取得します。
  3. follow-by は、L2 の各人物 p を、p がフォローしている人物に置き換えることを示します (p がフォローしている人は、ユーザー プロファイルのフォロー リストに含まれています)。次に、L3 を取得します。

フィルター仕様 (この例):

  1. L3 の各人物 p について、p の名前に「レオン」が含まれている場合、そのユーザーはリストに保持されます。次に、L4 を取得します。
  2. L4 の各人物 p について、p が Apple をフォローし、p がリストに保持される場合、L5 を取得します。
  3. L5 の各人物 p について、p の後に Leon が続く場合、p はリストに保持されます。次に、最終的なリストを取得します。最終的なリストを返す必要があります

タスクを達成できるプログラムを書くのを手伝ってくれる人はいますか?

4

1 に答える 1

0

ステート マシン、より具体的にはpushdown automataを使用することをお勧めします。データ dict を使用してマシンを初期化し、入力ファイルのすべての行について、新しい状態に移行し、指定された作業を実行して、結果をスタックに格納します。すべてのステップは、前のステップから返されたデータにアクセスできます。

于 2010-11-26T07:39:46.343 に答える