Пример #1
0
        public static Dictionary <string, (IEnumerable <Teacher> domains, IEnumerable <string> relations)> CreateTestData()
        {
            var teachers = CreateTeachers().ToList();

            var variablesId = CreateVariablesId().ToList();

            var relations = new Dictionary <string, List <string> >();

            // Create simultaneously hours relations
            for (var h = 1; h <= NumOfDayHours; h++)
            {
                var hour      = h.ToString();
                var neighbors = variablesId.Where(v => DomainUtils.DecodeHour(v).Equals(hour)).ToList();

                foreach (var nv in neighbors)
                {
                    relations.Add(nv, neighbors.Where(n =>
                                                      n != nv &&                                                  // Exclude itself
                                                      DomainUtils.DecodeDay(nv).Equals(DomainUtils.DecodeDay(n))) // Same day
                                  .ToList());
                }
            }

            // Create previous/next hours relations
            for (var d = 1; d <= NumOfWeekDays; d++)
            {
                var day       = d.ToString();
                var neighbors = variablesId.Where(v => DomainUtils.DecodeDay(v).Equals(day)).ToList();

                foreach (var @class in Classes)
                {
                    var neighborsOfCurrClass = neighbors.Where(v => DomainUtils.DecodeClass(v).Equals(@class)).ToList();

                    foreach (var nv in neighborsOfCurrClass)
                    {
                        var currentHour = int.Parse(DomainUtils.DecodeHour(nv));
                        relations.First(v => v.Key == nv).Value.AddRange(neighborsOfCurrClass.Where(n =>
                        {
                            var h = int.Parse(DomainUtils.DecodeHour(n));
                            return(h + 1 == currentHour || h - 1 == currentHour);
                        }));
                    }
                }
            }

            var data = new Dictionary <string, (IEnumerable <Teacher> domains, IEnumerable <string> relations)>(
                variablesId.Select(v => new KeyValuePair <string, (IEnumerable <Teacher> domains, IEnumerable <string> relations)>(
                                       v, (teachers, relations.Where(r => r.Key == v).SelectMany(r => r.Value))
                                       ))
                );

            return(data);
        }
Пример #2
0
        private void PrintPlan()
        {
            var current = _schoolCalendarCsp.Status;

            using var ms     = new MemoryStream();
            using var writer = new StreamWriter(ms);

            foreach (var c in SchoolCalendarTestFactory.Classes)
            {
                var @class = current.Where(v => DomainUtils.DecodeClass(v.Key).Equals(c)).ToList();
                var table  = new ConsoleTable("MON", "TUE", "WEN", "THU", "FRI")
                {
                    Options =
                    {
                        EnableCount = false,
                        OutputTo    = writer
                    }
                };

                for (var h = 1; h <= SchoolCalendarTestFactory.NumOfDayHours; h++)
                {
                    var hour = h.ToString();
                    var th1  = @class.Single(v =>
                                             DomainUtils.DecodeDay(v.Key).Equals("1") &&
                                             DomainUtils.DecodeHour(v.Key).Equals(hour)).Value;
                    var th2 = @class.Single(v =>
                                            DomainUtils.DecodeDay(v.Key).Equals("2") &&
                                            DomainUtils.DecodeHour(v.Key).Equals(hour)).Value;
                    var th3 = @class.Single(v =>
                                            DomainUtils.DecodeDay(v.Key).Equals("3") &&
                                            DomainUtils.DecodeHour(v.Key).Equals(hour)).Value;
                    var th4 = @class.Single(v =>
                                            DomainUtils.DecodeDay(v.Key).Equals("4") &&
                                            DomainUtils.DecodeHour(v.Key).Equals(hour)).Value;
                    var th5 = @class.Single(v =>
                                            DomainUtils.DecodeDay(v.Key).Equals("5") &&
                                            DomainUtils.DecodeHour(v.Key).Equals(hour)).Value;

                    table.AddRow(th1.Name, th2.Name, th3.Name, th4.Name, th5.Name);
                }

                writer.WriteLine($"--- CLASS {c} ---");
                table.Write();
                writer.WriteLine();

                writer.Flush();
                ms.Seek(0, SeekOrigin.Begin);

                _testOutputHelper.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
            }
        }