/// <summary> /// Randomly sets an input word and makes the correct object visible /// </summary> private void CreateInputWords() { m_inputWords = (InputWords)Random.Range(0, 3); switch (m_inputWords) { case (InputWords.LUMBER): m_lumberInput.SetActive(true); break; case (InputWords.WOOD): m_woodInput.SetActive(true); break; case (InputWords.TIMBER): m_timberInput.SetActive(true); break; default: Debug.LogError("Input word randomisation went wrong on woodchipper"); break; } }
public IActionResult Index(InputWords words) { //10 watkow, 11s int threads = 16; var database = new WebsiteDataService(); var ways = new List <List <Word_n_Sim> >(); var begin = DateTime.Now; var time = new TimeSpan(0); try { int temp = 0; var result = database.wordnet_go(new List <Word_n_Sim>() { new Word_n_Sim("0", words.BeginWord) }, words.BeginWord, new List <List <Word_n_Sim> >() { }, ref temp, thisLock); result = database.wordnet_go(new List <Word_n_Sim>() { new Word_n_Sim("0", words.EndWord) }, words.EndWord, new List <List <Word_n_Sim> >() { }, ref temp, thisLock); } catch (Exception) { var endtime = DateTime.Now; time = endtime - begin; ViewBag.ways = ways; ViewBag.multiply_simmilarity = 0; ViewBag.time = time; return(View()); } var first_search = new List <Word_n_Sim>(); first_search.Add(new Word_n_Sim("0", words.BeginWord)); var search_lst = new List <List <Word_n_Sim> >(); search_lst.Add(first_search); int length = int.MaxValue; var alrdy_searched = new Dictionary <string, int>(); var tasklist = new List <Task <List <List <Word_n_Sim> > > >(); while (true) { if (tasklist.Count == 0) { if (search_lst.Count == 0 || (search_lst.Count > 0 && search_lst.First().Count >= length)) { //Console.WriteLine("\nPrzerywam!"); break; } } if (tasklist.Count < threads) { if (search_lst.Count > 0 && search_lst.First().Count < length) { var way = search_lst.First(); search_lst.Remove(way); if (way.Count() < length) { if (alrdy_searched.ContainsKey(way.Last().Word) == false) { alrdy_searched.Add(way.Last().Word, way.Count); var task = Task.Run(() => database.wordnet_go(way, words.EndWord, ways, ref length, thisLock)); tasklist.Add(task); } else if (alrdy_searched[way.Last().Word] >= way.Count) { alrdy_searched[way.Last().Word] = way.Count; var task = Task.Run(() => database.wordnet_go(way, words.EndWord, ways, ref length, thisLock)); tasklist.Add(task); } } } } if (tasklist.Count >= threads || search_lst.Count == 0 || (search_lst.Count > 0 && search_lst.First().Count >= length)) { //Console.WriteLine("\nCzekam na zakonczenie " + tasklist.Count + " watkow."); Task.WaitAll(tasklist.ToArray()); foreach (var singletask in tasklist) { var result = singletask.Result; if (result.Count > 0) { search_lst = search_lst.Concat(result).ToList(); } } tasklist = new List <Task <List <List <Word_n_Sim> > > >(); } } NumberFormatInfo provider = new NumberFormatInfo(); provider.NumberDecimalSeparator = "."; List <double> multiply_simmilarity = new List <double>(); foreach (var way in ways) { double multiply = 1; foreach (var step in way) { if (step.Similarity != "0") { multiply *= Convert.ToDouble(step.Similarity, provider); } } multiply_simmilarity.Add(multiply); } var end = DateTime.Now; time = end - begin; Console.WriteLine("\n" + words.BeginWord + " -> " + words.EndWord); Console.WriteLine("Time: " + time.TotalSeconds); ViewBag.ways = ways; ViewBag.multiply_simmilarity = multiply_simmilarity; ViewBag.time = time; return(View()); }