Beispiel #1
0
        public void TestAndMask()
        {
            var actual = DockingData.AndMaskFromString("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X");

            Assert.True(actual.Get(1));
            Assert.Equal(35, actual.AsEnumerable().Count(bit => bit == false));
        }
Beispiel #2
0
        public void Day14_Example_01()
        {
            var input = @"mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X
mem[8] = 11
mem[7] = 101
mem[8] = 0";

            Assert.AreEqual(165, DockingData.Part1(input.Split(Environment.NewLine)));
        }
Beispiel #3
0
        public void Day14_Example_02()
        {
            var input = @"mask = 000000000000000000000000000000X1001X
mem[42] = 100
mask = 00000000000000000000000000000000X0XX
mem[26] = 1";

            Assert.AreEqual(208, DockingData.Part2(input.Split(Environment.NewLine)));
        }
        public long ProcessData2(string line)
        {
            // decoder 2
            if (string.IsNullOrWhiteSpace(line))
            {
                throw new ArgumentNullException(nameof(line));
            }

            if (line.StartsWith("mask = "))
            {
                // update the mask
                Mask      = line.Substring(7);
                MaskArray = Mask.ToCharArray();
                return(0);
            }
            // line of data
            var  parts = line.Split(new char[] { '=' });
            long mem   = long.Parse(parts[0].Replace("mem[", "").Replace("]", "").Trim());
            long value = long.Parse(parts[1].Trim());

            string bmem    = Convert.ToString(mem, 2).PadLeft(36).Replace(" ", "0");
            var    bmemarr = bmem.ToCharArray();
            int    len     = Math.Max(bmemarr.Length, MaskArray.Length);

            for (int i = 0; i < len; i++)
            {
                switch (MaskArray[i])
                {
                case '0':
                    // 0 don't change anything
                    break;

                case '1':
                    bmemarr[i] = '1';
                    break;

                default:
                    bmemarr[i] = 'X';
                    break;
                }
            }
            bmem = string.Join(null, bmemarr);
            var memArr = GenerateMemoryAddresses(bmem);

            foreach (var addr in memArr)
            {
                if (DockingData.ContainsKey(addr))
                {
                    DockingData[addr] = value;
                }
                else
                {
                    DockingData.Add(addr, value);
                }
            }
            return(value);
        }
Beispiel #5
0
        public void PuzzlePartTwo()
        {
            //  Arrange
            var input = File
                        .ReadLines("tests/y2020/Day14.Input.txt")
                        .ToArray()
                        .ToProgram();

            // Act
            var actual = DockingData.EvaluateV2(input);

            // Assert
            Assert.Equal(3817372618036ul, actual);
        }
Beispiel #6
0
        public void PuzzlePartOne()
        {
            //  Arrange
            var input = File
                        .ReadLines("tests/y2020/Day14.Input.txt")
                        .ToArray()
                        .ToProgram();

            // Act
            var actual = DockingData.Evaluate(input);

            // Assert
            Assert.Equal(10035335144067ul, actual);
        }
Beispiel #7
0
        public void PuzzleTwo()
        {
            // Arrange
            var program = @"
mask = 000000000000000000000000000000X1001X
mem[42] = 100
mask = 00000000000000000000000000000000X0XX
mem[26] = 1".ToProgram();

            // Act
            var actual = DockingData.EvaluateV2(program);

            // Assert
            Assert.Equal(208ul, actual);
        }
Beispiel #8
0
        public void PuzzleOne()
        {
            // Arrange
            var program = @"
mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X
mem[8] = 11
mem[7] = 101
mem[8] = 0".ToProgram();

            // Act
            var actual = DockingData.Evaluate(program);

            // Assert
            Assert.Equal(165ul, actual);
        }
        public long ProcessData(string line)
        {
            if (string.IsNullOrWhiteSpace(line))
            {
                throw new ArgumentNullException(nameof(line));
            }

            if (line.StartsWith("mask = "))
            {
                // update the mask
                Mask      = line.Substring(7);
                MaskArray = Mask.ToCharArray();
                return(0);
            }
            // line of data
            var    parts   = line.Split(new char[] { '=' });
            long   mem     = long.Parse(parts[0].Replace("mem[", "").Replace("]", "").Trim());
            long   value   = long.Parse(parts[1].Trim());
            string bval    = Convert.ToString(value, 2).PadLeft(36).Replace(" ", "0");
            var    bvalarr = bval.ToCharArray();
            int    len     = Math.Max(bvalarr.Length, MaskArray.Length);

            for (int i = 0; i < len; i++)
            {
                bvalarr[i] = MaskArray[i] == 'X' ? bvalarr[i] : MaskArray[i];
            }
            bval  = string.Join(null, bvalarr);
            value = Convert.ToInt64(bval, 2);
            if (DockingData.ContainsKey(mem))
            {
                DockingData[mem] = value;
            }
            else
            {
                DockingData.Add(mem, value);
            }
            return(value);
        }
Beispiel #10
0
        public void Day14_Full_Part2()
        {
            var data = TestUtil.GetFileContentsAsString("Day14.txt").Split(Environment.NewLine);

            Assert.AreEqual(3296185383161, DockingData.Part2(data));
        }
Beispiel #11
0
        public void Day14_Full_Part1()
        {
            var data = TestUtil.GetFileContentsAsString("Day14.txt").Split(Environment.NewLine);

            Assert.AreEqual(14862056079561, DockingData.Part1(data));
        }