Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <iterator>
- #include <string>
- #include <vector>
- #include <map>
- std::map<unsigned long long, unsigned long long> result;
- //void ApplyMask(unsigned long long address, unsigned long long value, std::string& mask)
- //{
- // for (unsigned int i = 0; i < mask.size(); i++)
- // {
- // if (mask[i] == '1')
- // {
- // value |= 1ULL << (mask.size() - i - 1);
- // }
- // else if (mask[i] == '0')
- // {
- // value &= ~(1ULL << (mask.size() - i - 1));
- // }
- // }
- //
- // result[address] = value;
- //}
- void ApplyMask(unsigned long long address, unsigned long long value, std::string& mask)
- {
- unsigned long long a = address;
- for (unsigned int i = 0; i < mask.size(); i++)
- {
- if (mask[i] == '1')
- {
- a |= 1ULL << (mask.size() - i - 1);
- }
- else if (mask[i] == '0')
- {
- //a &= ~(1ULL << (mask.size() - i - 1));
- }
- else
- {
- mask[i] = '0';
- a |= 1ULL << (mask.size() - i - 1);
- ApplyMask(a, value, mask);
- a &= ~(1ULL << (mask.size() - i - 1));
- ApplyMask(a, value, mask);
- mask[i] = 'X';
- }
- }
- result[a] = value;
- }
- int main()
- {
- std::string text;
- std::ifstream ifs;
- ifs.open("data.txt", std::ifstream::in);
- std::string mask;
- unsigned long long answer = 0;
- while (getline(ifs, text))
- {
- std::cout << text << std::endl;
- std::istringstream iss(text);
- std::vector<std::string> results((std::istream_iterator<std::string>(iss)), std::istream_iterator<std::string>());
- if (results[0] == "mask")
- {
- mask = results[2];
- }
- else
- {
- unsigned long long address = atoi(results[0].substr(4, results[0].size() - 3).c_str());
- unsigned long long value = atoi(results[2].c_str());
- ApplyMask(address, value, mask);
- }
- }
- for (std::map<unsigned long long, unsigned long long>::iterator i = result.begin(); i != result.end(); ++i)
- {
- std::cout << "Memory Address " << i->first << " = " << i->second << std::endl;
- answer += i->second;
- }
- std::cout << "Sum = " << answer << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement