Detect Circular Pattern Match

Code

#include <stdio.h>
#include <stdint.h>

uint16_t rotateright(int n,uint16_t reg)
{
    int arr[16],num=0;
    for(int j=0;j<16;j++)
    {
        arr[j]=(reg>>j)&1;
    }
    while(n)
    {
        int temp=arr[0];
        for(int i=1;i<=15;i++)
        {
            arr[i-1]=arr[i];
        }
        arr[15]=temp;
        n--;
    }
    for(int i=15;i>=0;i--)
    {
        if(arr[i]==1)
            num |=1<<i;
        else if (arr[i]==0)
            num &=~(1<<i);
    }
    return num;
}
uint8_t is_circular_match(uint16_t reg, uint16_t target) 
{
    for(int i=1;i<=15;i++)
    {
        if(rotateright(i,reg)==target)
        {
            return 1;
        }
    }
    return 0;
}

int main() {
    uint16_t reg, target;
    scanf("%hu %hu", &reg, &target);
    printf("%hhu", is_circular_match(reg, target));
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

45056 11

Expected Output

1