Rivi.cs 2.33 KB
Newer Older
M1888's avatar
M1888 committed
1 2 3 4 5 6 7 8 9 10
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lottokone.Model
{
    public class Rivi
    {
M1888's avatar
10.4.  
M1888 committed
11
        private Random rnd;
M1888's avatar
M1888 committed
12 13 14
        public short[] Numerot { get; set; }
        public Rivi()
        {
M1888's avatar
10.4.  
M1888 committed
15
            rnd = new Random();
M1888's avatar
M1888 committed
16 17 18
            Numerot = new short[7];
        }

M1888's avatar
10.4.  
M1888 committed
19 20 21 22 23 24 25 26 27 28 29 30
        public Rivi(short[] numerot)
        {
            if (numerot.Length != 7)
                throw new ArgumentException("Rivin pituus pitää olla 7 numeroa");
            Numerot = numerot;
        }

        public Rivi(Rivi r)
        {
            Numerot = r.Numerot;
        }

M1888's avatar
16.4.  
M1888 committed
31
        public virtual void ArvoRivi()
M1888's avatar
10.4.  
M1888 committed
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
        {

            /*for(int i = 0; i < 7; i++)
            {
                Numerot[i] = (short)rnd.Next(1, 41);
            }*/

            Numerot = Array.ConvertAll(
                // otetaan numerot 1-40, järjestellään satunnaisesti, valitaan 7 ekaa, ja tehdään niistä taulukko
                Enumerable.Range(1, 40).OrderBy(x => rnd.Next()).Take(7).ToArray(),
                // Enumerable.Range tuottaa inttejä, jotka pitää sitten muuntaa shorteiksi
                Convert.ToInt16);

            // järjestellään rivi arpomisen jälkeen heti
            // suuruusjärjestykseen, niin vertailu on myöhemmin helpompaa
            Array.Sort(Numerot);
        }

M1888's avatar
16.4.  
M1888 committed
50 51 52
        // tämä metodi tarkistaa, kuinka monta numeroa rivissä on oikein
        // annettuun riviin verrattuna
        public int Oikein(object obj)
M1888's avatar
10.4.  
M1888 committed
53 54 55 56 57
        {
            Rivi r = obj as Rivi;
            if (r == null)
                return 0;

M1888's avatar
16.4.  
M1888 committed
58
            return Numerot.Intersect(r.Numerot).Count();
M1888's avatar
10.4.  
M1888 committed
59 60
        }

M1888's avatar
M1888 committed
61 62 63 64 65 66
        public override bool Equals(object obj)
        {
            Rivi r = obj as Rivi;
            if (r == null)
                return false;

M1888's avatar
10.4.  
M1888 committed
67 68 69
            for (int i = 0; i < Numerot.Length; i++)
                if (Numerot[i] != r.Numerot[i])
                    return false;
M1888's avatar
M1888 committed
70

M1888's avatar
10.4.  
M1888 committed
71
            return true;
M1888's avatar
M1888 committed
72 73 74 75 76 77
        }

        public override int GetHashCode()
        {
            return 521069651 + EqualityComparer<short[]>.Default.GetHashCode(Numerot);
        }
M1888's avatar
10.4.  
M1888 committed
78 79 80 81 82 83 84 85 86 87 88

        public override string ToString()
        {
            string s = "[";

            foreach (short n in Numerot)
                s += $" {n} ";

            s += "]";
            return s;
        }
M1888's avatar
M1888 committed
89 90
    }
}