public Dictionary <string, Dictionary <long, long> > ParseInput(IEnumerable <string> input)
        {
            var result               = new Dictionary <string, Dictionary <long, long> >();
            var currentMask          = "";
            var currentMaskAddresses = new Dictionary <long, long>();

            foreach (string line in input)
            {
                if (line.StartsWith("mask"))
                {
                    if (!string.IsNullOrEmpty(currentMask))
                    {
                        result.Add(currentMask, currentMaskAddresses);
                    }
                    currentMask          = EncriptionParser.GetMemoryMask(line);
                    currentMaskAddresses = new Dictionary <long, long>();
                }
                else if (line.StartsWith("mem["))
                {
                    long index = EncriptionParser.GetMemoryIndex(line);
                    long value = EncriptionParser.GetMemoryValue(line);

                    currentMaskAddresses.Add(index, value);
                }
            }
            result.Add(currentMask, currentMaskAddresses);

            return(result);
        }
        public Dictionary <long, long> ProcessBitMask(Dictionary <long, long> memory, string mask, Dictionary <long, long> values)
        {
            foreach (var value in values)
            {
                if (_version == 1)
                {
                    string binary = EncriptionParser.ConvertDecimalToBitsString($"{value.Value}");
                    binary            = MaskBits(binary, mask, _version);
                    memory[value.Key] = long.Parse(EncriptionParser.ConvertBitsToDecimalString(binary));
                }
                else
                {
                    string binary = EncriptionParser.ConvertDecimalToBitsString($"{value.Key}");
                    binary = MaskBits(binary, mask, _version);

                    foreach (string adress in MakeBitPermutations(binary))
                    {
                        memory[long.Parse(EncriptionParser.ConvertBitsToDecimalString(adress))] = value.Value;
                    }
                }
            }
            return(memory);
        }