#include <iostream>
#include <string>
template <typename... Args>
bool CompareCFICode(const std::string& CFICode, const Args&... cfiPatterns) {
bool result = true;
auto comparePattern = [&](const std::string& cfiPattern) {
if (CFICode.length() != cfiPattern.length()) {
result = false;
return;
}
for (size_t i = 0; i < CFICode.length(); ++i) {
if (CFICode[i] != cfiPattern[i] && cfiPattern[i] != '#') {
result = false;
return;
}
}
};
// Call comparePattern for each CFI pattern
(comparePattern(cfiPatterns), ...);
return result;
}
int main() {
// Esempio di utilizzo della funzione
std::cout << std::boolalpha; // Per stampare "true" o "false" invece di 1 o 0
std::cout << CompareCFICode("FXIXXX","F#I###") << std::endl; // Output: true
std::cout << CompareCFICode("FXIXXX","F#S###") << std::endl; // Output: false
std::cout << CompareCFICode("FXIXXX","O##S##") << std::endl; // Output: false
std::cout << CompareCFICode("FXIXXX","O##S##") << std::endl; // Output: false
std::cout << CompareCFICode("OXXIXX","F#I###") << std::endl; // Output: false
std::cout << CompareCFICode("OXXIXX","F#S###") << std::endl; // Output: falsw
std::cout << CompareCFICode("OXXIXX","O##S##") << std::endl; // Output: false
std::cout << CompareCFICode("OXXIXX","O##S##") << std::endl; // Output: false
std::cout << CompareCFICode("OXXIXX","O##I##") << std::endl; // Output: true
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CmJvb2wgQ29tcGFyZUNGSUNvZGUoY29uc3Qgc3RkOjpzdHJpbmcmIENGSUNvZGUsIGNvbnN0IEFyZ3MmLi4uIGNmaVBhdHRlcm5zKSB7CiAgICBib29sIHJlc3VsdCA9IHRydWU7CgogICAgYXV0byBjb21wYXJlUGF0dGVybiA9IFsmXShjb25zdCBzdGQ6OnN0cmluZyYgY2ZpUGF0dGVybikgewogICAgICAgIGlmIChDRklDb2RlLmxlbmd0aCgpICE9IGNmaVBhdHRlcm4ubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQ0ZJQ29kZS5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgIGlmIChDRklDb2RlW2ldICE9IGNmaVBhdHRlcm5baV0gJiYgY2ZpUGF0dGVybltpXSAhPSAnIycpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBDYWxsIGNvbXBhcmVQYXR0ZXJuIGZvciBlYWNoIENGSSBwYXR0ZXJuCiAgICAoY29tcGFyZVBhdHRlcm4oY2ZpUGF0dGVybnMpLCAuLi4pOwoKICAgIHJldHVybiByZXN1bHQ7Cn0KCgppbnQgbWFpbigpIHsKICAgIC8vIEVzZW1waW8gZGkgdXRpbGl6em8gZGVsbGEgZnVuemlvbmUKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYTsgIC8vIFBlciBzdGFtcGFyZSAidHJ1ZSIgbyAiZmFsc2UiIGludmVjZSBkaSAxIG8gMAogICAgc3RkOjpjb3V0IDw8IENvbXBhcmVDRklDb2RlKCJGWElYWFgiLCJGI0kjIyMiKSA8PCBzdGQ6OmVuZGw7ICAvLyBPdXRwdXQ6IHRydWUKICAgIHN0ZDo6Y291dCA8PCBDb21wYXJlQ0ZJQ29kZSgiRlhJWFhYIiwiRiNTIyMjIikgPDwgc3RkOjplbmRsOyAgLy8gT3V0cHV0OiBmYWxzZQogICAgc3RkOjpjb3V0IDw8IENvbXBhcmVDRklDb2RlKCJGWElYWFgiLCJPIyNTIyMiKSA8PCBzdGQ6OmVuZGw7ICAvLyBPdXRwdXQ6IGZhbHNlCiAgICBzdGQ6OmNvdXQgPDwgQ29tcGFyZUNGSUNvZGUoIkZYSVhYWCIsIk8jI1MjIyIpIDw8IHN0ZDo6ZW5kbDsgIC8vIE91dHB1dDogZmFsc2UKCgogICAgc3RkOjpjb3V0IDw8IENvbXBhcmVDRklDb2RlKCJPWFhJWFgiLCJGI0kjIyMiKSA8PCBzdGQ6OmVuZGw7ICAvLyBPdXRwdXQ6IGZhbHNlCiAgICBzdGQ6OmNvdXQgPDwgQ29tcGFyZUNGSUNvZGUoIk9YWElYWCIsIkYjUyMjIyIpIDw8IHN0ZDo6ZW5kbDsgIC8vIE91dHB1dDogZmFsc3cKICAgIHN0ZDo6Y291dCA8PCBDb21wYXJlQ0ZJQ29kZSgiT1hYSVhYIiwiTyMjUyMjIikgPDwgc3RkOjplbmRsOyAgLy8gT3V0cHV0OiBmYWxzZQogICAgc3RkOjpjb3V0IDw8IENvbXBhcmVDRklDb2RlKCJPWFhJWFgiLCJPIyNTIyMiKSA8PCBzdGQ6OmVuZGw7ICAvLyBPdXRwdXQ6IGZhbHNlCiAgICBzdGQ6OmNvdXQgPDwgQ29tcGFyZUNGSUNvZGUoIk9YWElYWCIsIk8jI0kjIyIpIDw8IHN0ZDo6ZW5kbDsgIC8vIE91dHB1dDogdHJ1ZQogICAgcmV0dXJuIDA7Cn0K