Ajout doc et légères modifs
This commit is contained in:
parent
4da02daa03
commit
57b9afa2b5
1 changed files with 34 additions and 17 deletions
|
@ -1,25 +1,40 @@
|
||||||
|
-- Calcule le mot suivant
|
||||||
|
-- @param mot string : le mot à incrémenter
|
||||||
|
-- @return string : le mot incrémenté
|
||||||
|
-- exemple : abcz -> abda
|
||||||
local function suivant(mot)
|
local function suivant(mot)
|
||||||
local len = mot:len()
|
local len = mot:len()
|
||||||
local ret = mot:sub(1, len - 1)
|
local ret = mot:sub(1, len - 1)
|
||||||
if mot:sub(len, len) == 'z' then
|
if mot:sub(len, len) == 'z' then
|
||||||
|
-- utilisé si abzz par ex. s’appelle récursivment pour trouver acaa
|
||||||
ret = suivant(ret) .. 'a'
|
ret = suivant(ret) .. 'a'
|
||||||
else
|
else
|
||||||
ret = ret .. string.char(string.byte(mot:sub(len, len)) + 1)
|
ret = ret .. string.char(mot:sub(len, len):byte() + 1)
|
||||||
end
|
end
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Détecte s’il existe une suite de 3 lettres consécutives
|
||||||
|
-- @param mot string : mot où il faut vérifier s’il y a une suite
|
||||||
|
-- @return bool : true s’il y a une suite, false sinon
|
||||||
|
-- exemple : uabcie -> true; abecud -> false
|
||||||
local function suite(mot)
|
local function suite(mot)
|
||||||
local ret = false
|
local ret = false
|
||||||
local pred = nil
|
local pred = nil
|
||||||
local i = 1
|
local i = 1
|
||||||
local c = nil
|
local c = nil
|
||||||
while not (ret and pred == nil) and i <= mot:len() do
|
-- lorsqu’on trouve la première lettre, on met ret à true et pred à c
|
||||||
|
-- si on trouve la troisième lettre, on met pred à nil.
|
||||||
|
-- si ret est à true et pred à nil, on a trouvé une suite de 3 lettres
|
||||||
|
while not (ret and pred == nil) and i <= #mot do
|
||||||
c = mot:sub(i, i)
|
c = mot:sub(i, i)
|
||||||
|
-- première itération
|
||||||
if pred == nil then
|
if pred == nil then
|
||||||
pred = c
|
pred = c
|
||||||
elseif pred ~= nil then
|
elseif pred ~= nil then
|
||||||
if string.byte(pred) == (string.byte(c) - 1) then
|
if pred:byte() == (c:byte() - 1) then
|
||||||
|
-- si le pred est bien prédecesseur de c, on vérifie ret
|
||||||
|
-- pour modifier ensuite pred en conséquence (nil si fin)
|
||||||
if ret then
|
if ret then
|
||||||
pred = nil
|
pred = nil
|
||||||
else
|
else
|
||||||
|
@ -33,17 +48,18 @@ local function suite(mot)
|
||||||
end
|
end
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
if ret and pred == nil then
|
return (ret and pred == nil) and true or false
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Cherche le nombre de double dans un mot
|
||||||
|
-- @param mot string : mot à vérifier
|
||||||
|
-- @return int : le nombre de double présent
|
||||||
|
-- exemple : aaabc -> 1; aacaauxxii -> 4
|
||||||
local function double(mot)
|
local function double(mot)
|
||||||
local ret = 0
|
local ret = 0
|
||||||
local pred = nil
|
local pred = nil
|
||||||
for c in mot:gmatch(".") do
|
for c in mot:gmatch(".") do
|
||||||
|
-- pred ~= obligatoire car on ne peut pas comparer un char avec un nil
|
||||||
if pred ~= nil and pred == c then
|
if pred ~= nil and pred == c then
|
||||||
ret = ret + 1
|
ret = ret + 1
|
||||||
pred = nil
|
pred = nil
|
||||||
|
@ -54,17 +70,23 @@ local function double(mot)
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- incrémente le mot selon le mauvais caractère
|
||||||
|
-- @param mot string : le mot à modifier
|
||||||
|
-- @param char string : le caractère à trouver et incrémenter
|
||||||
|
-- @return string : le mot modifié ou non
|
||||||
|
-- exemple : avec char = i
|
||||||
|
-- abcidd -> abcjaa; abcde -> abcde
|
||||||
local function badChar(mot, char)
|
local function badChar(mot, char)
|
||||||
local ret = mot
|
local ret = mot
|
||||||
local tmp = mot:find(char)
|
local tmp = mot:find(char)
|
||||||
|
|
||||||
if tmp ~= nil then
|
if tmp ~= nil then
|
||||||
if tmp == 1 then
|
if tmp == 1 then
|
||||||
ret = string.char(string.byte(ret:sub(tmp, tmp)) + 1) .. string.rep('a', ret:len() - tmp)
|
ret = string.char(ret:sub(tmp, tmp):byte() + 1) .. string.rep('a', #ret - tmp)
|
||||||
elseif tmp == ret:len() then
|
elseif tmp == ret:len() then
|
||||||
ret = ret:sub(1, tmp-1) .. string.char(string.byte(ret:sub(tmp, tmp)) + 1)
|
ret = ret:sub(1, tmp-1) .. string.char(ret:sub(tmp, tmp):byte() + 1)
|
||||||
else
|
else
|
||||||
ret = ret:sub(1, tmp - 1) .. string.char(string.byte(ret:sub(tmp, tmp)) + 1) .. string.rep('a', ret:len() - tmp)
|
ret = ret:sub(1, tmp - 1) .. string.char(ret:sub(tmp, tmp):byte() + 1) .. string.rep('a', #ret - tmp)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return ret
|
return ret
|
||||||
|
@ -84,8 +106,3 @@ while not fin do
|
||||||
myInput = suivant(myInput)
|
myInput = suivant(myInput)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- une suite de 3 caractères au moins (abc par ex)
|
|
||||||
-- ne doit pas contenir i l o
|
|
||||||
-- doit avoir 2 doubles (aa et cc par ex)
|
|
||||||
|
|
Loading…
Reference in a new issue