Exemple #1
0
        IEnumerable <T> GetRawGroups <T>(IEnumerable <string> content, Func <IGrouping <string, string>, T> func)
        {
            //Cada tabla son grupos de 8
            var state = new StateInternal(8);

            return(content.GroupBy(t => state.Letter())
                   .Select(g => func(g)));
        }
Exemple #2
0
        Loteria MakeLoteria(IEnumerable <string> rawValue)
        {
            string makeNombre() => rawValue.ElementAt(0)?
            .FixS()
            .Pipe(key => Nombres.TryGetValue(key, out string value) ? value : key);

            int cursor = 0;

            string makeSubCodigo() => cursor != 1 ? rawValue.ElementAt(1)?.FixS() : null;

            bool containsTopNumber(int n) => rawValue.ElementAtOrDefault(n)?.Contains("1º") ?? false;

            try
            {
                if (containsTopNumber(1))
                {
                    cursor = 1;
                }

                if (containsTopNumber(2))
                {
                    cursor = 2;
                }

                if (containsTopNumber(3))
                {
                    cursor = 3;
                }

                var state  = new StateInternal(2);
                var groups = rawValue.Skip(cursor).GroupBy(r => state.Letter());

                var numeros = groups.Select(g => new NumeroLoteria(g.ToArray())).ToList();

                if (numeros.All(n => n.HasValue()))
                {
                    return(new Loteria(LoteriaState.Jugado, makeNombre(), makeSubCodigo())
                    {
                        Numeros = numeros
                    });
                }
                else
                {
                    return(new Loteria(LoteriaState.PendienteDeJuego, makeNombre(), makeSubCodigo()));
                }
            }
            catch
            {
                return(new Loteria(LoteriaState.Error));
            }
        }
 public StateMachine(T initial)
 {
     this.transitionTable = new TransitionTable();
     this.state           = this.transitionTable.Add(initial);
 }