コード例 #1
0
        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());
            }
        }
コード例 #2
0
 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)));
         }
     }
 }