kcalBxoF 15 Опубликовано: 5 января, 2019 Ничего сложного в этой программе нет, однако выкладываю код ради оценки его исполнения. https://pastebin.com/Mw88qQvr Последовательность запуска этой системы: Ставим N-ое кол-во узелстабов; Рядом с ними ставим таблички с номерами от 1 до N; Под ними ставим редстоун-контроллеры; Подключаем их все к компу; На комп ставим программу: pastebin get Mw88qQvr /home/bfnode.lua Запускаем программу с ключом -i для присвоения номеров адресам; После присвоения номеров программа продолжит свою работу в консольном режиме. Доступные команды: on off Аргументы к этим командам: Номер ноды all (т.е. запуск команды для всех нод) Пример: 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Vladimir 8 Опубликовано: 5 января, 2019 5 минут назад, kcalBxoF сказал: Ничего сложного в этой программе нет, однако выкладываю код ради оценки его исполнения. https://pastebin.com/Mw88qQvr Последовательность запуска этой системы: Ставим N-ое кол-во узелстабов; Рядом с ними ставим таблички с номерами от 1 до N; Под ними ставим редстоун-контроллеры; Подключаем их все к компу; На комп ставим программу: pastebin get Mw88qQvr /home/bfnode.lua Запускаем программу с ключом -i для присвоения номеров адресам; После присвоения номеров программа продолжит свою работу в консольном режиме. Доступные команды: on off Аргументы к этим командам: Номер ноды all (т.е. запуск команды для всех нод) Пример: Не понимаю смысла это выкладывать.Я просто для интереса хотел сделать управление стабилизаторами с помощью компьютеров.Зачем это выкладывать?Практической пользы тут нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kcalBxoF Автор темы 15 Опубликовано: 5 января, 2019 3 часа назад, vladimir сказал: Не понимаю смысла это выкладывать.Я просто для интереса хотел сделать управление стабилизаторами с помощью компьютеров.Зачем это выкладывать?Практической пользы тут нет. Во первых, код мой, делаю что хочу. Во вторых, 3 часа назад, kcalBxoF сказал: Ничего сложного в этой программе нет, однако выкладываю код ради оценки его исполнения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Vladimir 8 Опубликовано: 5 января, 2019 (изменено) 9 часов назад, kcalBxoF сказал: Во первых, код мой, делаю что хочу. Во вторых, Ну если так,то идея и принцип работы чьи?Так еще и инструкцию сделал,как у меня все стояло.Я свою программу написал (но у нее функционал был хуже),а ты захотел переписать. Изменено 5 января, 2019 пользователем vladimir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
whiskas 144 Опубликовано: 5 января, 2019 Что вы тут показываете? 80 строк кода что не дают никакой ценности ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Vladimir 8 Опубликовано: 5 января, 2019 (изменено) 15 минут назад, whiskas сказал: Что вы тут показываете? 80 строк кода что не дают никакой ценности ? Я ему и говорил,что просто хотел программу для интереса сделать,пользы и смысла от нее нет.Но он решил переписать мою программу и сюда выкладывать.В магии ничего не понимает,а программу делает (ну по сути там и к магии отношения нет,просто включает и выключает сигнал редстоуна по команде). Изменено 5 января, 2019 пользователем vladimir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 9 января, 2019 @kcalBxoF, @vladimir: прошу вас обоих не тащить ваши разногласия из игрового чата в тему о программировании. Посты я скрыл, но при рецидиве обещаю репрессии. Теперь о самом споре, в котором всем и так уже всё давно понятно, и развитие этого аспекта спора ничего нового не несёт: Идея не несёт в себе новизны. То, что эту идею подсмотрел один у другого, является случайностью. Подобное где угодно можно подсмотреть. Обычная механика Майнкрафта. Идея перебирать список одинаковых механизмов и просить пользователя ввести номер среагировавшего механизма не нова. Я бы вообще избавился в этой цепочке от пользователя и задействовал бы робота. Но и эта идея не нова. Это просто логичная идея, до которой додумается любой инженер. Другое дело, что для данного форума эта идея может оказаться свежей. Я соглашаюсь с тем, что правила хорошего тона обязывают сообщить, у кого идея была подсмотрена. С другой стороны, правила хорошего тона позволяют заявить и о своём участии в авторстве, но всё же не рекомендуют кричать об "украденной идее" при каждом удобном случае. Все читатели и так уже разобрались в ситуации. И тем более, не стоит переносить этот разговор в игровой чат, а из него обратно в эту тему. Из этого складывается негативное отношение к обоим участникам спора. Тем более, когда суть спора не стоит даже ломаного гроша. Эта тема, как видно в шапке, создана с целью обсудить качество кода. Вот, давайте этим и займёмся, если есть что сказать. Можно обсудить и саму схему. Я даже могу дать подсказки для её улучшения. Во-первых, привязку адресов адаптеров к их расположению можно выполнить автоматически. Во-вторых, состояние узлов ауры доступно для считывания. Тут можно было бы построить интересную схему. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 10 января, 2019 Так как заявленной автором целью является оценка его кода, то этим и займусь. В целом код выглядит достойно, но я всё же попробую придраться. В коде for a, _ in pairs(cl) do использовать фиктивную переменную _ не обязательно. Код for a in pairs(cl) do тоже является рабочим. local f, str = fs.open(cfg, "w") if(f==nil)then В этом фрагменте кода считаю лишними скобки в условии. Вреда от них нет, но и пользы они тоже не несут. К слову, я по привычке тоже иногда ставлю скобки в условиях, а иногда и точки с запятой. Но оценивать, так оценивать. Кроме того в данном случае условие можно упростить до if not f then. Оно эквивалентно f==nil or f==false, но записывается короче. А учитывая, что условие f==false на этом участке кода всегда ложно, то в данном конкретном случае условие эквиваленто и f==nil. Аналогично условие if not (at==nil) then упрощается до if at then Для считывания всего содержимого файла логичнее применять f:read("*all"), а не f:read(math.huge) 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kcalBxoF Автор темы 15 Опубликовано: 10 января, 2019 17 часов назад, eu_tomat сказал: Для считывания всего содержимого файла логичнее применять f:read("*all"), а не f:read(math.huge) С остальным все понятно, а этот пункт заставил задуматься. Для файловых потоков есть какие-то маски для чтения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 11 января, 2019 45 минут назад, kcalBxoF сказал: Для файловых потоков есть какие-то маски для чтения? http://www.lua.org/pil/21.1.html Цитата "*all" reads the whole file "*line" reads the next line "*number" reads a number num reads a string with up to num characters 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 1 704 Опубликовано: 11 января, 2019 @kcalBxoF еще бы скрины как именно все располагать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 11 января, 2019 (изменено) 13 часов назад, kcalBxoF сказал: С остальным все понятно, а этот пункт заставил задуматься. Для файловых потоков есть какие-то маски для чтения? Продолжить позволю себе. Луа принимает спокойно сокращённые версии масок: `"*a"`, например. Окроме этого есть ещё и фича Lua 5.3: звёздочку можно не писать. В 5.2 работать не будет, разумеется. Помимо этого, слишком часто ты юзаешь `component.proxy`. Каждый вызов создаётся совершенно новая таблица, хоть и пустая. Не особо оптимальное использование. Для прямого вызова по адресу лучше использовать `component.invoke(address, methodName, arguments...)`. Наконец, советую чаще использовать пустые строки. Они очень полезны, как ни странно. Я, например, отделяю каждый блок пустой строкой, кроме тех, которые в начале или в конце, — читать такое гораздо проще. По той же причине, кстати, и на форуме стараюсь абзацы короткими делать и отделять их \n\n. Примеры кода: local function recurse(g) return (function(f) return g(function(x) return f(f)(x) end) end)(function(f) return g(function(x) return f(f)(x) end) end) end print(recurse(function(rec) return function(n) if n == 0 then return 1 else return n * rec(n - 1) end end end)(10)) --> 3628800 while true do t.write("> ", true) local tcom = t.read() if not tcom then os.exit() end local com, arg = tcom:match("(%w+)%s(%w+)") if arg == "all" then turn(0, coms[com], at) else turn(at[tonumber(arg)], coms[com]) end end Изменено 11 января, 2019 пользователем Fingercomp и ещё немного стилистилизицирования 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах