public static int ValidScore(Roll roll) { if (roll.Count == 6 && roll.Distinct <int>().Count() == 6) { return(1500); } var score = 0; if (roll.GroupBy(x => x).Where(x => x.Count() == 6).Any()) { return(roll[0] * (roll[0] == 1 ? 2000 : 200)); } foreach (var triple in roll.GroupBy(x => x).Where(x => x.Count() >= 3)) { triple.Take(3).ToList().ForEach(x => roll.Remove(x)); score += triple.Key * (triple.Key == 1 ? 1000 : 100); } roll.Where(x => x == 1).ToList().ForEach(x => { roll.Remove(x); score += 100; }); roll.Where(x => x == 5).ToList().ForEach(x => { roll.Remove(x); score += 50; }); return(roll.Any() ? 0 : score); }
public Roll Narrow(List <int> remove) { Roll newRoll = new Roll(this); remove.ForEach(x => newRoll.Remove(x)); return(newRoll); }
public Roll Narrow(int remove) { Roll newRoll = new Roll(this); newRoll.Remove(remove); return(newRoll); }