Chan
BAN USERclass Program
{
static void Main(string[] args)
{
string[] rawData = {"Nick Fury : Tony Stark, Maria Hill, Norman Osborn",
"Tony Stark: Pepper Potts, Nick Fury",
"Maria Hill : Hulk, Rogers, Nick Fury",
"Hulk : Tony Stark, HawkEye, Rogers",
"Norman Osborn: Tony Stark, Thor",
"Rogers : Thor",
"Agent 13 : Agent-X, Nick Fury, Hitler",
"Thor: HawkEye, BlackWidow",
"BlackWidow:Hawkeye",
"Agent-X : Agent 13, Rogers"
};
var agent = new AgentFilter(rawData, "Nick Fury");
Console.WriteLine(String.Join(",", agent.Hydra));
Console.Read();
}
}
===============
public class AgentFilter
{
private IDictionary<string, IList<string>> data;
public AgentFilter(string[] rawData,string rootAgent)
{
Load(rawData);
GetAgentTrustedBy(rootAgent);
GetHydra();
}
private void Load(string[] rawData)
{
data = new Dictionary<string, IList<string>>();
foreach (var d in rawData)
{
string[] senderAndReceiver = d.Split(':');
IList<string> receiver = senderAndReceiver[1].Split(',');
if (!data.ContainsKey(senderAndReceiver[0].Trim()))
{
data.Add(senderAndReceiver[0].Trim(), receiver.Select(x=>x.Trim()).ToList<string>());
}
}
}
private void GetAgentTrustedBy(string agent)
{
if (!Shield.Contains(agent))
Shield.Add(agent);
else
return;
if (data.ContainsKey(agent)) {
foreach (var trustedAgent in data[agent])
GetAgentTrustedBy(trustedAgent);
data.Remove(agent);
}
}
private void GetHydra()
{
foreach (var sender in data)
foreach(var hydra in sender.Value)
if(!Shield.Contains(hydra))
Hydra.Add(hydra);
}
public IList<string> Shield = new List<string>();
public IList<string> Hydra = new List<string>();
}
HYPOTHESIS:
- Chan February 27, 2015- Every agent can send message(s) to others
- A sender will send to only agent(s) who s/her trust.
=> Conclusion, if there is no one send a message to that agent s/he is considered as HYDRA.
Based on sample data we got the following tree of SHIELD:
-----------------------------
Nick Fury
|_Tony Stark
| |_Pepper Potts
| |_Nick Fury
|_Maria Hill
| |_Hulk
| | |_Tony Stark
| | |_HawkEye
| | |_Rogers
| | |_Thor
| | |_HawkEye
| | |_BlackWidow
| | |_Hawkeye
| |_Rogers
| |_Nick Fury
|_Norman Osborn
|_Tony Stark
|_Thor
List of agent not in a trusted tree (HYDRA):
-------------------------------------
Agent 13, Agent-X, Hitler
PROCESS STEPS:
- Get all agents from raw data.
- From root add trusted agent, based who s/he sent, to the tree.
- Filter out all trusted agent.