public string SolveSecondStar(StreamReader reader) { var adapters = StreamParsers.GetStreamAsLongIntList(reader); // Add port, which has effective joltage 0 adapters.Add(0); adapters.Sort(); // Build up an array of possibilities, where possibilities[i] represents // the number of possible ways to configure a valid adapter chain // ending in i long[] possibilities = new long[adapters.Max() + 1]; // Initialize possibilities[0] to 1, because there is only one way // to configure the port possibilities[0] = 1; possibilities[1] = adapters.Contains(1) ? 1 : 0; possibilities[2] = possibilities[1] + (adapters.Contains(2) ? 1 : 0); for (int i = 3; i < adapters.Count(); i++) { var adapter = adapters[i]; possibilities[adapter] += possibilities[adapter - 3]; possibilities[adapter] += possibilities[adapter - 2]; possibilities[adapter] += possibilities[adapter - 1]; } return(possibilities.Last().ToString()); }
public string SolveFirstStar(StreamReader reader) { var adapters = StreamParsers.GetStreamAsLongIntList(reader); adapters.Sort(); long currentJoltage = 0; int smallJumps = 0; int bigJumps = 0; foreach (var adapter in adapters) { if (adapter - currentJoltage == 1) { smallJumps++; } else { bigJumps++; } currentJoltage = adapter; } bigJumps++; return((smallJumps * bigJumps).ToString()); }
public string SolveFirstStar(StreamReader reader) { var lines = StreamParsers.GetStreamAsLongIntList(reader); var cardPublicKey = lines[0]; var doorPublicKey = lines[1]; var doorLoops = ReverseTransform(DefaultSubject, doorPublicKey); return(TransformLoop(cardPublicKey, doorLoops).ToString()); }
public string SolveSecondStar(StreamReader reader) { var numbers = StreamParsers.GetStreamAsLongIntList(reader); var subList = findSubListEqualToN(numbers, FirstStarResult); if (subList == null) { throw new Exception($"Unable to find sub-list equal to {FirstStarResult}"); } return((subList.Min() + subList.Max()).ToString()); }
public string SolveFirstStar(StreamReader reader) { var numbers = StreamParsers.GetStreamAsLongIntList(reader); var recentNumbers = new LinkedList <long>(); for (int i = 0; i < WindowSize; i++) { recentNumbers.AddLast(numbers[i]); } for (int i = WindowSize; i < numbers.Count(); i++) { if (!isNumberValid(recentNumbers, numbers[i])) { FirstStarResult = numbers[i]; return(numbers[i].ToString()); } recentNumbers.RemoveFirst(); recentNumbers.AddLast(numbers[i]); } throw new Exception("Could not find invalid number"); }