Hakerrank
Hakerrank
BACHELOR OF ENGINEERING
in
COMPUTER SCIENCE AND ENGINEERING
By
DIMPAL D
[1JB23CS044]
SUBMITTED TO:
MRS ANUSHA M
[Associative professor]
Dept. of CSE
SJB IT
1 Easy 20
2 Moderate 15
3 Hard 15
Total 50
Moderate Level:
Sl. No. Title Page. No.
1 EXTRA LONG FACTORIAL
2 ORGANIZING CONTAINERS OF BALLS
3 ENCRYPTION
4 BIGGER IS GREATER
5 NON-DIVISIBLE SUBSET
Hard Level:
Sl. No. Title Page. No.
1 BIKE RACERS
2 MATRIX
3 CHIEF HOPPER
4 FLOYD: CITY OF BINDING LIGHTS
5 MATRIX LAYER ROTATION
Easy Level
Problem 1: Solve Me First
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int num1,num2;
scanf("%d %d",&num1,&num2);
int sum;
sum = solveMeFirst(num1,num2);
printf("%d",sum);
return 0;
}
Output:
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
long parse_long(char*);
long aVeryBigSum(int ar_count, long* ar) {
long sum=0;
for(int i=0;i<ar_count;i++){
sum+=ar[i];
}
return sum;
}
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
*(ar + i) = ar_item;
}
long result = aVeryBigSum(ar_count, ar);
fprintf(fptr, "%ld\n", result);
fclose(fptr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return splits;
}
return value;
}
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
int diagonalDifference(int arr_rows, int arr_columns, int** arr) {
int primary_diagonal=0;
int secondary_diagonal=0;
for (int i = 0; i < arr_rows; i++) {
primary_diagonal += arr[i][i];
secondary_diagonal += arr[i][arr_columns - i - 1];
}
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
int n = parse_int(ltrim(rtrim(readline())));
*(*(arr + i) + j) = arr_item;
}
}
int result = diagonalDifference(n, n, arr);
fclose(fptr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
token = strtok(NULL, " ");
}
return splits;
}
int parse_int(char* str) {
char* endptr;
int value = strtol(str, &endptr, 10);
Output:
Program 4: Simple Array Sum
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
*(ar + i) = ar_item;
}
fclose(fptr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return splits;
}
return value;
}
Output:
Program 5: Insertion Sort-Part 1
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
// Shift elements to the right until we find the right position for `value`
while (i >= 0 && arr[i] > value) {
arr[i + 1] = arr[i];
i--;
// Print array state after shifting
for (int j = 0; j < n; j++) {
printf("%d", arr[j]);
if (j != n - 1) {
printf(" ");
}
}
printf("\n");
}
// Insert the value at its correct position
arr[i + 1] = value;
// Finally, print the array with the last element inserted in place
for (int j = 0; j < n; j++) {
printf("%d", arr[j]);
if (j != n - 1) {
printf(" ");
}
}
printf("\n");
}
int main()
{
int n = parse_int(ltrim(rtrim(readline())));
*(arr + i) = arr_item;
}
insertionSort1(n, n, arr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
char* rtrim(char* str) {
if (!str) {
return '\0';
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return splits;
}
return value;
}
Output:
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
// Shift elements of arr[0..i-1] that are greater than key, one position ahead
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
// Print the array after inserting the key at its correct position
for (int k = 0; k < n; k++) {
printf("%d", arr[k]);
if (k != n - 1) {
printf(" ");
}
}
printf("\n");
}
int main()
{
int n = parse_int(ltrim(rtrim(readline())));
insertionSort2(n, n, arr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return splits;
}
return value;
}
Output:
Program 7: Min Max Sum
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
int main()
{
*(arr + i) = arr_item;
}
miniMaxSum(5, arr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return splits;
}
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
int parse_int(char*);
void staircase(int n) {
for (int i = 1; i <= n; i++) {
// Print spaces
for (int j = 0; j < n - i; j++) {
printf(" ");
}
// Print hashes
for (int k = 0; k < i; k++) {
printf("#");
}
// New line
printf("\n");
}
int main()
{
int n = parse_int(ltrim(rtrim(readline())));
staircase(n);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
data = realloc(data, alloc_length);
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
return value;
}
Output:
Program 9: Picking Number
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
int max_length = 0;
for (int i = 1; i < 101; i++) {
int sum = frequency[i] + frequency[i - 1];
if (sum > max_length) {
max_length = sum;
}
}
return max_length;
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
int n = parse_int(ltrim(rtrim(readline())));
char** a_temp = split_string(rtrim(readline()));
int* a = malloc(n * sizeof(int));
*(a + i) = a_item;
}
fclose(fptr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
char** split_string(char* str) {
char** splits = NULL;
char* token = strtok(str, " ");
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return splits;
}
return value;
}
Output:
Program 10: Circular Array Rotation
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
int* circularArrayRotation(int a_count, int* a, int k, int queries_count, int* queries, int*
result_count) {
int* result = malloc(queries_count * sizeof(int));
*result_count = queries_count;
k = k % a_count;
return result;
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
*(a + i) = a_item;
}
int* queries = malloc(q * sizeof(int));
*(queries + i) = queries_item;
}
int result_count;
int* result = circularArrayRotation(n, a, k, q, queries, &result_count);
if (i != result_count - 1) {
fprintf(fptr, "\n");
}
}
fprintf(fptr, "\n");
fclose(fptr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
while (*str != '\0' && isspace(*str)) {
str++;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return value;
}
Output:
Moderate Level
Problem 1: Extra Long Factorial
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
int parse_int(char*);
void extraLongFactorials(int n) {
int result[1000];
result[0] = 1;
int result_size = 1;
while (carry) {
result[result_size] = carry % 10;
carry = carry / 10;
result_size++;
}
}
for (int i = result_size - 1; i >= 0; i--) {
printf("%d", result[i]);
}
printf("\n");
int main()
{
int n = parse_int(ltrim(rtrim(readline())));
extraLongFactorials(n);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
*(end + 1) = '\0';
return str;
}
return value;
}
Output:
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* ltrim(char*);
char* rtrim(char*);
char** split_string(char*);
int parse_int(char*);
char* organizingContainers(int container_rows, int container_columns, int** container) {
int* container_capacities = malloc(container_rows * sizeof(int));
int* type_totals = malloc(container_columns * sizeof(int));
free(container_capacities);
free(type_totals);
return "Possible";
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
int q = parse_int(ltrim(rtrim(readline())));
*(*(container + i) + j) = container_item;
}
}
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
if (!*str) {
return str;
}
return str;
}
if (!*str) {
return str;
}
return str;
}
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * ++spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
return splits;
}
return value;
}
Output:
Program 3: Encryption
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
char* encryption(char* s) {
int len = strlen(s);
char* clean = malloc(len + 1);
int clean_len = 0;
free(clean);
return result;
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
char* s = readline();
fclose(fptr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length += strlen(cursor);
alloc_length <<= 1;
data = realloc(data, alloc_length);
if (!data) {
data = '\0';
break;
}
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
if (!data) {
data = '\0';
}
} else {
data = realloc(data, data_length + 1);
if (!data) {
data = '\0';
} else {
data[data_length] = '\0';
}
}
return data;
}
Output:
Program 4: Bigger is Greater
#include <stdio.h>
#include <string.h>
char* biggerIsGreater(char* w) {
int n = strlen(w);
int i = n - 2;
while (i >= 0 && w[i] >= w[i + 1]) {
i--;
}
if (i == -1) {
return "no answer";
}
int j = n - 1;
while (w[j] <= w[i]) {
j--;
}
return w;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
char w[100];
scanf("%s", w);
printf("%s\n", biggerIsGreater(w));
}
return 0;
}
Output:
#include <stdio.h>
if (i == k - i) {
subset_size += (remainder_count[i] > 0) ? 1 : 0;
} else {
return subset_size;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
int S[n];
for (int i = 0; i < n; i++) {
scanf("%d", &S[i]);
}
Hard Level
Problem 1: Bike Racers
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int match[MAX_M];
for (int i = 0; i < M; i++) match[i] = -1;
int count = 0;
for (int i = 0; i < N; i++) {
bool seen[MAX_M] = {false};
if (bpm(i, seen, match))
count++;
if (count >= K) return true;
}
return false;
}
Output:
Program 2: Matrix
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
int city1;
int city2;
int time;
} Edge;
int parent[MAX_CITIES];
bool hasMachine[MAX_CITIES];
int find(int u) {
if (parent[u] != u)
parent[u] = find(parent[u]);
return parent[u];
}
void unionCities(int u, int v) {
int rootU = find(u);
int rootV = find(v);
parent[rootU] = rootV;
hasMachine[rootV] = hasMachine[rootV] || hasMachine[rootU];
}
int compareEdges(const void* a, const void* b) {
return ((Edge*)b)->time - ((Edge*)a)->time;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
int numEdges = n - 1;
Edge* edges = malloc(sizeof(Edge) * numEdges);
printf("%d\n", totalTime);
free(edges);
return 0;
}
Output:
Program 3: Chief Hopper
#include <stdio.h>
int chiefHopper(int arr[], int n) {
int energy = 0;
for (int i = n - 1; i >= 0; i--) {
energy = (energy + arr[i] + 1) / 2;
}
return energy;
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int result = chiefHopper(arr, n);
printf("%d\n", result);
return 0;
}
Output:
int main() {
int n, m;
int dist[MAX_NODES][MAX_NODES];
#include <stdio.h>
#include <stdlib.h>
#define MIN(a, b) ((a) < (b) ? (a) : (b))
for (int i = left; i <= right; i++) matrix[top][i] = elements[(idx + rot) % perimeter], idx++;
for (int i = top + 1; i <= bottom; i++) matrix[i][right] = elements[(idx + rot) % perimeter],
idx++;
for (int i = right - 1; i >= left; i--) matrix[bottom][i] = elements[(idx + rot) % perimeter],
idx++;
for (int i = bottom - 1; i > top; i--) matrix[i][left] = elements[(idx + rot) % perimeter],
idx++;
free(elements);
}
}
int main() {
int m, n, r;
scanf("%d %d %d", &m, &n, &r);
int matrix[300][300];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
scanf("%d", &matrix[i][j]);
rotateMatrix(m, n, r, matrix);
SUBMISSION LIST