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))); }
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); }