string[] inputs = File.ReadAllLines("input.txt"); var a = new List(); var b = new List(); foreach (string input in inputs) { string[] tokens = input.Split(" ", StringSplitOptions.RemoveEmptyEntries); a.Add(int.Parse(tokens[0])); b.Add(int.Parse(tokens[1])); } a = a.OrderBy(x => x).ToList(); b = b.OrderBy(x => x).ToList(); int totalDistance = a.Select((t, i) => Math.Abs(t - b[i])).Sum(); Console.WriteLine(totalDistance); var aBucket = a.GroupBy(x => x); var star2 = aBucket.Select(bucket => bucket.Key * b.Count(x => x == bucket.Key) * bucket.Count()).Sum(); Console.WriteLine(star2);