From c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:08:27 +0200 Subject: add: graphs et rushs --- rushs/tinyprintf/levenshtein/levenshtein.c | 72 ++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 rushs/tinyprintf/levenshtein/levenshtein.c (limited to 'rushs/tinyprintf/levenshtein/levenshtein.c') diff --git a/rushs/tinyprintf/levenshtein/levenshtein.c b/rushs/tinyprintf/levenshtein/levenshtein.c new file mode 100644 index 0000000..4da9397 --- /dev/null +++ b/rushs/tinyprintf/levenshtein/levenshtein.c @@ -0,0 +1,72 @@ +#include "levenshtein.h" + +#include + +size_t max(size_t a, size_t b) +{ + if (a >= b) + { + return a; + } + return b; +} + +size_t min(size_t a, size_t b) +{ + if (a <= b) + { + return a; + } + return b; +} + +size_t min_3(size_t a, size_t b, size_t c) +{ + if (a <= b) + { + if (a <= c) + { + return a; + } + return c; + } + else + { + if (b <= c) + { + return b; + } + return c; + } +} + +size_t my_strlen(const char *s) +{ + size_t i; + for (i = 0; s[i]; i++) + { + continue; + } + return i; +} + +size_t levenshtein(const char *s1, const char *s2) +{ + size_t l1 = my_strlen(s1); + size_t l2 = my_strlen(s2); + if (min(l1, l2) == 0) + { + return max(l1, l2); + } + + if (s1[0] == s2[0]) + { + return levenshtein(s1 + 1, s2 + 1); + } + + size_t lev1 = levenshtein(s1 + 1, s2); + size_t lev2 = levenshtein(s1, s2 + 1); + size_t lev3 = levenshtein(s1 + 1, s2 + 1); + + return 1 + min_3(lev1, lev2, lev3); +} -- cgit v1.2.3