Programming Challenge #8 [Beginner]

Tbh, when I came across the problem, even the time when I was writing the post I didn’t have realized there exists such a simple solution (so I will change the challenge level to beginner). Good job! Btw I was thinking the there should exist a simple solution for implementing the solution for different numerical types in more languages that it actually seems to.

In C, I found it really difficult to implement such this for the matter of a game. So even the poster couldn’t solve the full challenge :stuck_out_tongue: But challenge can remain for anybody interested to.

This is the solution I came up with. I 'll call it Mergy-sorty cause it reminds me the Merge-sort :stuck_out_tongue:

void print(int num) {
    int i;
    int mask = 1<<sizeof(int)*8-1;
    for(i=1; i<=sizeof(int); i++){
        printf("%u",num & mask ? 1 : 0);
        if (i%4 == 0) printf(" ");
        num = num<<1;
    }

    printf("\n");
}

int srl(int num, int sa) {
    return (int)((unsigned int) num >> sa);
}

int reverse(int num, int size, int splits, int mask) {
    int mask2, mask1;
    if (size == splits) {
        return num & mask;
    } else if (splits == 0) {
        splits = 2;
        mask1 = -1<<(size/2);
        mask2 = srl(-1, size/2);

        /*
        printf("mask1 : ");
        print(mask1);
        printf("mask2 : ");
        print(mask2);
        printf("num   : ");
        print(num);
        printf("\n");
        */
        
        return reverse((num<<(size/splits)) & mask1, size, splits, mask1) ^ reverse(srl(num, size/splits) & mask2, size, splits, mask2);
    } else {
        splits *= 2;
        mask1 = (mask<<(size/splits)) & mask;
        mask2 = srl(mask, size/splits) & mask;

        /*
        printf("mask1 : ");
        print(mask1);
        printf("mask2 : ");
        print(mask2);
        printf("num   : ");
        print(num);
        printf("\n");
        */
        
        return reverse((num<<(size/splits)) & mask1, size, splits, mask1) ^ reverse(srl(num, size/splits) & mask2, size, splits, mask2);
    }
}

####Tip :
Out-comment the print statements to unveil the magic

1 Like