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;
}