Zer0Galaxy
-
Публикации
1 220 -
Зарегистрирован
-
Посещение
-
Победитель дней
189
Сообщения, опубликованные пользователем Zer0Galaxy
-
-
4 часа назад, hohserg сказал:Правильно ли я понимаю, что вызов stop вернет управление в точку после вызова run?
Совершенно верно. Дело в том, что вся работа библиотеки выполняется внутри функции run, а stop просто прерывает это выполнение.
-
1
-
1
-
-
@Oleshe, приведи пример кода, который выполняется на роботе и ПК. Какие сетевые платы ты используешь? Я помню обнаруживал, что беспроводные платы первого уровня не работали даже на дистанции в 1 блок, хотя платы 2-го уровня на том же месте работали прекрасно. Объяснения этому я не нашел.
-
-
2 часа назад, eu_tomat сказал:3 часа назад, num_pi сказал:Писать без использования мета таблиц!
А что не так с метатаблицами кроме неявного вызова функций?
Тоже очень интересно. Может, я всю жизнь неправильно на ЛУА программирую?
-
1 час назад, Syabro сказал:В 13.12.2021 в 12:12, Zer0Galaxy сказал:Ищем в массиве ближайшую клетку со статусом "неизвестно". Если таких клеток нет - конец работы
А чего так сложно? А как он доберется, если посреди комнаты препятствие?
"Ищем в массиве" это поиск в памяти. Тут никуда добираться не надо. А вот что бы проложить к ней путь и потребуется А*, не спорю.
1 час назад, Syabro сказал:правило левой руки
Так мы просканируем только контуры комнаты. На сколько я понял задачу, необходимо изучить всю комнату.
-
В таком случае предлагаю следующий алгоритм:
1. Создаем массив 100х160, который будет хранить статусы блоков в нашей комнате.
Статусы могут быть следующие:
-2 (неинтересно) - такой статус имеет блок, о котором пока не известно, находится ли он в пределах комнаты
-1 (неизвестно) - такой статус имеет еще неисследованный блок, но о котором известно, что он в комнате или является ее стенкой
0 (пусто) - пустое пространство внутри комнаты
>0 - исследованный блок внутри комнаты или ее стенка. Может принимать значение равное номеру слота робота, с которым выполнилось сравнение.
2. Заполняем массив статусом "неинтересно". Считаем что робот находится в позиции X=80, Y=50 (центр нашего массива).
3. Присваиваем этой клетке статус "пусто". Просматриваем четыре, граничащие с ней клетки. Если они находятся в пределах массива и имеют статус "неинтересно", присваиваем им статус "неизвестно".
4. Ищем в массиве ближайшую клетку со статусом "неизвестно". Если таких клеток нет - конец работы
5. Иначе, перемещаемся к ней и исследуем.
6. Если она пустая, переходим к пункту 3
7. Иначе, присваиваем клетке тип блока. Переходим к пункту 4
Понятно, что под словами "просматриваем", "ищем", "перемещаемся" может скрываться довольно сложный код, но я, по крайней мере, начал дробить сложную задачу на задачи меньшего размера.
-
2
-
1
-
-
6 минут назад, eu_tomat сказал:Имея ограниченный объём памяти, робот даже теоретически не сможет построить карту любой абстрактной комнаты.
Предлагаю сделать предположение, что размеры комнаты не превышают 100х160. Если какой либо участок комнаты вылезет за эти рамки, робот его проигнорирует. Почему именно 100х160? Да просто такую комнату можно будет отрисовать полупикселями на мониторе 3-его уровня.
-
Почему вообще возникла такая задача? Имеется практическая цель или академический интерес?
Должен ли робот сканировать блоки, находящиеся над/под ним или только в плоскости перемещения?
-
Тут про ComputerCraft уже никто не помнит. Давай на OpenComputers переходи.
-
Вот здесь Томат подробно описал последовательность действий. Повторять их не вижу смысла. Если какое либо действие вызывает вопросы, говори какое.
-
@Fingercomp Опыт подтверждает твои выводы:
local uptime=require("computer").uptime local function round1(num) return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51) end local huge = 2 ^ 52 + 2 ^ 51 local function round2(num) return num + huge - huge end n = 1000000 start=uptime() for i=1,n do round1(1.234) end print("Constant ",uptime()-start) start=uptime() for i=1,n do round2(1.234) end print("Upvalue ",uptime()-start) start=uptime() for i=1,n do math.floor(1.234+0.5) end print("math.floor ",uptime()-start)
Предложенный топикстартером вариант эффективнее и моего и floor()
-
1
-
1
-
-
1) Другого способа сравнения двух таблиц, кроме как поэлементного, не существует. Ты не можешь использовать операторы ">" и "<" для таблиц. Можешь, правда, сравнивать на "равно-не равно", но сравнение всегда вернет falsh, если это разные таблицы, даже если они содержат одинаковые элементы. Другими словами, сравниваются не таблицы, а их адреса. Так что, смирись и брутфорси.
-
1
-
1
-
-
Это обсуждение было отпочковано от темы Майнинг OpenComputer.
local function round(num) return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51) endВот мне просто интересно, каждый раз при вызове функции двойка будет четыре раза возводиться в степень? Не будет ли эффективнее сделать так?
local huge = 2 ^ 52 + 2 ^ 51 local function round(num) return num + huge - huge endДа и подход к округлению странный. Чем не устраивает math.floor(num+0.5) ?
Зачем для получения timeDifference нужно реальное время? Измерять временнЫе интервалы в OpenOS можно не пропиливая жесткий диск.
И самый главный вопрос: откуда будут сыпаться биткойны и много ли уже насыпалось?
-
2
-
1
-
-
Добавил в свое прежнее сообщение про таймер. Так же рекомендую ознакомиться с какой либо из GUI-библиотек на форуме.
-
1
-
1
-
-
Если дело только в надписи, то sleep() нужно делать после обновления надписи:
if tButtons.text == "start" then tButtons.text = "stop" refresh(i) os.sleep(120) rs.setOutput(1,15) goto continue endЕсли же нужно делать еще что либо в течении этих 120-ти секунд, используйте event.timer
-
1
-
1
-
-
А разве диск tmp, устанавливаемый по умолчанию, не то, о чем говорит топикстартер?
-
Ребят, вы внимательно читали первый пост? Топикстартер не ищет мануалы и не спрашивает как управлять реактором. Он ищет друга по интересам.
Молодой крокодил хочет завести себе друзей. OFgRc, извини, не удержался.
-
5
-
-
А портативный терминал не пробовал?
-
@daniilFigaSystem, мне вот просто интересно, что ты понимаешь под "ос для винды"? Винда сама по себе это операционка и ни в каких других осях не нуждается. А под чем твоя ФигаОС будет работать на опенкомпах? Там винды нет. Ну, разве что MineOS.
-
-
9 часов назад, hohserg сказал:Значит, надо портануть ее на eeprom
Ну, это придется собирать RAID из EEPROM
-
1
-
1
-
-
3 часа назад, MrAbad сказал:Менять переменные местами, без буфера (Lua 5.3+)
local a = 174 local b = 3 a = a ~ b b = a ~ b a = a ~ b print(a) --> 3 print(b) --> 174
А как на счет такого варианта?
a,b = b,aНа сколько это более/менее производительней чем пример с XORом? Во всяком случае это на много понятней и занимает меньше букв, что существенно, если программа лежит в EEPROM.
-
13 часа назад, eu_tomat сказал:В OpenNet, правда, использовались обычные компьютеры, а не серверы, поэтому система была более громоздкой.
В последней в реализации OpenNet уже использовались сервера. Вот только мне помнится, что я вставлял по три связанных карты в сервер. Таким образом один кубик серверной стойки объединял до двенадцати связанных карт. Ах да, я же использовал креативные сервера.
-
Крутая идея. Видосик бы не помешал.
-
1
-

Дальность беспроводного вещания в OpenComputers
в Программирование
Опубликовано:
Правильно ли я понимаю, что существуют блоки, повышающие этот шанс, а значит обеспечивающие дальность связи свыше допустимых 400 блоков?