public void TestAndMask() { var actual = DockingData.AndMaskFromString("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X"); Assert.True(actual.Get(1)); Assert.Equal(35, actual.AsEnumerable().Count(bit => bit == false)); }
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))); }
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); }
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); }
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); }
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); }
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); }
public void Day14_Full_Part2() { var data = TestUtil.GetFileContentsAsString("Day14.txt").Split(Environment.NewLine); Assert.AreEqual(3296185383161, DockingData.Part2(data)); }
public void Day14_Full_Part1() { var data = TestUtil.GetFileContentsAsString("Day14.txt").Split(Environment.NewLine); Assert.AreEqual(14862056079561, DockingData.Part1(data)); }