internal static void Distribute(Tape src, CyclicList<Tape> tapes) { //Log.WriteDistMessage("Dist start"); tapes.Clean(); string line; using (StreamReader reader = new StreamReader(src.FilePath)) while ((line = reader.ReadLine()) != null) { int val = int.Parse(line); if (tapes.IsFirstRun() || val >= tapes.LastValue) { tapes.Add(val); //Log.WriteDistMessage("Adding " + val + " to " + tapes.Index + ".", 4); } else { tapes.ChangeToNextAndAdd(val); //Log.WriteInfoMessage("NIEPOSORTOWANE!" + val); } //Log.WriteDistMessage("Adding " + val + " to " + tapes.Index + ".", 4); } Log.WriteDistMessage("A: " + tapes[0].ShowFile()); Log.WriteDistMessage("B: " + tapes[1].ShowFile()); //Log.WriteDistMessage("Dist end"); }
public CyclicList <T>[] split(Func <T, int> func) { var rawResult = new Dictionary <int, List <T> >(); var keys = new List <int>(); foreach (T t in _args) { int type = func(t); if (!rawResult.ContainsKey(type)) { rawResult.Add(type, new List <T>()); keys.Add(type); } rawResult[type].Add(t); } var result = new CyclicList <T> [rawResult.Count]; keys.Sort(); int i = 0; foreach (int v in keys) { result[i++] = new CyclicList <T>(rawResult[v].ToArray()); } return(result); }
public bool Equals(CyclicList <T> other) { if (ReferenceEquals(other, null)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } if (GetType() != other.GetType()) { return(false); } for (int i = 0; i < Length; ++i) { if (!ReferenceEquals(_args[i], other._args[i])) { if (ReferenceEquals(_args[i], null)) { return(false); } if (!_args[i].Equals(other._args[i])) { return(false); } } } return(true); }
public void AddTest() { CyclicList <int> c = new CyclicList <int>(); c.Add(1); c.Add(2); c.Add(3); }
} // Создаёт новый цикл. список static void FindElIndexByValue(CyclicList list) { // Список, в котором ведётся поиск if (list.Length == 0) // Проверка на пусто список { Console.WriteLine("Ошибка, список пуст!"); return; } Console.Write("Введите значение искомого элемента (>=1): "); int elIndex = list.FindElIndexByValue(Read.Natural()); Console.WriteLine("\nЭлемент по заданному значению " + (elIndex == -1 ? "не находится в списке" // Если вышел код ошибки (-1), то элемента в списке нет : "находится на " + elIndex + "-ой позиции")); // Иначе выводится его позиция } // Находит индекс элемента в циклическом списке по его значению
public void RemoveTest() { CyclicList <int> c = new CyclicList <int>(); c.Add(1); c.Add(2); c.Add(3); c.Remove(1); Assert.AreEqual(c[0], 1); Assert.AreEqual(c[1], 3); Assert.AreEqual(c[2], 1); Assert.AreEqual(c[3], 3); }
} // Находит индекс элемента в циклическом списке по его значению static void DelElByValue(CyclicList list) { // Список, в котором происходит удаление if (list.Length == 0) // Проверка на пустой список { Console.WriteLine("Ошибка, список пуст!"); return; } Console.Write("Введите значение элемента, который требуется удалить (>=1): "); int elIndex = list.RemoveElByValue(Read.Natural()); Console.WriteLine("\nЭлемент по заданному значению " + (elIndex == -1 ? "не находится в списке" // Если вышел код ошибки (-1), то элемента в списке нет : "удалён, элемент был на " + elIndex + "-ой позиции")); // Иначе выводится сообщение о его удалении, и позиция на которой он находился } // Удаляет элемент в циклическом списке по значению
public void GetTest() { CyclicList <int> c = new CyclicList <int>(); c.Add(1); c.Add(2); c.Add(3); Assert.AreEqual(c[0], 1); Assert.AreEqual(c[1], 2); Assert.AreEqual(c[2], 3); Assert.AreEqual(c[3], 1); Assert.AreEqual(c[4], 2); Assert.AreEqual(c[5], 3); }
public static void Main(string[] args) { Tape a = new Tape("a.txt"); Tape b = new Tape("b.txt"); var input = args.Length == 0 ? "../../../data/pentagons_01.dat" : args[0]; Tape c = new Tape("c.txt", input); Log.WriteInfoMessage("Natural sort"); CyclicList<Tape> tapes = new CyclicList<Tape>() { a, b }; while (!SortHelper.IsSorted(c)) { SortHelper.Distribute(c, tapes); SortHelper.Merge(c, tapes); } Log.WriteInfoMessage("End of execution"); if (!(args.Length == 2 && args[1].Equals("TEST"))) Console.ReadKey(); }
} // Удаляет элемент в циклическом списке по значению static void Main(string[] args) { CyclicList list = CreateNewCyclicList(); while (true) { switch (Menu("Ввести длину списка заново", "Вывести список", "Найти элемент в списке", "Удалить элемент из списка", "Выход")) { case 1: list = CreateNewCyclicList(); break; // Создаёт новый цикл. список case 2: list.Show(); break; // Выводит список на экран case 3: FindElIndexByValue(list); break; // Находит индекс элемента в циклическом списке по его значению case 4: DelElByValue(list); break; // Удаляет элемент в циклическом списке по значению default: return; } } } // Меню с вариантами действий
public void HeadRemovalTest() { CyclicList <int> c = new CyclicList <int>(); c.Add(1); c.Add(2); c.Add(3); c.Remove(0); Debug.WriteLine(c[0].ToString() + c[1].ToString() + c[2].ToString()); Assert.AreEqual(c[0], 2); Assert.AreEqual(c[1], 3); Assert.AreEqual(c[2], 2); Assert.AreEqual(c[3], 3); c.Remove(0); Assert.AreEqual(3, c[0]); c.Remove(0); Assert.ThrowsException <Exception>(() => { Debug.WriteLine(c[0]); }); }
public static int Process(int N, int M) { CyclicList lst = new CyclicList(); ListElement<int> pt = new ListElement<int>(0); lst.Add(pt, pt); for (int i = 1; i < N; i++) { var tm = new ListElement<int>(i); lst.Add(tm, pt); pt = tm; } ListElement<int> el = pt; while (el.Next != el) { for (int i = 0; i < M; i++) { el = el.Next; } Console.WriteLine("Remove {0}", el.Next.Value); el.Next = el.Next.Next; } return el.Value; }
static void Main(string[] args) { CyclicList <string> cL = new CyclicList <string>("Ala", "ma", "kota"); CyclicList <string> cLtemp = cL; for (int i = 0; i < 2 * cL.Length; i++) { Console.WriteLine(cL[i]); } cL[2] = "kociaki"; Console.WriteLine(cL); cL = cL << 1; cL[1] = "koty"; Console.WriteLine(cL); Console.WriteLine(cLtemp); cL = cL >> 2; Console.WriteLine(cL); string[] sA = cL; foreach (string s in sA) { Console.WriteLine(s); } CyclicList <string> str = new CyclicList <string>("Ala", "ma", "kota", "Sam", "worek"); foreach (var C in str.split(n => n[1])) { Console.WriteLine(C); } CyclicList <int> cI = new CyclicList <int>(0, 1, 2, 3, 4, 5, 6); foreach (var C in (cI >> 1).split(n => 1 - n % 2)) { Console.WriteLine(C); } Console.ReadKey(); }
public SwipeMenu() { _menuItems = new CyclicList <MenuSelection>(); }
public static void Merge(Tape dest, CyclicList<Tape> tapes) { //Log.WriteMergeMessage("Merge start"); //Log.WriteMergeMessage("A: " + tapes[0].ShowFile(), 5); //Log.WriteMergeMessage("B: " + tapes[1].ShowFile(), 5); dest.Clean(); tapes.Prepare(); double a1 = (double)tapes.Current.GetNextValue(); double b1 = -1; while (!tapes.Current.IsFinished) { double? nextValue = tapes.Next.GetNextValue(); double b2; if (nextValue != null) b2 = (double)nextValue; else break; // przepisz resztę taśmy if (b2 >= b1) // czy ciągle na tym samym run-ie { if (b2 <= a1) { b1 = b2; dest.Append(b1); } else { dest.Append(a1); tapes.MoveNext(); b1 = a1; a1 = b2; } } else // przepisz resztę run-a { b1 = b2; double a2 = a1; var value = tapes.Current.GetNextValue(); if (value != null) a1 = (double)value; else { dest.Append(a2); tapes.MoveNext(); break; } while (a1 >= a2) { dest.Append(a2); a2 = a1; double? d = tapes.Current.GetNextValue(); if (d != null) a1 = (double)d; else break; } dest.Append(a2); tapes.Next.StepBack(); } } double? v; //dest.Append(a1); tapes.Current.StepBack(); while ((v = tapes.Current.GetNextValue()) != null) { dest.Append((double)v); } //Log.WriteMergeMessage("Result:", 5); Log.WriteMergeMessage("C: " + dest.ShowFile()); //Log.WriteMergeMessage("Merge end"); }