{"id":"mvpqwh","deleted":false,"future_paste":false,"expired":false,"language":"cpp","created_at":"2025-09-24 07:47:00","expires_at":null,"content":"#include <bits\/stdc++.h>\r\nusing namespace std;\r\nstruct Sector {\r\n\tint16_t floor, ceil;\r\n\tchar floortex[8], ceiltex[8];\r\n\tint16_t light, special, tag;\r\n\tvoid print(int idx, int diff)\r\n\t{\r\n\t\tstring ftex(floortex, find(floortex, floortex+8, '\\0'));\r\n\t\tstring ctex(ceiltex, find(ceiltex, ceiltex+8, '\\0'));\r\n\t\tint w = 8;\r\n\r\n\t\tcout << left << setfill(' ');\r\n\r\n\t\tif (idx > 0)                      cout << \" idx \" << setw(w) << idx;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\t\tif (!diff || (diff & 0b10))       cout << \" flr \" << setw(w) <<  floor;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\t\tif (!diff || (diff & 0b100))      cout << \" cei \" << setw(w) << ceil;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\t\tif (!diff || (diff & 0b1000))     cout << \" ftx \" << setw(w) <<  ftex;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\t\tif (!diff || (diff & 0b10000))    cout << \" ctx \" << setw(w) << ctex;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\t\tif (!diff || (diff & 0b100000))   cout << \" lig \" << setw(w) << light;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\t\tif (!diff || (diff & 0b1000000))  cout << \" spc \" << setw(w) << special;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\t\tif (!diff || (diff & 0b10000000)) cout << \" tag \" << setw(w) << tag;\r\n\t\telse                              cout << \"     \" << setw(w) << \"=\";\r\n\r\n\t\tcout << \"\\n\";\r\n\t}\r\n\tint compare(Sector &other)\r\n\t{\r\n\t\tint diff = 0;\r\n\t\tif (floor != other.floor)             diff |= 0b10;\r\n\t\tif (ceil != other.ceil)               diff |= 0b100;\r\n\t\tif (strcmp(floortex, other.floortex)) diff |= 0b1000;\r\n\t\tif (strcmp(ceiltex, other.ceiltex))   diff |= 0b10000;\r\n\t\tif (light != other.light)             diff |= 0b100000;\r\n\t\tif (special != other.special)         diff |= 0b1000000;\r\n\t\tif (tag != other.tag)                 diff |= 0b10000000;\r\n\t\treturn diff;\r\n\t}\r\n} sectorA, sectorB;\r\nint main(int argc, char** argv)\r\n{\r\n\tif (argc < 3) { std::cout << \"usage: \" << argv[0] << \" SECTORS1.lmp SECTORS2.lmp\\n\"; return 1; }\r\n\tifstream fileA(argv[1]), fileB(argv[2]);\r\n\tbool endA = false, endB = false;\r\n\tfor (int i = 0; !(endA && endB); ++i)\r\n\t{\r\n\t\tif (fileA.peek() == EOF) endA = true;\r\n\t\telse fileA.read((char*)&sectorA, sizeof(Sector));\r\n\t\tif (fileB.peek() == EOF) endB = true;\r\n\t\telse fileB.read((char*)&sectorB, sizeof(Sector));\r\n\t\tif (endB && !endA) { cout << \"--- \"; sectorA.print(i, 0); }\r\n\t\telse if (endA && !endB) { cout << \"+++ \"; sectorB.print(i, 0); }\r\n\t\telse {\r\n\t\t\tint diff = sectorA.compare(sectorB);\r\n\t\t\tif (diff) {\r\n\t\t\t\tcout << \"\\n\";\r\n\t\t\t\tcout << \"<<< \"; sectorA.print(-1, diff);\r\n\t\t\t\tcout << \">>> \"; sectorB.print(i, 0);\r\n\t\t\t\tcout << \"\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn 0;\r\n}"}