#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char *input = "141592653589793238462643383279502884197";
char *test = "33384";
double pc = .8;
int len = strlen(test);
int good = len * pc;
for(int pos = 0; pos < strlen(input)-len; ++pos)
{
int matches = 0;
for(int pos1 = 0; pos1 < len; ++pos1)
{
if(test[pos1] == input[pos + pos1]) matches++;
// below is a small optimisation attempt. It should significantly improve the performance
if(len - pos1 < good - matches)
break; // exiting earler. no reason to stay in the loop
}
if(matches >= good)
{
cout << pos << " " << input + pos << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKQp7CiAgIGNoYXIgKmlucHV0ID0gIjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjg4NDE5NyI7CiAgIGNoYXIgKnRlc3QgID0gIjMzMzg0IjsKICAgZG91YmxlIHBjICAgPSAuODsKICAgCiAgIGludCBsZW4gID0gc3RybGVuKHRlc3QpOwogICBpbnQgZ29vZCA9IGxlbiAqIHBjOwoKICAgZm9yKGludCBwb3MgPSAwOyBwb3MgPCBzdHJsZW4oaW5wdXQpLWxlbjsgKytwb3MpCiAgIHsKICAgICAgIGludCBtYXRjaGVzID0gMDsKICAgICAgIGZvcihpbnQgcG9zMSA9IDA7IHBvczEgPCBsZW47ICsrcG9zMSkKICAgICAgIHsKICAgICAgICAgICBpZih0ZXN0W3BvczFdID09IGlucHV0W3BvcyArIHBvczFdKSBtYXRjaGVzKys7CiAgICAgICAgICAgCiAgICAgICAgICAgLy8gYmVsb3cgaXMgYSBzbWFsbCBvcHRpbWlzYXRpb24gYXR0ZW1wdC4gSXQgc2hvdWxkIHNpZ25pZmljYW50bHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UKICAgICAgICAgICBpZihsZW4gLSBwb3MxIDwgZ29vZCAtIG1hdGNoZXMpCiAgICAgICAgICAgICAgICBicmVhazsgLy8gZXhpdGluZyBlYXJsZXIuIG5vIHJlYXNvbiB0byBzdGF5IGluIHRoZSBsb29wCiAgICAgICB9CiAgICAgICAKICAgICAgIGlmKG1hdGNoZXMgPj0gZ29vZCkKICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCBwb3MgPDwgIiAiIDw8IGlucHV0ICsgcG9zIDw8IGVuZGw7CiAgICAgICB9CiAgIH0KICAgcmV0dXJuIDA7Cn0K