1. Benison Technologies
Role |
Senior Software Engineer |
Profile |
DPDK, C & Python |
1.1. Round 1
Date |
2024-01-17T15:49:08+0530 |
/**
* Benison Technologies interview
* Senior Software Engineer
* DPDK: C & Python
* Round 1
* 2024-01-17T15:49:08+0530
*/
/** print int array using char* */
int convert_char_to_int(char *p)
{
int n = 0;
for (size_t i = 0; i < sizeof(int); i++) {
// handle endianess: big endian / little endian
n += i * 10 + *p++;
}
}
int print_int_array_using_char_ptr(void)
{
int a[] = {2000, 3000, 4000, 5000, 8000};
char *p = a;
for (size_t i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
int n = convert_char_to_int(p);
printf("%d\n", n);
p += i * sizeof(int);
}
}
/** remove repeated characters from string */
char *remove_repeated_chars(char *s)
{
int m[128];
size_t l = strlen(s);
char *t = (char *)malloc(l);
for (size_t i = 0, j = 0; i < l; i++)
if (m[tolower(s[i])]++ > 1) continue;
t[j++] = s[i];
return t;
}
/**
* Swap num bits at positions p1, p2
*
* input: 0101 1101 1011, nbits=3, p1=1, p2=9
*/
int swap_nbits_p1p2(int num, int nbits, int p1, int p2)
{
int mask = 0;
for (int i = 0; i < nbits; i++) mask |= 1;
n1 = num & (mask << p1); // 101
n2 = num & (mask << p2); // 010
num &= n1;
num &= n2;
return num;
}
1.2. Round 2
Date |
2024-01-25T09:30:08+0530 |
#include <stdio.h>
// popcount algorithm
int count_set_bits_popcount(int i)
{
i = i - ((i >> 1) & 0x55555555); // add pairs of bits
i = (i & 0x33333333) + ((i >> 2) & 0x33333333); // quads
i = (i + (i >> 4)) & 0x0F0F0F0F; // groups of 8
i *= 0x01010101; // horizontal sum of bytes
// return just that top byte (after truncating to 32-bit even
// when int is wider than uint32_t)
return i >> 24;
}
int main(int argc, char *argv[])
{
for (int i = 0; i < 10; i++)
printf("i: %d, b: %d\n", i, count_set_bits_popcount(i));
return 0;
}