Beispiel #1
0
        public ILejátszható[] Elsőelemre(LáncoltLista <ILejátszható> tartalom)
        {
            ListaElem <ILejátszható> aktualis = tartalom.Fej;

            //6 stílust használok, ezáltal 6 elemű a tömbböm, amibe eltárolom az első elemre vonatkozó referenciákat.
            string[] stilusok     = new string[] { "Családias", "Mulatós", "Rock", "Elektronikus", "Romantikus", "Akció" };
            int      stilus_index = 0;
            int      db           = stilusok.Length;

            ILejátszható[] elsőelemekreRef = new ILejátszható[db];
            int            elsőre_index    = 0;

            while (stilus_index < db && aktualis != null)
            {
                if (aktualis.Következő == null && elsőelemekreRef[elsőre_index] == null)
                {
                    stilus_index += 2;
                    aktualis      = tartalom.Fej;
                    elsőelemekreRef[elsőre_index++] = aktualis.Érték;
                }
                else if (aktualis.Érték.Stílus == stilusok[stilus_index])
                {
                    elsőelemekreRef[elsőre_index++] = aktualis.Érték;
                    stilus_index++;
                }
                aktualis = aktualis.Következő;
            }
            return(elsőelemekreRef);
        }
Beispiel #2
0
        public lista(LáncoltLista <ILejátszható> tartalom, string[] támogatott)
        {
            adatok.Add("Rock", new List <ILejátszható>());

            foreach (ILejátszható i in t.Tartalom)
            {
                switch (i.Stílus)
                {
                case "Rock": adatok["Rock"].Add(i); break;
                }
            }
        }
Beispiel #3
0
        //Az elsőelemek megtalálása: egy int db változóba eltárolom a tartalom méretét, majd a egy tmp tömböt ezzel a mérettel inicializálok. Ebbe a tmp tömbbe kerülnek bele a referenciák.
        //A megvalósítás:Először feltöltöm a tömböt a tartalom összes elemével, majd  deklarálok egy index változót ami a legelső elemre mutat, és ezt is használom az if első vizsgálandó elemének indexelésére.
        //Amíg a soron következő elemek stílusa azonos az elsővel, addig azokat törlöm, ha különböznek, akkor az index értéket fölülírom az i-vel így az az éppen aktuális elemre fog mutatni, aminek pont eltér a stílusa
        //az eddig vizsgálttól. Ezután folytatódik a ciklus és vizsgálja, hogy a következő elem azonos-e az index-edik elem stílusával és ha igen, törli, ha nem átlépteti az indexet az aktuális elemre és így tovább.


        public void TartalomÖsszeállítás(LáncoltLista <ILejátszható> tartalom)
        {
            int stilusDb         = 0;
            int támogatott_index = 0;

            try
            {
                stilusDb = Db();
            }
            catch (TulnagyASzam e)
            {
                Console.WriteLine(e.Message);
                TartalomÖsszeállítás(tartalom);
            }

            Console.WriteLine();
            string[] támogatottStílusok = new string[stilusDb];     //meghívom a műfajra kiválogatott listán ami már csak azokat a műfajokat tartalmazza amiket a felhasz engedett
            bool     kilep = false;

            while (kilep == false)
            {
                try
                {
                    támogatottStílusok = TámogatottStílusok(stilusDb, támogatott_index);
                    kilep = true;
                }
                catch (NemLetezoStilus e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            Console.WriteLine();
            int műsorhossz = 0;

            Dictionary <string, List <ILejátszható> > válogatottTartalom = Válogatás(tartalom, támogatottStílusok);
            LáncoltLista <ILejátszható> osszefuzott = new LáncoltLista <ILejátszható>();

            osszefuzott = ElejereOsszeFuzes(válogatottTartalom);
            int meret  = osszefuzott.Count();
            int marker = 0;

            ILejátszható[] eredmeny = new ILejátszható[meret];
            //osszefuzott.BackTrack()

            Console.WriteLine();

            foreach (var item in osszefuzott)
            {
                Console.WriteLine(item);
            }
        }
Beispiel #4
0
        public Dictionary <string, List <ILejátszható> > Válogatás(LáncoltLista <ILejátszható> tartalom, string[] támogatott)
        {
            Dictionary <string, List <ILejátszható> > adatok = new Dictionary <string, List <ILejátszható> >();

            adatok.Add("Családias", new List <ILejátszható>());
            adatok.Add("Mulatós", new List <ILejátszható>());
            adatok.Add("Rock", new List <ILejátszható>());
            adatok.Add("Elektronikus", new List <ILejátszható>());
            adatok.Add("Romantikus", new List <ILejátszható>());
            adatok.Add("Akció", new List <ILejátszható>());

            for (int i = 0; i < támogatott.Count(); i++)
            {
                foreach (ILejátszható item in tartalom)
                {
                    if (item.Stílus == támogatott[i])
                    {
                        adatok[támogatott[i]].Add(item);
                    }
                }
            }
            return(adatok);
        }
Beispiel #5
0
        public LáncoltLista <ILejátszható> ElejereOsszeFuzes(Dictionary <string, List <ILejátszható> > válogatottTartalom)
        {
            //ListaElem<T> fej = válogatottTartalom.Values;
            LáncoltLista <ILejátszható> osszefuzott = new LáncoltLista <ILejátszható>();

            foreach (var item in válogatottTartalom)
            {
                if (item.Value.Count != 0)
                {
                    for (int j = 0; j < item.Value.Count; j++)
                    {
                        osszefuzott.Beszuras(item.Value[j]);
                    }
                }
            }
            //for (int i = 0; i < válogatottTartalom.Values.Count; i++)
            //{
            //    if (válogatottTartalom.Keys != null)
            //    {
            //        Console.WriteLine("null");
            //    }
            //}
            return(osszefuzott);
        }
Beispiel #6
0
        public void Start(List <ILejátszható> input)
        {
            int length = input.Count;
            LáncoltLista <ILejátszható> tartalom = new LáncoltLista <ILejátszható>();

            for (int i = 0; i < length; i++)
            {
                tartalom.RendezettenBetesz(input[i]);
            }
            //A foreach működése: var értékek in tartalom

            /*
             * Első lépésként a tartalom "parancsra" meghívódik az IEnumerable<T> interface-t megvalósító LáncoltLista<T> osztály-ban a GetEnumerator() metódus, melynek egyetlen eleme a visszatérési értéke, a LáncoltListaEnumerátor<T> osztály, melynek
             * bemenő paramétere a listánk feje.
             * A LáncoltListaEnumerátor<T> megvalósítja az INumerator<T> interface-t ami miatt meg kell írni a Current, MoveNext, Reset metódusokat.
             * A LáncoltListaEnumerátor<T> osztály tartalmaz két ListaElem<T> típusú elemet, az aktualis-t és az elso-t. A konstruktorban az elso-nek átadódik a teljes láncolt listánk, az aktualis értéke null.
             * Második lépésként az in "parancsra" a MoveNext() metódus hívódik meg, ami első lépésként az aktualisnak átadja a teljes listánkat, majd újabb meghíváskor, már csak elementként lépteti a listát.
             * Visszatérési értéke bool, jelzi hogy maradt e még elemünk a listában, ha ez hamis, leáll a foreach ciklus.
             * Utolsó lépésben a var érték fut le, ami a Current() metódusból visszaadja az -aktualis- listaelem érték tulajdonságát.
             *
             * */
            foreach (var érték in tartalom)
            {
                Console.WriteLine(érték);       //Kiiratáskor a Film osztályban található ToString metódus fut le, mivel minden osztály tulajdonsága onnan olvasható ki.
            }
            Console.WriteLine();
            Console.WriteLine();
            ILejátszható[] elsőelemreReferencia = Elsőelemre(tartalom);

            foreach (var item in elsőelemreReferencia)
            {
                Console.WriteLine(item);
            }
            TartalomÖsszeállítás(tartalom);

            /*
             *
             *     /*
             * Backtrackhez:
             * majd akkor
             * mikor jön a BT
             * ugye ott az van
             * hogy a felhasználó megasszondja
             * milyen stílusokat akar
             * egyáltalán válogattatni
             * te meg ez alapján a referencia tömböd alapján
             * nem kell
             * mindig elejéről végigmenned
             * hanem rögtön odaugrasz
             * és elkezded kiszedni adott stilust
             * de ha balfasz felhasználó asszondja szeretne olyat, ami létezik mint stilus a rendszeredbe
             * de nincs hozzárendelt film/zene
             * akkor throw
             * szal a BT
             * lesz a try
             * végére catch
             * azt máris írhatod ki
             * a megadott stílus nem létezik/stílusok közül egy nem létezik
             *
             *
             *
             * BT
             * a lancolt lista egyik metodusa
             * mivel minden lancolt lista-ban lehet keresni a megközés miatt
             * mert úgy van felépítve a programom, hogy a láncolt listámban a bts működni fog
             * mert csak olyan elemek lehetnek benne, amivel a bts működik
             * 9 paraméteres BTS
             * ebből 3 vagy 4 ref paraméterrel
             * meghívom a műfajra kiválogatott listán
             * ami már csak azokat a műfajokat tartalmazza
             * amiket a felhasz engedett
             * abban megnézi az első belefér-e az időbe
             * ha igen, megnézi a másodikkal belefér-e az időbe
             * ha valami belefér
             * azt kimentem egy olyan lista node-ba
             * aminek a tartalma az adott listaelem tartalmára mutat, a next része meg az előtte ellenőrzött
             * listaelemére
             * amennyiben találok egy optimális megoldás (az első megtalált mindig optimális lesz)
             * (utána meg az előző optimálishoz hasonlít mindig)
             * szal ha talál egy éppen legjobb megoldást
             * akkor a mappoint listnode-okon
             * visszaköveti
             * milyen listaelemeken keresztül jutott el oda
             * azok tartalmát egy tömbbe
             * Eredmeny() metódusban
             * feltölti
             * ha a megtalált megoldás nem a legjobb
             * tehát nem jobb mint az előző
             * akkor
             * semmit nem csinál, keres tovább
             * csak akkor változtat az eredményen
             * a tömbön
             * ha jobb megoldást talál
             * akkor viszont beállítgatja az eredmény tömböt megfelelően
             * és a markert
             * a marker egy olyan változó ami azt jelöli, hogy az eredmény tömbben
             * meddig kell nézni
             * a cuccot
             * mert ha régen 7 elem volt a jó megoldás, de később 2 elem a legjobb
             * akkor a maradék 5 elem már nem kell kiíratásnál
             * amennyiben egy elem sem felel az egész tömb null referenceket fog tartalmazni
             * annyi, hogy kell egy ilyen konstruktor a Node-od nak, amit a láncolt listára használsz még:
             * public ListNode(ListNode<T> next)
             * {
             * tartalom = default(T);
             * this.next = next;
             * }
             * meg a T tartalom tulajdonságot
             * írhatóvá is kell tenni
             * és ezzel megoldható a visszakeresése a megoldásnak
             * node - vizsgált listelem
             * szint - az aktuális választás szintje, az az index ahanyadik kiválasztott lehetséges elem
             * remaining - maradék idő, ami hátra van, hogy elérjem a műsoridőt
             * cost - ár
             * eredmeny - az eredménytömb, melybe az éppen legjobb megoldásokat beállítom
             * ref int pool - az éppen aktuális legjobb megoldás és műsoridő közti eltérés
             * ref int totalcost - az éppen aktuális legjobb megoldás ára
             * ref int marker - az éppen aktuális legjobb megoldás utolsó elemét mutatja meg az eredmény tömbben
             * (azért kell, mert ha előtte 5 elem volt a legjobb, most meg csak kettő, akkor az első 2 elemet átállítom a tömbben, de tudnom kell, hogy csak az első kettőt kell figyelembe vennem a további feldolgozásnál)
             * before - az előző szinten vizsgált elemre mutató referencia, hogy vissza tudjam követni milyen elemeken keresztül találtam legjobb megoldásokat
             *
             * a bts-em
             * a this helyett
             * nálad
             * a ref totalcost
             * llenne
             * a te verziodban
             * **/
        }
 public OptimálisTartalomÖsszeállító(LáncoltLista <ILejátszható> tartalom)
 {
     this.tartalom = tartalom;
 }