#include <stdio.h>
#include <string.h>
// Returns position of first pattern match or -1 if not found
// Example: buffer="abcabc", pattern="cab" should return 2
int findPattern(char* buffer, int bufLen, char* pattern, int patLen)
{
if(buffer==nullptr || pattern==nullptr || bufLen <= 0 || patLen <=0 || patLen > bufLen)
return -1;
int start;
int end;
for( int i = 0; i < bufLen;i++)
{
//simple 2 loops
start = i;
int patternStart = 0;
while(start < bufLen && buffer[start]==pattern[patternStart])
{
start++;
patternStart++;
if(patternStart==patLen)
return i;
}
}
return -1;
}
int main() {
// Test Case 1: Basic match
char buffer1[] = "abcabc";
char pattern1[] = "cab";
printf("Test 1: Expected: 2, Got: %d\n",
findPattern(buffer1, strlen(buffer1), pattern1, strlen(pattern1)));
// Test Case 2: Pattern at start
char buffer2[] = "hello world";
char pattern2[] = "hell";
printf("Test 2: Expected: 0, Got: %d\n",
findPattern(buffer2, strlen(buffer2), pattern2, strlen(pattern2)));
// Test Case 3: Pattern at end
char buffer3[] = "hello world";
char pattern3[] = "orld";
printf("Test 3: Expected: 7, Got: %d\n",
findPattern(buffer3, strlen(buffer3), pattern3, strlen(pattern3)));
// Test Case 4: Pattern not found
char buffer4[] = "hello world";
char pattern4[] = "xyz";
printf("Test 4: Expected: -1, Got: %d\n",
findPattern(buffer4, strlen(buffer4), pattern4, strlen(pattern4)));
// Test Case 5: Empty buffer
char buffer5[] = "";
char pattern5[] = "abc";
printf("Test 5: Expected: -1, Got: %d\n",
findPattern(buffer5, strlen(buffer5), pattern5, strlen(pattern5)));
// Test Case 6: Empty pattern
char buffer6[] = "hello";
char pattern6[] = "";
printf("Test 6: Expected: -1, Got: %d\n",
findPattern(buffer6, strlen(buffer6), pattern6, strlen(pattern6)));
// Test Case 7: Pattern longer than buffer
char buffer7[] = "abc";
char pattern7[] = "abcd";
printf("Test 7: Expected: -1, Got: %d\n",
findPattern(buffer7, strlen(buffer7), pattern7, strlen(pattern7)));
// Test Case 8: Null inputs
printf("Test 8: Expected: -1, Got: %d\n",
findPattern(NULL, 5, pattern1, strlen(pattern1)));
// Test Case 9: Repeated pattern
char buffer9[] = "aaaaa";
char pattern9[] = "aa";
printf("Test 9: Expected: 0, Got: %d\n",
findPattern(buffer9, strlen(buffer9), pattern9, strlen(pattern9)));
// Test Case 10: Single character
char buffer10[] = "abcabc";
char pattern10[] = "b";
printf("Test 10: Expected: 1, Got: %d\n",
findPattern(buffer10, strlen(buffer10), pattern10, strlen(pattern10)));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCi8vIFJldHVybnMgcG9zaXRpb24gb2YgZmlyc3QgcGF0dGVybiBtYXRjaCBvciAtMSBpZiBub3QgZm91bmQKLy8gRXhhbXBsZTogYnVmZmVyPSJhYmNhYmMiLCBwYXR0ZXJuPSJjYWIiIHNob3VsZCByZXR1cm4gMgppbnQgZmluZFBhdHRlcm4oY2hhciogYnVmZmVyLCBpbnQgYnVmTGVuLCBjaGFyKiBwYXR0ZXJuLCBpbnQgcGF0TGVuKQp7CgppZihidWZmZXI9PW51bGxwdHIgfHwgcGF0dGVybj09bnVsbHB0ciB8fCBidWZMZW4gPD0gMCB8fCBwYXRMZW4gPD0wIHx8IHBhdExlbiA+IGJ1ZkxlbikKICAgIHJldHVybiAtMTsKCgppbnQgc3RhcnQ7CmludCBlbmQ7CmZvciggaW50IGkgPSAwOyBpIDwgYnVmTGVuO2krKykKewogICAgLy9zaW1wbGUgMiBsb29wcwogICAgc3RhcnQgPSBpOwogICAgaW50IHBhdHRlcm5TdGFydCA9IDA7CiAgICB3aGlsZShzdGFydCA8IGJ1ZkxlbiAmJiBidWZmZXJbc3RhcnRdPT1wYXR0ZXJuW3BhdHRlcm5TdGFydF0pCiAgICB7CiAgICAgICAgc3RhcnQrKzsKICAgICAgICBwYXR0ZXJuU3RhcnQrKzsKICAgICAgICBpZihwYXR0ZXJuU3RhcnQ9PXBhdExlbikKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgCgkJCQkKICAgIH0KCn0KCnJldHVybiAtMTsKCgp9CgoKCgoKCmludCBtYWluKCkgewogICAgLy8gVGVzdCBDYXNlIDE6IEJhc2ljIG1hdGNoCiAgICBjaGFyIGJ1ZmZlcjFbXSA9ICJhYmNhYmMiOwogICAgY2hhciBwYXR0ZXJuMVtdID0gImNhYiI7CiAgICBwcmludGYoIlRlc3QgMTogRXhwZWN0ZWQ6IDIsIEdvdDogJWRcbiIsIAogICAgICAgICAgIGZpbmRQYXR0ZXJuKGJ1ZmZlcjEsIHN0cmxlbihidWZmZXIxKSwgcGF0dGVybjEsIHN0cmxlbihwYXR0ZXJuMSkpKTsKCiAgICAvLyBUZXN0IENhc2UgMjogUGF0dGVybiBhdCBzdGFydAogICAgY2hhciBidWZmZXIyW10gPSAiaGVsbG8gd29ybGQiOwogICAgY2hhciBwYXR0ZXJuMltdID0gImhlbGwiOwogICAgcHJpbnRmKCJUZXN0IDI6IEV4cGVjdGVkOiAwLCBHb3Q6ICVkXG4iLCAKICAgICAgICAgICBmaW5kUGF0dGVybihidWZmZXIyLCBzdHJsZW4oYnVmZmVyMiksIHBhdHRlcm4yLCBzdHJsZW4ocGF0dGVybjIpKSk7CgogICAgLy8gVGVzdCBDYXNlIDM6IFBhdHRlcm4gYXQgZW5kCiAgICBjaGFyIGJ1ZmZlcjNbXSA9ICJoZWxsbyB3b3JsZCI7CiAgICBjaGFyIHBhdHRlcm4zW10gPSAib3JsZCI7CiAgICBwcmludGYoIlRlc3QgMzogRXhwZWN0ZWQ6IDcsIEdvdDogJWRcbiIsIAogICAgICAgICAgIGZpbmRQYXR0ZXJuKGJ1ZmZlcjMsIHN0cmxlbihidWZmZXIzKSwgcGF0dGVybjMsIHN0cmxlbihwYXR0ZXJuMykpKTsKCiAgICAvLyBUZXN0IENhc2UgNDogUGF0dGVybiBub3QgZm91bmQKICAgIGNoYXIgYnVmZmVyNFtdID0gImhlbGxvIHdvcmxkIjsKICAgIGNoYXIgcGF0dGVybjRbXSA9ICJ4eXoiOwogICAgcHJpbnRmKCJUZXN0IDQ6IEV4cGVjdGVkOiAtMSwgR290OiAlZFxuIiwgCiAgICAgICAgICAgZmluZFBhdHRlcm4oYnVmZmVyNCwgc3RybGVuKGJ1ZmZlcjQpLCBwYXR0ZXJuNCwgc3RybGVuKHBhdHRlcm40KSkpOwoKICAgIC8vIFRlc3QgQ2FzZSA1OiBFbXB0eSBidWZmZXIKICAgIGNoYXIgYnVmZmVyNVtdID0gIiI7CiAgICBjaGFyIHBhdHRlcm41W10gPSAiYWJjIjsKICAgIHByaW50ZigiVGVzdCA1OiBFeHBlY3RlZDogLTEsIEdvdDogJWRcbiIsIAogICAgICAgICAgIGZpbmRQYXR0ZXJuKGJ1ZmZlcjUsIHN0cmxlbihidWZmZXI1KSwgcGF0dGVybjUsIHN0cmxlbihwYXR0ZXJuNSkpKTsKCiAgICAvLyBUZXN0IENhc2UgNjogRW1wdHkgcGF0dGVybgogICAgY2hhciBidWZmZXI2W10gPSAiaGVsbG8iOwogICAgY2hhciBwYXR0ZXJuNltdID0gIiI7CiAgICBwcmludGYoIlRlc3QgNjogRXhwZWN0ZWQ6IC0xLCBHb3Q6ICVkXG4iLCAKICAgICAgICAgICBmaW5kUGF0dGVybihidWZmZXI2LCBzdHJsZW4oYnVmZmVyNiksIHBhdHRlcm42LCBzdHJsZW4ocGF0dGVybjYpKSk7CgogICAgLy8gVGVzdCBDYXNlIDc6IFBhdHRlcm4gbG9uZ2VyIHRoYW4gYnVmZmVyCiAgICBjaGFyIGJ1ZmZlcjdbXSA9ICJhYmMiOwogICAgY2hhciBwYXR0ZXJuN1tdID0gImFiY2QiOwogICAgcHJpbnRmKCJUZXN0IDc6IEV4cGVjdGVkOiAtMSwgR290OiAlZFxuIiwgCiAgICAgICAgICAgZmluZFBhdHRlcm4oYnVmZmVyNywgc3RybGVuKGJ1ZmZlcjcpLCBwYXR0ZXJuNywgc3RybGVuKHBhdHRlcm43KSkpOwoKICAgIC8vIFRlc3QgQ2FzZSA4OiBOdWxsIGlucHV0cwogICAgcHJpbnRmKCJUZXN0IDg6IEV4cGVjdGVkOiAtMSwgR290OiAlZFxuIiwgCiAgICAgICAgICAgZmluZFBhdHRlcm4oTlVMTCwgNSwgcGF0dGVybjEsIHN0cmxlbihwYXR0ZXJuMSkpKTsKCiAgICAvLyBUZXN0IENhc2UgOTogUmVwZWF0ZWQgcGF0dGVybgogICAgY2hhciBidWZmZXI5W10gPSAiYWFhYWEiOwogICAgY2hhciBwYXR0ZXJuOVtdID0gImFhIjsKICAgIHByaW50ZigiVGVzdCA5OiBFeHBlY3RlZDogMCwgR290OiAlZFxuIiwgCiAgICAgICAgICAgZmluZFBhdHRlcm4oYnVmZmVyOSwgc3RybGVuKGJ1ZmZlcjkpLCBwYXR0ZXJuOSwgc3RybGVuKHBhdHRlcm45KSkpOwoKICAgIC8vIFRlc3QgQ2FzZSAxMDogU2luZ2xlIGNoYXJhY3RlcgogICAgY2hhciBidWZmZXIxMFtdID0gImFiY2FiYyI7CiAgICBjaGFyIHBhdHRlcm4xMFtdID0gImIiOwogICAgcHJpbnRmKCJUZXN0IDEwOiBFeHBlY3RlZDogMSwgR290OiAlZFxuIiwgCiAgICAgICAgICAgZmluZFBhdHRlcm4oYnVmZmVyMTAsIHN0cmxlbihidWZmZXIxMCksIHBhdHRlcm4xMCwgc3RybGVuKHBhdHRlcm4xMCkpKTsKCiAgICByZXR1cm4gMDsKfQ==