using System.Collections.Generic;
namespace PlanoraPolcOptimizerV2
public static void Main(string[] args)
List<Termek> termekek = new List<Termek>
new Termek() { Nev = "Audiokábel", Meret = 9, Magassag = 23, Darab = 22 },
new Termek() { Nev = "Videókábel", Meret = 10, Magassag = 18, Darab = 45 },
new Termek() { Nev = "Adapterek/Átalakítók", Meret = 12, Magassag = 15, Darab = 28 },
new Termek() { Nev = "Antenna kábel, kiegészítő", Meret = 9, Magassag = 23, Darab = 16 },
new Termek() { Nev = "Internet kábel", Meret = 23, Magassag = 8, Darab = 16 },
new Termek() { Nev = "Számtech. Kábel (adatkábel)", Meret = 23, Magassag = 8, Darab = 22 },
new Termek() { Nev = "Hosszabbító, elosztó", Meret = 10, Magassag = 25, Darab = 70 },
new Termek() { Nev = "Utazó adapter", Meret = 10, Magassag = 15, Darab = 6 },
new Termek() { Nev = "Újratölthető elem", Meret = 20, Magassag = 27, Darab = 8 },
new Termek() { Nev = "Elem ", Meret = 45, Magassag = 32, Darab = 25 },
List<Polc> polcok = new List<Polc>
new Polc() { Kapacitas = 400, Magassag = 20 },
new Polc() { Kapacitas = 400, Magassag = 20 },
new Polc() { Kapacitas = 400, Magassag = 25 },
new Polc() { Kapacitas = 400, Magassag = 30 },
new Polc() { Kapacitas = 400, Magassag = 30 },
new Polc() { Kapacitas = 400, Magassag = 30},
new Polc() { Kapacitas = 400, Magassag = 30},
new Polc() { Kapacitas = 400, Magassag = 30},
new Polc() { Kapacitas = 400, Magassag = 30},
new Polc() { Kapacitas = 400, Magassag = 30},
new Polc() { Kapacitas = 400, Magassag = 30}
Optimalizalas(termekek, polcok);
public static void Optimalizalas(List<Termek> termekek, List<Polc> polcok)
foreach (var p in polcok)
var rendezettTermekek = termekek.OrderByDescending(t => t.Meret).ToList();
foreach (var termek in rendezettTermekek)
foreach (var polc in polcok)
int szabad = polc.SzabadHely();
if (szabad >= termek.Meret * termek.Darab && polc.Magassag >= termek.Magassag)
for (int db = 0; db < termek.Darab; db++)
polc.Termekek.Add(new Termek() { Nev = termek.Nev, Meret = termek.Meret, Magassag = termek.Magassag });
foreach (var polc in polcok)
while (polc.SzabadHely() >= termek.Meret && polc.Magassag >= termek.Magassag && darabFelrakva < termek.Darab)
polc.Termekek.Add(new Termek() { Nev = termek.Nev, Meret = termek.Meret, Magassag = termek.Magassag });
if (darabFelrakva < termek.Darab)
eredmeny += $"{termek.Nev} ({termek.Magassag} cm) {termek.Darab - darabFelrakva} db nem fért fel egyik polcra sem.\n";
for (int i = 0; i < polcok.Count; i++)
eredmeny += $"Polc ({polc.Kapacitas}×{polc.Magassag}):\n";
foreach (var t in polc.Termekek)
eredmeny += $"{t.Nev} ({t.Meret}×{t.Magassag})\n";
eredmeny += $" Szabad hely: {polc.SzabadHely()}\n";
eredmeny += $" Telítettség: {polc.TelitetsegiSzazalek():F1}%\n\n";
Console.WriteLine(eredmeny);
public List<Termek> Termekek = new List<Termek>();
foreach (var t in Termekek)
return Kapacitas - foglalt;
public double TelitetsegiSzazalek()
return (double)(Kapacitas - SzabadHely()) / Kapacitas * 100;