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);
}
}
}