using System; using System.Collections.Generic; namespace BAI { public class BAI_Afteken1 { /// ------------------------------------------------------------ /// /// Filtert een lijst. Hierbij worden alle elementen die maar /// 1x voorkomen verwijderd /// /// De lijst die wordt doorlopen /// (wordt in functie veranderd) /// ------------------------------------------------------------ public static void Opdr1FilterList(List lijst) { Dictionary positions = []; for (int i = 0; i < lijst.Count; i++) { if (positions.TryGetValue(lijst[i], out _)) { positions[lijst[i]] = -1; } else { positions[lijst[i]] = i; } } for (int i = 0; i < lijst.Count;) { if (positions[lijst[i]] != -1) { lijst.RemoveAt(i); } else { i++; } } } /// ------------------------------------------------------------ /// /// Maakt een queue van de getallen 1 t/m 50 (in die volgorde /// toegevoegd) /// /// Een queue met hierin 1, 2, 3, .., 50 /// ------------------------------------------------------------ public static Queue Opdr2aQueue50() { Queue queue = new(); for (int i = 1; i <= 50; i++) { queue.Enqueue(i); } return queue; } /// ------------------------------------------------------------ /// /// Haalt alle elementen uit een queue. Voegt elk element dat /// deelbaar is door 4 toe aan een stack /// /// De queue die uitgelezen wordt /// De stack met hierin de elementen die deelbaar zijn /// door 4 /// ------------------------------------------------------------ public static Stack Opdr2bStackFromQueue(Queue queue) { Stack stack = new(); while (queue.TryDequeue(out int value)) { if (value % 4 == 0) { stack.Push(value); } } return stack; } /// ------------------------------------------------------------ /// /// Maakt een stack met hierin unieke random getallen /// De ondergrens voor elk getal (inclusief) /// De bovengrens voor elk getal (inclusief) /// Het aantal getallen /// De stack met unieke random getallen /// ------------------------------------------------------------ public static Stack Opdr3RandomNumbers(int lower, int upper, int count) { Stack stack = new(); Dictionary exists = []; Random random = new(); int next; for (int i = 0; i < count;) { next = random.Next(lower, upper + 1); if (!exists.ContainsKey(next)) { stack.Push(next); exists[next] = true; i++; } } return stack; } /// ------------------------------------------------------------ /// /// Drukt een IEnumerable (List, Stack, Queue, ..) van getallen /// af naar de Console /// De IEnumerable om af te drukken /// ------------------------------------------------------------ static void PrintEnumerable(IEnumerable enu) { foreach (int i in enu) { Console.Write($"{i} "); } Console.WriteLine(); } static void Main(string[] args) { List list; Queue queue; Stack stack; Console.WriteLine(); Console.WriteLine("=== Opdracht 1 : FilterList ==="); list = new List() { 1, 3, 5, 7, 3, 8, 9, 5 }; PrintEnumerable(list); Opdr1FilterList(list); PrintEnumerable(list); Console.WriteLine(); Console.WriteLine("=== Opdracht 2 : Stack / Queue ==="); queue = Opdr2aQueue50(); PrintEnumerable(queue); stack = Opdr2bStackFromQueue(queue); PrintEnumerable(stack); Console.WriteLine(); Console.WriteLine("=== Opdracht 3 : Random number ==="); stack = Opdr3RandomNumbers(100, 150, 10); PrintEnumerable(stack); stack = Opdr3RandomNumbers(10, 15, 6); PrintEnumerable(stack); stack = Opdr3RandomNumbers(10_000, 50_000, 40_001); } } }