public void Day09XmasDecoder_Part1_OK()
        {
            var numbers = DailyDataUtilities.ReadLongsFromFile("Day09Data.txt");

            Assert.Equal(1000, numbers.Count);

            var  sut    = new XmasDecoder(numbers, 25);
            long actual = sut.FindFirstFail();

            Assert.Equal(69316178, actual);
        }
        public void Day10AdapterCheck_Part1_and_Part2_OK()
        {
            var adapters = DailyDataUtilities.ReadLongsFromFile("Day10Data.txt");

            Assert.Equal(103, adapters.Count);

            adapters.Sort();
            adapters.Insert(0, 0);
            adapters.Add(adapters[adapters.Count - 1] + 3);
            List <long> diffs = new List <long>();

            for (int i = 0; i < adapters.Count - 1; i++)
            {
                diffs.Add(adapters[i + 1] - adapters[i]);
            }
            var ones   = diffs.Where(d => d == 1).Count();
            var threes = diffs.Where(d => d == 3).Count();

            Assert.Equal(2343, ones * threes);

            Dictionary <long, long> combos = new Dictionary <long, long>();

            // the first has to exist
            combos.Add(0, 1);
            for (int idx = 1; idx < adapters.Count; idx++)
            {
                combos.Add(adapters[idx], 0);
                if (combos.ContainsKey(adapters[idx] - 1))
                {
                    combos[adapters[idx]] += combos[adapters[idx] - 1];
                }
                if (combos.ContainsKey(adapters[idx] - 2))
                {
                    combos[adapters[idx]] += combos[adapters[idx] - 2];
                }
                if (combos.ContainsKey(adapters[idx] - 3))
                {
                    combos[adapters[idx]] += combos[adapters[idx] - 3];
                }
            }

            Assert.Equal(31581162962944, combos[adapters.Max()]);
        }
        public void Day10ReadData_OK()
        {
            var adapters = DailyDataUtilities.ReadLongsFromFile("Day10Data.txt");

            Assert.Equal(103, adapters.Count);
        }
        public void Day09ReadDataFileAsLongs_OK()
        {
            var numbers = DailyDataUtilities.ReadLongsFromFile("Day09Data.txt");

            Assert.Equal(1000, numbers.Count);
        }