|
Поиск картинки в игре на MEmu |
|
|
PostByMik |
25.10.2020, 17:09
|
 
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40

|
Пытаюсь понять логику работы команды findimage, пока попытки успехом не увенчались. Знающие люди, подскажите, пожалуйста, как работает, какова логика работы данной команды: 1. Можно ли сделать скрин области в игре на эмуляторе MEmu (естественно в формате .bmp 24 бита) и далее её искать в указанной области или это так не работает? 2. если первый пункт не верный, то как надо? А теперь сама задача, которую я пытаюсь решить. Есть игра, в игре есть карта, на карте с определенным промежутком времени появляется караван, на который надо кликнуть и провести еще пару манипуляций мышью. Пытаюсь пока написать код, что бы он находил караван и кликал на него (после нажатия на него откроется меню ну и дальше уже обычные клики и ожидания, этому, вроде, я научился.) Код --lua local startX, startY, endX, endY = 0, 0, 830, 465 -- координаты поиска local path = [["C:\Caravan.bmp"]] -- путь к картинке, bmp 24 бита local arr, a = findimage (startX, startY, endX, endY, {path}, 2, 70, 1, 25) -- поиск картинки hint (a) -- результат поиска, подсказка в правом нижнем углу if arr then -- если найдена log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2]) kleft (arr[1][1], arr[1][2]) -- кликнули end
 Это скрин карты в игре с караваном на ней, пытался на нем потренироваться, не находит (
Caravan.bmp ( 18,36 килобайт )
Кол-во скачиваний: 192 Это скрин самого каравана, который надо найти. Что я делаю не так, подскажите, пожалуйста.
|
|
|
|
|
  |
Ответов
DarkMaster |
3.11.2020, 17:18
|
          
Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
Есть у меня комбайн под подобные задачи. Работа расписана "для себя", если что-то не понятно - спрашивайте. Вообще для себя я считаю хорошим тоном держать отдельный массив со всеми проверками на цвет для упрощения модификации при необходимости и улучшения читаемости. Например: Спойлер
Код local fi = {} fi.down_left = function() -- Если зеленый цвет, то кд прошел (НИЖНИЙ ЛЕВЫЙ) ДЛЯ PVP! -- если цвет истинный, то возвращаем координаты в таблице -- аналогичной по структуре финдимиджу/финдколору return color(56, 401) == 51541 and {{56,401}} end
fi.down_2_left = function() -- Если зеленый цвет, то кд прошел (СНИЗУ ВТОРОЙ РЯД, ЛЕВЫЙ) ДЛЯ PVP! return color(109, 318) == 51541 and {{109, 318}} end
fi.down_2_right = function() -- Если зеленый цвет, то кд прошел (СНИЗУ ВТОРОЙ РЯД, ПРАВЫЙ) ДЛЯ PVP! return color(161, 319) == 51541 and {{161, 319}} end
fi.down_3_right = function() -- Если зеленый цвет, то кд прошел (СНИЗУ ТРЕТИЙ РЯД, ПРАВЫЙ) ДЛЯ PVP! return color(161, 234) == 51541 and {{161, 234}} end
fi.upper = function() -- Если зеленый цвет, то кд прошел (САМЫЙ ВЕРХНИЙ) ДЛЯ PVP! return color(51, 139) == 51541 and {{51, 139}} end
fi.combat_end_1 = function() -- Если зеленый цвет, то бой завершился return color(527, 421) == 51541 and color(364, 431) == 51541 end
-- Далее мой комбайн. -- Обычно я его подгружаю из отдельного файла, -- чтобы не было помойки. -- В нем нет move или move_smoth перед кликом, -- т.к. обычно это не нужно. -- Если все-таки в этом есть реальная необходимость, -- могу подправить. -- Данный комбайн имеет функцию проверки на -- успешность кликов и будет повторять попытки -- пока success_func не вернет истину или -- не выйдет допустимое время. -- Так же обращаю ваше внимание, -- что для кликов используется функция click. -- Этой функции в пилоте не существует и я ее -- задаю каждый раз в ручную для того, чтобы -- в случае необходимости изменить тип кликов -- не нужно было перелопачивать весь скрипт и везде -- править left на kleft или еще какие-нибудь варианты. local click = kleft -- теперь у нас click тоже саме, что и kleft -- а можно сделать что-то свое. -- в частности у вас использует move_smoth и мы можем -- включить данные перемещения в вызов каждого клика: click = function(x,y) move_smoth(x,y,5,5,5,5) wait(250) kleft(x,y,5,5,5,5) end
-- Очень настоятельно рекомендую -- делать проверки на успех всех кликов. -- У вас нет проверок на успех клика, -- возможно они вам просто не нужны, -- тем не менее у меня они требуются. -- создаем функцию - заглушку, которая -- будет всегда возвращать истину: local true_func = function() return true end
-- Сообственно описание параметров комбайна. -- Синтаксис: --function( -- click_x, click_y, success_func, click_timeout, -- delay, first_delay, blink, limit, -- offset_x, offset_y, override_x, override_y)
-- Функция нажимает в координаты click_x, click_y -- click_x, click_y могут быть заданы сделедующими способами: -- 1) -- click_x - функция возвращающая массив кооринат (findimage/findcolor) -- click_y - Комментарий при фейле поиска либо -- НЕ указывается. Даже nil, параметр пропускается. -- При передаче функции - она будет вызываться каждый раз -- перед попыткой кликнуть, чтобы избежать клика в изменившийся интерфейс. -- 2) -- click_x - массив кооринат (findimage/findcolor) -- click_y - НЕ указывается. Даже nil, параметр пропускается. -- 3) -- click_x - x координата -- click_y - y координата
-- success_func - функция проверки успеха. -- Пока не вернет успех будут попытки кликов. -- Так же может быть задана массивом функций. -- Время попыток может быть ограничено параметром limit.
-- click_timeout - таймер для повторной попытки клика. -- Не влияет на проверки успеха результата. -- Необязательный параметр. Значение по умолчанию 2сек.
-- delay - задержка в мс перед проверкой успеха. -- необязательный параметр. Значение по умолчанию 100мс.
-- first_delay - задержка после _первого_ клика перед началом -- проверок на успех, повторных кликов. -- Необязательный параметр. Значение по умлчанию равно параметру delay * 5.
-- blink - задержка в мс перед повторной проверкой на успешность. -- исключает случаи выхватывания изображения из недогрузившегося окна. -- для выключения проверки используется nil. -- необязательный параметр. Значение по умолчанию nil.
-- limit - ограничение времени (сек) на поиск. -- для одноразвого прогона использовать 0. -- nil - бесконечный поиск. -- необязательный параметр. Значение по умолчанию nil(бесконечно).
-- offset_x, offset_y - смещения координат клика используется, -- если click_x задан функцией. -- Необязательный параметр. По умолчанию nil.
-- override_x, override_y - перезапись координат клика используется, -- если click_x задан функцией. -- Если задан override, то offset игнорируется. -- Необязательный параметр. По умолчанию nil.
local open_with_check = function( click_x, click_y, success_func, click_timeout, delay, first_delay, blink, limit, offset_x, offset_y, override_x, override_y) local x,y
if type(click_x) == "function" then -- координаты клика заданы функцией -- смещаем параметры на 1 позицию вправо. if type(click_y) == "function" or type(click_y) == "table" then override_y = override_x override_x = offset_y offset_y = offset_x offset_x = limit limit = blink blink = first_delay first_delay = delay or (click_timeout or 100) * 5 delay = click_timeout or 100 click_timeout = success_func or 2 success_func = type(click_y)=="function" and {click_y} or click_y end -- click_y содержит комментарий к функции click_timeout = click_timeout or 2 delay = delay or 100 first_delay = first_delay or delay success_func = type(success_func)=="function" and {success_func} or success_func
elseif type(click_x) == "table" then -- координата клика задана массивом -- смещаем параметры на 1 позицию вправо. override_y = override_x override_x = offset_y offset_y = offset_x offset_x = limit limit = blink blink = first_delay first_delay = delay or (click_timeout or 100) * 5 delay = click_timeout or 100 click_timeout = success_func or 2 success_func = type(click_y)=="function" and {click_y} or click_y y = click_x[1][2] x = click_x[1][1]
else -- координата клика задана двумя переменными click_timeout = click_timeout or 2 delay = delay or 100 first_delay = first_delay or delay * 5 success_func = type(success_func)=="function" and {success_func} or success_func x = click_x y = click_y end
--[[log(tostring(click_x), tostring(click_y), tostring(success_func), tostring(click_timeout), "\r\n", delay, first_delay, blink, limit, "\r\n", offset_x, offset_y, override_x, override_y) ]]
local next_click_timeout = 0 local limit_timeout = limit and os.clock() + limit local first_run = true local success = false repeat local clock = os.clock() if type(click_x) == "function" then local result = click_x() if result then x = result[1][1] y = result[1][2] if next_click_timeout < clock then if override_x then x = override_x y = override_y elseif offset_x then x = x + offset_x y = y + offset_y end click(x,y) next_click_timeout = clock + click_timeout end else if type(click_y) == "string" then log(click_y) end end else if next_click_timeout < clock then click(x,y) next_click_timeout = clock + click_timeout end end
if first_run then first_run = false wait(first_delay) else wait(delay) end
for i = 1, #success_func do success = success_func[i]() if success then break end end until success or (limit_timeout and limit_timeout < os.clock())
--log("check: " .. tostring(success and true or false)) return success and true or false end
-- соответственно ваш код при использовании данной функции принимает следуещий вид:
repeat -- ДЛЯ PVP! open_with_check(fi.down_left, true_func, 0, 0, nil, 0) open_with_check(fi.down_2_left, true_func, 0, 0, nil, 0) open_with_check(fi.down_2_right, true_func, 0, 0, nil, 0) open_with_check(fi.down_3_right, true_func, 0, 0, nil, 0) open_with_check(fi.upper, true_func, 0, 0, nil, 0) until fi.combat_end_1() -- Если зеленый цвет, то бой завершился
В самом примитивном примере это будет выглять, как: Код local my_func = function(i) log("мы получилив функцию значение "..i..", прилепили к нему текст вывели в лог.") end
for i = 1, 5 do my_func(i) end
Сообщение отредактировал DarkMaster - 3.11.2020, 17:26
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
4.11.2020, 13:44
|
       
Master
Сообщений: 1.403
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22547
Пользователь №: 16.156

|
Цитата(DarkMaster @ 3.11.2020, 17:18)  Есть у меня комбайн под подобные задачи. Работа расписана "для себя", если что-то не понятно - спрашивайте. Вообще для себя я считаю хорошим тоном держать отдельный массив со всеми проверками на цвет для упрощения модификации при необходимости и улучшения читаемости. Например: Спойлер
Код local fi = {} fi.down_left = function() -- Если зеленый цвет, то кд прошел (НИЖНИЙ ЛЕВЫЙ) ДЛЯ PVP! -- если цвет истинный, то возвращаем координаты в таблице -- аналогичной по структуре финдимиджу/финдколору return color(56, 401) == 51541 and {{56,401}} end
fi.down_2_left = function() -- Если зеленый цвет, то кд прошел (СНИЗУ ВТОРОЙ РЯД, ЛЕВЫЙ) ДЛЯ PVP! return color(109, 318) == 51541 and {{109, 318}} end
fi.down_2_right = function() -- Если зеленый цвет, то кд прошел (СНИЗУ ВТОРОЙ РЯД, ПРАВЫЙ) ДЛЯ PVP! return color(161, 319) == 51541 and {{161, 319}} end
fi.down_3_right = function() -- Если зеленый цвет, то кд прошел (СНИЗУ ТРЕТИЙ РЯД, ПРАВЫЙ) ДЛЯ PVP! return color(161, 234) == 51541 and {{161, 234}} end
fi.upper = function() -- Если зеленый цвет, то кд прошел (САМЫЙ ВЕРХНИЙ) ДЛЯ PVP! return color(51, 139) == 51541 and {{51, 139}} end
fi.combat_end_1 = function() -- Если зеленый цвет, то бой завершился return color(527, 421) == 51541 and color(364, 431) == 51541 end -- Далее мой комбайн. -- Обычно я его подгружаю из отдельного файла, -- чтобы не было помойки. -- В нем нет move или move_smoth перед кликом, -- т.к. обычно это не нужно. -- Если все-таки в этом есть реальная необходимость, -- могу подправить. -- Данный комбайн имеет функцию проверки на -- успешность кликов и будет повторять попытки -- пока success_func не вернет истину или -- не выйдет допустимое время. -- Так же обращаю ваше внимание, -- что для кликов используется функция click. -- Этой функции в пилоте не существует и я ее -- задаю каждый раз в ручную для того, чтобы -- в случае необходимости изменить тип кликов -- не нужно было перелопачивать весь скрипт и везде -- править left на kleft или еще какие-нибудь варианты. local click = kleft -- теперь у нас click тоже саме, что и kleft -- а можно сделать что-то свое. -- в частности у вас использует move_smoth и мы можем -- включить данные перемещения в вызов каждого клика: click = function(x,y) move_smoth(x,y,5,5,5,5) wait(250) kleft(x,y,5,5,5,5) end
-- Очень настоятельно рекомендую -- делать проверки на успех всех кликов. -- У вас нет проверок на успех клика, -- возможно они вам просто не нужны, -- тем не менее у меня они требуются. -- создаем функцию - заглушку, которая -- будет всегда возвращать истину: local true_func = function() return true end
-- Сообственно описание параметров комбайна. -- Синтаксис: --function( -- click_x, click_y, success_func, click_timeout, -- delay, first_delay, blink, limit, -- offset_x, offset_y, override_x, override_y)
-- Функция нажимает в координаты click_x, click_y -- click_x, click_y могут быть заданы сделедующими способами: -- 1) -- click_x - функция возвращающая массив кооринат (findimage/findcolor) -- click_y - Комментарий при фейле поиска либо -- НЕ указывается. Даже nil, параметр пропускается. -- При передаче функции - она будет вызываться каждый раз -- перед попыткой кликнуть, чтобы избежать клика в изменившийся интерфейс. -- 2) -- click_x - массив кооринат (findimage/findcolor) -- click_y - НЕ указывается. Даже nil, параметр пропускается. -- 3) -- click_x - x координата -- click_y - y координата
-- success_func - функция проверки успеха. -- Пока не вернет успех будут попытки кликов. -- Так же может быть задана массивом функций. -- Время попыток может быть ограничено параметром limit.
-- click_timeout - таймер для повторной попытки клика. -- Не влияет на проверки успеха результата. -- Необязательный параметр. Значение по умолчанию 2сек.
-- delay - задержка в мс перед проверкой успеха. -- необязательный параметр. Значение по умолчанию 100мс.
-- first_delay - задержка после _первого_ клика перед началом -- проверок на успех, повторных кликов. -- Необязательный параметр. Значение по умлчанию равно параметру delay * 5.
-- blink - задержка в мс перед повторной проверкой на успешность. -- исключает случаи выхватывания изображения из недогрузившегося окна. -- для выключения проверки используется nil. -- необязательный параметр. Значение по умолчанию nil.
-- limit - ограничение времени (сек) на поиск. -- для одноразвого прогона использовать 0. -- nil - бесконечный поиск. -- необязательный параметр. Значение по умолчанию nil(бесконечно).
-- offset_x, offset_y - смещения координат клика используется, -- если click_x задан функцией. -- Необязательный параметр. По умолчанию nil.
-- override_x, override_y - перезапись координат клика используется, -- если click_x задан функцией. -- Если задан override, то offset игнорируется. -- Необязательный параметр. По умолчанию nil.
local open_with_check = function( click_x, click_y, success_func, click_timeout, delay, first_delay, blink, limit, offset_x, offset_y, override_x, override_y) local x,y
if type(click_x) == "function" then -- координаты клика заданы функцией -- смещаем параметры на 1 позицию вправо. if type(click_y) == "function" or type(click_y) == "table" then override_y = override_x override_x = offset_y offset_y = offset_x offset_x = limit limit = blink blink = first_delay first_delay = delay or (click_timeout or 100) * 5 delay = click_timeout or 100 click_timeout = success_func or 2 success_func = type(click_y)=="function" and {click_y} or click_y end -- click_y содержит комментарий к функции click_timeout = click_timeout or 2 delay = delay or 100 first_delay = first_delay or delay success_func = type(success_func)=="function" and {success_func} or success_func
elseif type(click_x) == "table" then -- координата клика задана массивом -- смещаем параметры на 1 позицию вправо. override_y = override_x override_x = offset_y offset_y = offset_x offset_x = limit limit = blink blink = first_delay first_delay = delay or (click_timeout or 100) * 5 delay = click_timeout or 100 click_timeout = success_func or 2 success_func = type(click_y)=="function" and {click_y} or click_y y = click_x[1][2] x = click_x[1][1]
else -- координата клика задана двумя переменными click_timeout = click_timeout or 2 delay = delay or 100 first_delay = first_delay or delay * 5 success_func = type(success_func)=="function" and {success_func} or success_func x = click_x y = click_y end
--[[log(tostring(click_x), tostring(click_y), tostring(success_func), tostring(click_timeout), "\r\n", delay, first_delay, blink, limit, "\r\n", offset_x, offset_y, override_x, override_y) ]] local next_click_timeout = 0 local limit_timeout = limit and os.clock() + limit local first_run = true local success = false repeat local clock = os.clock() if type(click_x) == "function" then local result = click_x() if result then x = result[1][1] y = result[1][2] if next_click_timeout < clock then if override_x then x = override_x y = override_y elseif offset_x then x = x + offset_x y = y + offset_y end click(x,y) next_click_timeout = clock + click_timeout end else if type(click_y) == "string" then log(click_y) end end else if next_click_timeout < clock then click(x,y) next_click_timeout = clock + click_timeout end end
if first_run then first_run = false wait(first_delay) else wait(delay) end for i = 1, #success_func do success = success_func[i]() if success then break end end until success or (limit_timeout and limit_timeout < os.clock())
--log("check: " .. tostring(success and true or false)) return success and true or false end -- соответственно ваш код при использовании данной функции принимает следуещий вид: repeat -- ДЛЯ PVP! open_with_check(fi.down_left, true_func, 0, 0, nil, 0) open_with_check(fi.down_2_left, true_func, 0, 0, nil, 0) open_with_check(fi.down_2_right, true_func, 0, 0, nil, 0) open_with_check(fi.down_3_right, true_func, 0, 0, nil, 0) open_with_check(fi.upper, true_func, 0, 0, nil, 0) until fi.combat_end_1() -- Если зеленый цвет, то бой завершился
В самом примитивном примере это будет выглять, как: Код local my_func = function(i) log("мы получилив функцию значение "..i..", прилепили к нему текст вывели в лог.") end
for i = 1, 5 do my_func(i) end
Интересный подход. А были попытки сериализации таких функций-проверок в массив байт/файл с последующим восстановлением на клиентской стороне через tcp, как например в джаве или .нет ? Механизм многообещающий же.
|
|
|
|
Сообщений в этой теме
PostByMik Поиск картинки в игре на MEmu 25.10.2020, 17:09 cirus
Для чего? getimage или printscreen.
Часто изображ... 25.10.2020, 17:37 PostByMik Я во всем этом новичек, пытаюсь понять сам, но пре... 25.10.2020, 19:28 PostByMik Дайте, пожалуйста, адекватный пример. Со всеми тре... 25.10.2020, 20:11 cirus getimage неправильно работает при работе с экраном... 25.10.2020, 20:17 PostByMik
Так нашел и сохранил сразу. Спасибо огромное... 25.10.2020, 20:32 cirus RE: Поиск картинки в игре на MEmu 25.10.2020, 20:41 PostByMik
Искренне благодарен, с этим файлом работает, но ... 25.10.2020, 20:54 cirus
Открыть искомую картинку в Paint, выбрать каранда... 25.10.2020, 21:08 PostByMik Спасибо за ответ!
Я понимаю, что Вам с высоты ... 25.10.2020, 21:14 Fors1k
Осталось понять про пиксель. Зачем его красить? И... 26.10.2020, 0:05 cirus
--lua
local ffi = require("ffi"... 25.10.2020, 21:51 PostByMik Спасибо огромное за пояснения!
Код буду перев... 25.10.2020, 21:52 PostByMik Подскажите, пожалуйста, как решить проблему.
l... 26.10.2020, 19:28 DarkMaster Я бы рекомендовал:
1) вырезать правый нижний угол ... 26.10.2020, 19:44 cirus Можно удалить из массива лишние картинки.
--lua
fu... 27.10.2020, 4:00 PostByMik
Ох! Спасибо!
А можно пояснить что тут к ч... 27.10.2020, 8:20 cirus Кстати, искать картинки можно и такого вида:
Левы... 27.10.2020, 11:20 dimas01 На эту же тему вопрос. Надеюсь автор темы не проти... 27.10.2020, 13:23 cirus
Создавайте отдельную.
Нужен пилот версии 2.41, а... 27.10.2020, 13:29 PostByMik Всем спасибо за помощь!
В итоге, для меня лег... 27.10.2020, 17:47 PostByMik Может кто знает как заставить данный код нажимать ... 2.11.2020, 21:30 DarkMaster kleft (arr[1][1] + 10, arr... 2.11.2020, 21:54 cirus
kleft (arr[1][1] + math.floor... 3.11.2020, 1:37 DarkMaster тогда уж:
kleft (math.floor((arr[1... 3.11.2020, 2:21 PostByMik Ох! Спасибо огромное!
Еще хотел пару вопр... 3.11.2020, 9:09 cirus
Например какие?
Не можно, а нужно.
--lua
log ... 3.11.2020, 11:02 PostByMik Простите, но я не очень понял как именно это испол... 3.11.2020, 14:49 PostByMik Апд.
Как я понял, при помощи function можно созда... 3.11.2020, 20:07 PostByMik Апд.
Проверил, работает! ) 3.11.2020, 20:30 DarkMaster
Завтра утром ты не вспомнишь, что это за набор ма... 3.11.2020, 20:52 PostByMik
Да понятное дело, что твой код крутой, но я же до... 3.11.2020, 21:21 PostByMik
вот где почитать про все эти функции, ну кроме кл... 3.11.2020, 21:31 DarkMaster
это не функции. Это имена параметров функции. Ну ... 3.11.2020, 21:50 PostByMik
Да, написал выше, что не углядел сразу)
Спасибо... 3.11.2020, 21:59 PostByMik
Так и не смог понять как у Вас реализован функцио... 4.11.2020, 11:21 DarkMaster
Были еще до этого комбайна - работает. Тут правда... 4.11.2020, 17:52 DarkMaster
В конкретно этом случае - никак. Это просто заглу... 4.11.2020, 20:42 cirus
А что мешает проверить изменения в области №2? 4.11.2020, 20:55 DarkMaster
Необходимость произвести 2 клика прежде чем будет... 4.11.2020, 21:32 PostByMik
Действительно, есть)
Если отойти от вашего комба... 5.11.2020, 11:21 DarkMaster что-то вроде этого. внутри тела цикла клики соотве... 5.11.2020, 18:33 PostByMik
Пытаюсь понять всё описанное в Вашем комбайне.
В... 8.11.2020, 15:45 DarkMaster
В нормальном виде это каждый раз новая функция по... 8.11.2020, 20:02 PostByMik Ни где не смог найти информацию, казалось бы, кото... 9.11.2020, 15:38 Fors1k
что означают фигурные скобки после знака "=... 9.11.2020, 16:45 PostByMik Ох! Спасибо Огромное!
Теперь стало понятно... 9.11.2020, 17:07 PostByMik Всё в туже тему, про работу по таймеру.
Написал к... 9.11.2020, 18:27 DarkMaster
Так делать не стоит - малейший лаг и проскочит.
... 9.11.2020, 20:19 DarkMaster
Да простят меня за дотошность, но в рамках луа эт... 9.11.2020, 20:35 Cockney
Доступ к элементу в связном списке в среднем зани... 9.11.2020, 21:34 PostByMik А если у меня вместо
портянка на 100+ строк, то м... 9.11.2020, 22:20 PostByMik Суть в в следующем.
У меня есть (назовем их частям... 9.11.2020, 22:31 DarkMaster
Тыщ на 100 элементов создай список и сравни с мас... 9.11.2020, 22:48 Cockney
Тыщ на 100 элементов создай список и сравни с мас... 9.11.2020, 23:10 DarkMaster
Опечатался. O(1) конечно же, а не O(N).
Имхо это... 9.11.2020, 23:42 Cockney
Смотря, что делать. Может стать и существенным н... 10.11.2020, 14:48 PostByMik
Если не учитывать, что я написал, что нужно после... 10.11.2020, 13:13 PostByMik
Или раз в неделю ручками менять данные. Но хотело... 10.11.2020, 14:16 cirus
Os.date 10.11.2020, 14:27 DarkMaster
Вставка на си. Едва ли это так плохо. В том же си... 10.11.2020, 15:43 Cockney
Вставка на си. Едва ли это так плохо.
Точно ? ... 10.11.2020, 17:11 DarkMaster
Беспонятия =) Сообщил для информации.
Тут есть и... 10.11.2020, 17:16 Cockney
Тут есть и оборотная сторона. Пишем не на луа - д... 10.11.2020, 17:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|