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