diff --git a/jour11/jour11.lua b/jour11/jour11.lua new file mode 100644 index 0000000..c00364f --- /dev/null +++ b/jour11/jour11.lua @@ -0,0 +1,91 @@ +local function suivant(mot) + local len = mot:len() + local ret = mot:sub(1, len - 1) + if mot:sub(len, len) == 'z' then + ret = suivant(ret) .. 'a' + else + ret = ret .. string.char(string.byte(mot:sub(len, len)) + 1) + end + return ret +end + +local function suite(mot) + local ret = false + local pred = nil + local i = 1 + local c = nil + while not (ret and pred == nil) and i <= mot:len() do + c = mot:sub(i, i) + if pred == nil then + pred = c + elseif pred ~= nil then + if string.byte(pred) == (string.byte(c) - 1) then + if ret then + pred = nil + else + pred = c + ret = true + end + else + ret = false + pred = c + end + end + i = i + 1 + end + if ret and pred == nil then + return true + else + return false + end +end + +local function double(mot) + local ret = 0 + local pred = nil + for c in mot:gmatch(".") do + if pred ~= nil and pred == c then + ret = ret + 1 + pred = nil + else + pred = c + end + end + return ret +end + +local function badChar(mot, char) + local ret = mot + local tmp = mot:find(char) + + if tmp ~= nil then + if tmp == 1 then + ret = string.char(string.byte(ret:sub(tmp, tmp)) + 1) .. string.rep('a', ret:len() - tmp) + elseif tmp == ret:len() then + ret = ret:sub(1, tmp-1) .. string.char(string.byte(ret:sub(tmp, tmp)) + 1) + else + ret = ret:sub(1, tmp - 1) .. string.char(string.byte(ret:sub(tmp, tmp)) + 1) .. string.rep('a', ret:len() - tmp) + end + end + return ret +end + +myInput = "cqjxjnds" +fin = false + +while not fin do + myInput = badChar(myInput, 'i') + myInput = badChar(myInput, 'l') + myInput = badChar(myInput, 'o') + if suite(myInput) and double(myInput) >= 2 then + print(myInput) + fin = true + else + myInput = suivant(myInput) + 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)