public object Part2(IParsedFile file) { var adapters = file.ToList <int>(); adapters.Add(0); adapters.Sort(); adapters.Add(adapters[^ 1] + 3);
public object Part1(IParsedFile file) { var numbers = file.ToList <int>(); var match = numbers.First(number => numbers.IndexOf(2020 - number) != -1); return(match * (2020 - match)); }
public object Part2(IParsedFile file) { const ulong invalid = 375054920UL; var numbers = file.ToList <string>().Select(ulong.Parse).ToArray(); var prefix = new BigInteger[numbers.Length]; prefix[0] = numbers[0]; for (int i = 1; i < numbers.Length; i++) { prefix[i] = prefix[i - 1] + numbers[i]; } for (int i = 0; i < numbers.Length; i++) { for (int j = i + 1; j < numbers.Length; j++) { if (prefix[j] - prefix[i] == invalid) { var segment = numbers.Skip(i + 1).Take(j - i); Debug.Assert(segment.Aggregate(0UL, (a, c) => a + c) == invalid); return(segment.Min() + segment.Max()); } } } return(null); }
public object Part1(IParsedFile file) { var adapters = file.ToList <int>(); adapters.Add(adapters.Max() + 3); adapters.Add(0); adapters.Sort(); var enumer = adapters.Zip(adapters.Skip(1)).Select((x) => x.Second - x.First); return(enumer.Count(x => x == 1) * enumer.Count(x => x == 3)); }
public object Part1(IParsedFile file) { var numbers = file.ToList <string>().Select(ulong.Parse).ToArray(); for (int i = 25; i < numbers.Length; i++) { var seg = new ArraySegment <ulong>(numbers, i - 25, 25); if (GetSums(seg).All(x => x != numbers[i])) { return(numbers[i]); } } throw new Exception(); }
public object Part2(IParsedFile file) { var numbers = file.ToList <int>(); for (int x = 0; x < numbers.Count; x++) { for (int y = x + 1; y < numbers.Count; y++) { for (int z = y + 1; z < numbers.Count; z++) { if (numbers[x] + numbers[y] + numbers[z] == 2020) { return(numbers[x] * numbers[y] * numbers[z]); } } } } throw new Exception(); }
public object Part1(IParsedFile file) { string[] rows = file.ToList <string>().ToArray(); int x = 0, y = 0; var count = 0; while (y < rows.Length) { if (rows[y][x] == '#') { count++; } x += 3; if (x >= rows[y].Length) { x %= rows[y].Length; } y++; } return(count); }