aboutsummaryrefslogtreecommitdiff
path: root/analyzer/utils
diff options
context:
space:
mode:
Diffstat (limited to 'analyzer/utils')
-rw-r--r--analyzer/utils/memory.h4
-rw-r--r--analyzer/utils/roman.c13
-rw-r--r--analyzer/utils/roman.h23
3 files changed, 30 insertions, 10 deletions
diff --git a/analyzer/utils/memory.h b/analyzer/utils/memory.h
new file mode 100644
index 0000000..1de58b9
--- /dev/null
+++ b/analyzer/utils/memory.h
@@ -0,0 +1,4 @@
+// utils/memory.h
+// helper functions for dealing with memory management
+
+#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))
diff --git a/analyzer/utils/roman.c b/analyzer/utils/roman.c
index 9ea2bbb..4fbe5c0 100644
--- a/analyzer/utils/roman.c
+++ b/analyzer/utils/roman.c
@@ -1,16 +1,15 @@
#include "utils/roman.h"
-#include <stddef.h>
#include <string.h>
+#include "utils/memory.h"
+
void to_roman(char *buffer, int number) {
buffer[0] = '\0';
- int nums[ROMAN_CHAR_COUNT] = ROMAN_NUMS;
- char *chars[ROMAN_CHAR_COUNT] = ROMAN_CHARS;
- for (size_t i = 0; i < ROMAN_CHAR_COUNT; i++) {
- for (size_t j = 0; j < number / nums[i]; j++) {
- strcat(buffer, chars[i]);
+ for (size_t i = 0; i < ARR_LEN(roman_symbols); i++) {
+ for (size_t j = 0; j < number / roman_symbols[i].num; j++) {
+ strcat(buffer, roman_symbols[i].symbol);
}
- number %= nums[i];
+ number %= roman_symbols[i].num;
}
}
diff --git a/analyzer/utils/roman.h b/analyzer/utils/roman.h
index b4f5d3f..cebd16e 100644
--- a/analyzer/utils/roman.h
+++ b/analyzer/utils/roman.h
@@ -1,9 +1,26 @@
// utils/roman.h
// functions for roman numbers
-#define ROMAN_CHAR_COUNT 13
-#define ROMAN_NUMS {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
-#define ROMAN_CHARS {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}
+typedef struct {
+ int num;
+ char *symbol;
+} RomanSymbol;
+
+static const RomanSymbol roman_symbols[] = {
+ {1000, "M"},
+ {900, "CM"},
+ {500, "D"},
+ {400, "CD"},
+ {100, "C"},
+ {90, "XC"},
+ {50, "L"},
+ {40, "XL"},
+ {10, "X"},
+ {9, "IX"},
+ {5, "V"},
+ {4, "IV"},
+ {1, "I"},
+};
// convert a arabic number to roman number
// params: