public void Exec() { var numbersText = File.ReadAllLines(@"Data\day14.txt"); var programs = new List <Progr>(); foreach (var line in numbersText) { if (line.IndexOf("mask") == 0) { var p = new Progr(); p.mems = new List <KeyValuePair <ulong, ulong> >(); var s = line.Split(' '); p.mask = s[2]; programs.Add(p); } else { var s = line.Split(new char[] { ' ', '=', '[', ']' }, StringSplitOptions.RemoveEmptyEntries); programs[programs.Count - 1].mems.Add(new KeyValuePair <ulong, ulong>(ulong.Parse(s[1]), ulong.Parse(s[2]))); } } var one = partOne(programs); var two = partTwo(programs); Console.WriteLine($"partOne: {one} partTwo: {two}"); if (Console.ReadKey().Key == ConsoleKey.Spacebar) { Clipboard.SetText(two.ToString()); } }
void addrs(Progr program, int maskIndex, List <ulong> store, ulong addr) { if (maskIndex >= program.mask.Length) { store.Add(addr); } else { if (program.mask[maskIndex] == '0') { addrs(program, maskIndex + 1, store, addr); } else if (program.mask[maskIndex] == '1') { addrs(program, maskIndex + 1, store, addr | ((ulong)1 << (program.mask.Length - maskIndex - 1))); } else { addrs(program, maskIndex + 1, store, addr & ~((ulong)1 << (program.mask.Length - maskIndex - 1))); addrs(program, maskIndex + 1, store, addr | ((ulong)1 << (program.mask.Length - maskIndex - 1))); } } }