Skip to content

Commit 64e1e58

Browse files
author
Gonzalo Diaz
committed
[Hacker Rank] Warmup: Time Conversion solved ✅. Better coverage + refactoring.
1 parent 661f6ec commit 64e1e58

File tree

2 files changed

+17
-25
lines changed

2 files changed

+17
-25
lines changed

src/lib/exercises/src/hackerrank/warmup/time_conversion.c

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include <exercises/hackerrank/warmup/time_conversion.h>
22

3+
#include <exercises/basic/common.h>
4+
35
/**
46
* @link Problem definition [[docs/hackerrank/warmup/time_conversion.md]]
57
*/
@@ -9,43 +11,32 @@
911
#include <string.h>
1012

1113
char *HACKERRANK_WARMUP_firstN(const char *s, unsigned long n) {
12-
unsigned long len = strlen(s);
13-
if (n > len) {
14-
return NULL;
15-
}
16-
if (n == 0) {
17-
return NULL;
18-
}
14+
unsigned long len = MIN(strlen(s), n);
1915

20-
char *result = (char *)malloc((n + 1) * sizeof(char));
16+
char *result = (char *)malloc((len + 1) * sizeof(char));
2117
if (result == NULL) {
2218
return NULL;
2319
}
2420

25-
strncpy(result, s, n);
21+
strncpy(result, s, len);
2622

27-
result[n] = '\0';
23+
result[len] = '\0';
2824

2925
return result;
3026
}
3127

3228
char *HACKERRANK_WARMUP_lastN(const char *s, unsigned long n) {
33-
unsigned long len = strlen(s);
34-
if (n > len) {
35-
return NULL;
36-
}
37-
if (n == 0) {
38-
return NULL;
39-
}
29+
unsigned long len_total = MIN(strlen(s), n);
30+
unsigned long len_to_copy = MIN(len_total - n, 0l);
4031

41-
char *result = (char *)malloc((n + 1) * sizeof(char));
32+
char *result = (char *)malloc((len_to_copy + 1) * sizeof(char));
4233
if (result == NULL) {
4334
return NULL;
4435
}
4536

46-
strncpy(result, s + len - n, n);
37+
strncpy(result, s + len_total - len_to_copy, len_to_copy);
4738

48-
result[n] = '\0';
39+
result[len_to_copy] = '\0';
4940

5041
return result;
5142
}
@@ -77,7 +68,6 @@ char *HACKERRANK_WARMUP_timeConversion(const char *s) {
7768
free(hour_str);
7869
free(meridian);
7970
free(time_str);
80-
free(endptr);
8171
return NULL;
8272
} else {
8373
printf("The integer value is: %ld\n", hour);

src/tests/unit/lib/hackerrank/warmup/time_conversion.test.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ TEST_CASE("time_conversion JSON Test Cases",
3434

3535
TEST_CASE("time_conversion helper functions edge cases",
3636
"[hackerrank] [helper] [warmup]") {
37-
CHECK(HACKERRANK_WARMUP_firstN("", 10) == nullptr);
38-
CHECK(HACKERRANK_WARMUP_lastN("", 10) == nullptr);
37+
CHECK(strcmp(HACKERRANK_WARMUP_firstN("", 10), "") == 0);
38+
CHECK(strcmp(HACKERRANK_WARMUP_lastN("", 10), "") == 0);
3939

40-
CHECK(HACKERRANK_WARMUP_firstN("", 0) == nullptr);
41-
CHECK(HACKERRANK_WARMUP_lastN("", 0) == nullptr);
40+
CHECK(strcmp(HACKERRANK_WARMUP_firstN("", 0), "") == 0);
41+
CHECK(strcmp(HACKERRANK_WARMUP_lastN("", 0), "") == 0);
42+
43+
CHECK(HACKERRANK_WARMUP_timeConversion("AA:BB:CCPM") == nullptr);
4244
}

0 commit comments

Comments
 (0)