using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Test
{
public static void Main()
{
var researchTin = new Research { Name = "Tin" };
var researchFire = new Research { Name = "Fire" };
var researchWater = new Research { Name = "Water" };
var researchIron = new Research { Name = "Iron" };
var researchSteam = new Research { Name = "Steam" };
Dictionary<Research, List<Research>> requiredResearches =
new Dictionary<Research, List<Research>>();
var req = new Research[] { researchTin };
requiredResearches.Add(researchIron, req.ToList());
req = new Research[] { researchFire, researchWater, researchIron };
requiredResearches.Add(researchSteam, req.ToList());
var playerResearches = new List<Research>();
playerResearches.Add(researchFire);
//playerResearches.Add(researchWater);
//playerResearches.Add(researchTin);
var chain = GetReq(requiredResearches, researchSteam);
var missing = chain.Where (c => playerResearches.Where (r => r == c).Any () == false).Distinct();
foreach(var miss in missing)
{
Console.WriteLine(miss.Name);
}
}
public static IList<Research> GetReq(Dictionary<Research, List<Research>> reqs, Research target)
{
var chain = new List<Research>();
if(reqs.ContainsKey(target))
{
foreach(var item in reqs[target])
{
chain.Add(item);
chain.AddRange(GetReq(reqs, item));
}
}
return chain;
}
}
public class Element
{
}
public class Research
{
public string Name { get; set; }
}