Перейти к содержимому

Zer0Galaxy

Гуру
  • Публикации

    1 220
  • Зарегистрирован

  • Посещение

  • Победитель дней

    189

Сообщения, опубликованные пользователем Zer0Galaxy


  1. 23 часа назад, eu_tomat сказал:

    Подсказка: В этой теме мы говорили о том, что среда передачи уменьшает шанс на получение беспроводного сигнала. Но есть нюанс...

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


  2. 4 часа назад, hohserg сказал:

     

    Правильно ли я понимаю, что вызов stop вернет управление в точку после вызова run?

    Совершенно верно. Дело в том, что вся работа библиотеки выполняется внутри функции run, а stop просто прерывает это выполнение.

    • Нравится 1
    • Спасибо 1

  3. @Oleshe, приведи пример кода, который выполняется на роботе и ПК. Какие сетевые платы ты используешь? Я помню обнаруживал, что беспроводные платы первого уровня не работали даже на дистанции в 1 блок, хотя платы 2-го уровня на том же месте работали прекрасно. Объяснения этому я не нашел.


  4. 2 часа назад, eu_tomat сказал:

     

    3 часа назад, num_pi сказал:

    Писать без использования мета таблиц!

    А что не так с метатаблицами кроме неявного вызова функций?

    Тоже очень интересно. Может, я всю жизнь неправильно на ЛУА программирую?


  5. 1 час назад, Syabro сказал:
    В 13.12.2021 в 12:12, Zer0Galaxy сказал:

    Ищем в массиве ближайшую клетку со статусом "неизвестно". Если таких клеток нет - конец работы

    А чего так сложно? А как он доберется, если посреди комнаты препятствие?

    "Ищем в массиве" это поиск в памяти. Тут никуда добираться не надо. А вот что бы проложить к ней путь и потребуется А*, не спорю.

    1 час назад, Syabro сказал:

    правило левой руки

    Так мы просканируем только контуры комнаты. На сколько я понял задачу, необходимо изучить всю комнату.


  6. В таком случае предлагаю следующий алгоритм:

    1. Создаем массив 100х160, который будет хранить статусы блоков в нашей комнате.

    Статусы могут быть следующие:

       -2 (неинтересно) - такой статус имеет блок, о котором пока не известно, находится ли он в пределах комнаты

       -1 (неизвестно) - такой статус имеет еще неисследованный блок, но о котором известно, что он в комнате или является ее стенкой

      0 (пусто) - пустое пространство внутри комнаты

      >0 - исследованный блок внутри комнаты или ее стенка. Может принимать значение равное номеру слота робота, с которым выполнилось сравнение.

    2. Заполняем массив статусом "неинтересно". Считаем что робот находится в позиции X=80, Y=50 (центр нашего массива).

    3. Присваиваем этой клетке статус "пусто". Просматриваем четыре, граничащие с ней клетки. Если они находятся в пределах массива и имеют статус "неинтересно", присваиваем им статус "неизвестно".

    4. Ищем в массиве ближайшую клетку со статусом "неизвестно". Если таких клеток нет - конец работы

    5. Иначе, перемещаемся к ней и исследуем.

    6. Если она пустая, переходим к пункту 3

    7. Иначе, присваиваем клетке тип блока. Переходим к пункту 4

     

    Понятно, что под словами "просматриваем", "ищем", "перемещаемся" может скрываться довольно сложный код, но я, по крайней мере, начал дробить сложную задачу на задачи меньшего размера.

    • Нравится 2
    • Одобряю 1

  7. 6 минут назад, eu_tomat сказал:

    Имея ограниченный объём памяти, робот даже теоретически не сможет построить карту любой абстрактной комнаты.

    Предлагаю сделать предположение, что размеры комнаты не превышают 100х160. Если какой либо участок комнаты вылезет за эти рамки, робот его проигнорирует. Почему именно 100х160? Да просто такую комнату можно будет отрисовать полупикселями на мониторе 3-его уровня.


  8. @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)

    image.png.89b444b504a39a05ced50f1e58f5eeab.png

    Предложенный топикстартером вариант эффективнее и моего и floor()

    • Нравится 1
    • Спасибо 1

  9. 1) Другого способа сравнения двух таблиц, кроме как поэлементного, не существует. Ты не можешь использовать операторы ">" и "<" для таблиц. Можешь, правда, сравнивать на "равно-не равно", но сравнение всегда вернет falsh, если это разные таблицы, даже если они содержат одинаковые элементы. Другими словами, сравниваются не таблицы, а их адреса. Так что, смирись и брутфорси.

     

    • Нравится 1
    • Спасибо 1

  10. Это обсуждение было отпочковано от темы Майнинг 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

  11. Если дело только в надписи, то 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

  12. Ребят, вы внимательно читали первый пост? Топикстартер не ищет мануалы и не спрашивает как управлять реактором. Он ищет друга по интересам.

    Молодой крокодил хочет завести себе друзей. OFgRc, извини, не удержался.

    • Нравится 5

  13. @daniilFigaSystem, мне вот просто интересно, что ты понимаешь под "ос для винды"? Винда сама по себе это операционка и ни в каких других осях не нуждается. А под чем твоя ФигаОС будет работать на опенкомпах? Там винды нет. Ну, разве что MineOS.


  14. 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.


  15. 13 часа назад, eu_tomat сказал:

    В OpenNet, правда, использовались обычные компьютеры, а не серверы, поэтому система была более громоздкой.

    В последней в реализации OpenNet уже использовались сервера. Вот только мне помнится, что я вставлял по три связанных карты в сервер. Таким образом один кубик серверной стойки объединял до двенадцати связанных карт. Ах  да, я же использовал креативные сервера.

×
×
  • Создать...