From 1b87dcc6179a798efb18bcc0e0de448256a1cc1e Mon Sep 17 00:00:00 2001 From: DarkGod <darkgod@net-core.org> Date: Thu, 3 Sep 2020 18:16:58 +0200 Subject: [PATCH] plop --- game/engines/default/engine/utils.lua | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/game/engines/default/engine/utils.lua b/game/engines/default/engine/utils.lua index 117ae4a3bf..23969f07da 100644 --- a/game/engines/default/engine/utils.lua +++ b/game/engines/default/engine/utils.lua @@ -1277,6 +1277,51 @@ function string.split(str, char, keep_separator) return lpeg.match(p, str) end +-- Returns the Levenshtein distance between the two given strings +function string.levenshtein(str1, str2) + local len1 = string.len(str1) + local len2 = string.len(str2) + local matrix = {} + local cost = 0 + + -- quick cut-offs to save time + if (len1 == 0) then + return len2 + elseif (len2 == 0) then + return len1 + elseif (str1 == str2) then + return 0 + end + + -- initialise the base matrix values + for i = 0, len1, 1 do + matrix[i] = {} + matrix[i][0] = i + end + for j = 0, len2, 1 do + matrix[0][j] = j + end + + -- actual Levenshtein algorithm + for i = 1, len1, 1 do + for j = 1, len2, 1 do + if (str1:byte(i) == str2:byte(j)) then + cost = 0 + else + cost = 1 + end + + matrix[i][j] = math.min(matrix[i-1][j] + 1, matrix[i][j-1] + 1, matrix[i-1][j-1] + cost) + end + end + + -- return the last value - this is the Levenshtein distance + return matrix[len1][len2] +end + +function string.levenshtein_p(str1, str2) + return string.levenshtein(str1, str2) / #str1 +end local hex_to_dec = { ["0"] = 0, -- GitLab