История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
По поводу find
А так, бей входящую квестовую строку на токены и рули =)
--разбить текущее сообщение на токены
--проверить наличие в сообщении всех нужных
--слов согласно правилу
--вернуть инфу содержит ли сообщение все нужные слова
--и в любом случае вернуть всё что совпало с правилом
function check_items(message,items)
local found = {};
local notfound = {};
for item in string.gmatch(message, '([^,^%s^.]+)') do
for i=1,#items do
if(items[i] == item) then
found[#found+1] = item;
end
end
end
for i=1,#items do
local cmp = 0;
for k=1,#found do
if(items[i] == found[k]) then
cmp = 1
end
end
if cmp == 0 then
notfound[#notfound+1]=items[i];
end
end
if #found == #items then
return true, found,notfound;
else
return false,found,notfound;
end
end
function print_r(...)
io.write('\x1B[31m')
print(...)
io.write('\x1B[39m')
end
function print_g(...)
io.write('\x1B[32m')
print(...)
io.write('\x1B[39m')
end
function print_y(...)
io.write('\x1B[33m')
print(">>> ".. ...)
io.write('\x1B[39m')
end
-- принять сообщение и правило квеста
function check_quest(message,rule)
print_y(message);
local state,found,notfound = check_items(message,rule)
-- всё нашлось квест выполнен в полном объёме
-- репортуем об успехе.
if state then
print("### Отлично, вот твоя награда. Спасибо что принёс:");
for i=1,#found do
print_g('-',found[i]);
end
else
print("### Я просил у тебя:");
for k,v in ipairs(rule) do
print_g('-',v);
end
if #found > 0 then
print("### А не только:");
for k,v in ipairs(found) do
print_r('-',v);
end
end
print("### Приснеси:");
for k,v in ipairs(notfound) do
print_g('-',v);
end
end
print("-----------------------------------");
end
local quest_rule = {"яблоки","орехи","Лепрогнома-работника"};
local message = "Я принёс орехи, яблоки, зерно и палку Лепрогнома-работника.";
check_quest(message,quest_rule);
local message = "Я принёс орехи, зерно и палку Лепрогнома-работника.";
check_quest(message,quest_rule);
local message = "Я принёс камушек Лепрогнома-трактирщика.";
check_quest(message,quest_rule);
dron@gnu:~$ lua lalala.lua
>>> Я принёс орехи, яблоки, зерно и палку Лепрогнома-работника.
### Отлично, вот твоя награда. Спасибо что принёс:
- орехи
- яблоки
- Лепрогнома-работника
-----------------------------------
>>> Я принёс орехи, зерно и палку Лепрогнома-работника.
### Я просил у тебя:
- яблоки
- орехи
- Лепрогнома-работника
### А не только:
- орехи
- Лепрогнома-работника
### Приснеси:
- яблоки
-----------------------------------
>>> Я принёс камушек Лепрогнома-трактирщика.
### Я просил у тебя:
- яблоки
- орехи
- Лепрогнома-работника
### Приснеси:
- яблоки
- орехи
- Лепрогнома-работника
-----------------------------------
dron@gnu:~$
Исправление LINUX-ORG-RU, :
Бей входящую квестовую строку на токены и рули =)
--разбить текущее сообщение на токены
--проверить наличие в сообщении всех нужных
--слов согласно правилу
--вернуть инфу содержит ли сообщение все нужные слова
--и в любом случае вернуть всё что совпало с правилом
function check_items(message,items)
local found = {};
local notfound = {};
for item in string.gmatch(message, '([^,^%s^.]+)') do
for i=1,#items do
if(items[i] == item) then
found[#found+1] = item;
end
end
end
for i=1,#items do
local cmp = 0;
for k=1,#found do
if(items[i] == found[k]) then
cmp = 1
end
end
if cmp == 0 then
notfound[#notfound+1]=items[i];
end
end
if #found == #items then
return true, found,notfound;
else
return false,found,notfound;
end
end
function print_r(...)
io.write('\x1B[31m')
print(...)
io.write('\x1B[39m')
end
function print_g(...)
io.write('\x1B[32m')
print(...)
io.write('\x1B[39m')
end
function print_y(...)
io.write('\x1B[33m')
print(">>> ".. ...)
io.write('\x1B[39m')
end
-- принять сообщение и правило квеста
function check_quest(message,rule)
print_y(message);
local state,found,notfound = check_items(message,rule)
-- всё нашлось квест выполнен в полном объёме
-- репортуем об успехе.
if state then
print("### Отлично, вот твоя награда. Спасибо что принёс:");
for i=1,#found do
print_g('-',found[i]);
end
else
print("### Я просил у тебя:");
for k,v in ipairs(rule) do
print_g('-',v);
end
if #found > 0 then
print("### А не только:");
for k,v in ipairs(found) do
print_r('-',v);
end
end
print("### Приснеси:");
for k,v in ipairs(notfound) do
print_g('-',v);
end
end
print("-----------------------------------");
end
local quest_rule = {"яблоки","орехи","Лепрогнома-работника"};
local message = "Я принёс орехи, яблоки, зерно и палку Лепрогнома-работника.";
check_quest(message,quest_rule);
local message = "Я принёс орехи, зерно и палку Лепрогнома-работника.";
check_quest(message,quest_rule);
local message = "Я принёс камушек Лепрогнома-трактирщика.";
check_quest(message,quest_rule);
dron@gnu:~$ lua lalala.lua
>>> Я принёс орехи, яблоки, зерно и палку Лепрогнома-работника.
### Отлично, вот твоя награда. Спасибо что принёс:
- орехи
- яблоки
- Лепрогнома-работника
-----------------------------------
>>> Я принёс орехи, зерно и палку Лепрогнома-работника.
### Я просил у тебя:
- яблоки
- орехи
- Лепрогнома-работника
### А не только:
- орехи
- Лепрогнома-работника
### Приснеси:
- яблоки
-----------------------------------
>>> Я принёс камушек Лепрогнома-трактирщика.
### Я просил у тебя:
- яблоки
- орехи
- Лепрогнома-работника
### Приснеси:
- яблоки
- орехи
- Лепрогнома-работника
-----------------------------------
dron@gnu:~$
Исходная версия LINUX-ORG-RU, :
Бей входящую квестовую строку на токены и рули =)
--разбить текущее сообщение на токены
--проверить наличие в сообщении всех нужных
--слов согласно правилу
--вернуть инфу содержит ли сообщение все нужные слова
--и в любом случае вернуть всё что совпало с правилом
function check_items(message,items)
local found = {};
local notfound = {};
for item in string.gmatch(message, '([^,^%s^.]+)') do
for i=1,#items do
if(items[i] == item) then
found[#found+1] = item;
end
end
end
for i=1,#items do
local cmp = 0;
for k=1,#found do
if(items[i] == found[k]) then
cmp = 1
end
end
if cmp == 0 then
notfound[#notfound+1]=items[i];
end
end
if #found == #items then
return true, found,notfound;
else
return false,found,notfound;
end
end
function print_r(...)
io.write('\x1B[31m')
print(...)
io.write('\x1B[39m')
end
function print_g(...)
io.write('\x1B[32m')
print(...)
io.write('\x1B[39m')
end
function print_y(...)
io.write('\x1B[33m')
print(">>> ".. ...)
io.write('\x1B[39m')
end
-- принять сообщение и правило квеста
function check_quest(message,rule)
print_y(message);
local state,found,notfound = check_items(message,rule)
-- всё нашлось квест выполнен в полном объёме
-- репортуем об успехе.
if state then
print("### Отлично, вот твоя награда. Спасибо что принёс:");
for i=1,#found do
print_g('-',found[i]);
end
else
print("### Я просил у тебя:");
for k,v in ipairs(rule) do
print_g('-',v);
end
if #found > 0 then
print("### А не только:");
for k,v in ipairs(found) do
print_r('-',v);
end
end
print("### Приснеси:");
for k,v in ipairs(notfound) do
print_g('-',v);
end
end
print("-----------------------------------");
end
local quest_rule = {"яблоки","орехи","Лепрогнома-работника"};
local message = "Я принёс орехи, яблоки, зерно и палку Лепрогнома-работника.";
check_quest(message,quest_rule);
local message = "Я принёс орехи, зерно и палку Лепрогнома-работника.";
check_quest(message,quest_rule);
local message = "Я принёс камушек Лепрогнома-трактирщика.";
check_quest(message,quest_rule);
>>> Я принёс орехи, яблоки, зерно и палку Лепрогнома-работника.
### Отлично, вот твоя награда. Спасибо что принёс:
- орехи
- яблоки
- Лепрогнома-работника
>>> Я принёс орехи, яблоки, зерно и палку Лепрогнома-работника.
### Отлично, вот твоя награда. Спасибо что принёс:
- орехи
- яблоки
- Лепрогнома-работника
-----------------------------------
>>> Я принёс орехи, зерно и палку Лепрогнома-работника.
### Я просил у тебя:
- яблоки
- орехи
- Лепрогнома-работника
### А не только:
- орехи
- Лепрогнома-работника
### Приснеси:
- яблоки
-----------------------------------
>>> Я принёс камушек Лепрогнома-трактирщика.
### Я просил у тебя:
- яблоки
- орехи
- Лепрогнома-работника
### Приснеси:
- яблоки
- орехи
- Лепрогнома-работника
-----------------------------------
dron@gnu:~$