using System.Collections.Generic;
namespace PlanoraPolcOptimizerV2
public static void Main(string[] args)
List<Termek> termekek = new List<Termek>
new Termek() { Nev = "Gőzállomás", Meret = 45, Magassag = 35, Melyseg = 30, Darab = 4 },
new Termek() { Nev = "Gőzölők, ruhaápolás", Meret = 40, Magassag = 17, Melyseg = 25, Darab = 8 },
new Termek() { Nev = "Varrógép", Meret = 49, Magassag = 39, Melyseg = 35, Darab = 3 },
new Termek() { Nev = "Vasaló", Meret = 30, Magassag = 35, Melyseg = 20, Darab = 18 },
new Termek() { Nev = "Vasalás-kiegészítő", Meret = 10, Magassag = 20, Melyseg = 15, Darab = 3 }
List<Polc> polcok = new List<Polc>
new Polc() { Kapacitas = 300, Magassag = 60, Melyseg = 40 },
new Polc() { Kapacitas = 300, Magassag = 40, Melyseg = 30 },
new Polc() { Kapacitas = 100, Magassag = 40, Melyseg = 30 },
new Polc() { Kapacitas = 100, Magassag = 40, Melyseg = 30 },
new Polc() { Kapacitas = 100, Magassag = 40, Melyseg = 30 },
new Polc() { Kapacitas = 100, Magassag = 40, Melyseg = 30 },
new Polc() { Kapacitas = 100, Magassag = 150, Melyseg = 50 },
new Polc() { Kapacitas = 100, Magassag = 40, Melyseg = 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
&& polc.Melyseg >= termek.Melyseg)
for (int db = 0; db < termek.Darab; db++)
polc.Termekek.Add(new Termek()
Magassag = termek.Magassag,
foreach (var polc in polcok)
while (polc.SzabadHely() >= termek.Meret
&& polc.Magassag >= termek.Magassag
&& polc.Melyseg >= termek.Melyseg
&& darabFelrakva < termek.Darab)
polc.Termekek.Add(new Termek()
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 {i + 1} ({polc.Kapacitas} cm, {polc.Magassag} cm magas, {polc.Melyseg} cm mély):\n";
foreach (var t in polc.Termekek)
int dbMelysegben = polc.Melyseg / t.Melyseg;
eredmeny += $" {t.Nev} ({t.Meret}×{t.Magassag}×{t.Melyseg}) — {dbMelysegben} db fér el mélységben egymás mögött\n";
eredmeny += $" Szabad hely szélességben: {polc.SzabadHely()} cm\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;