eu_tomat
Модераторы-
Публикации
2 666 -
Зарегистрирован
-
Посещение
-
Победитель дней
331
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя eu_tomat
-
Прошу обосновать это утверждение.
-
Этот камень очень даже надводный. Во всех известных мне языках программирования операция and имеет приоритет над or. Соответственно, (true and b)==b, а учитывая твои условия, (true and b or c)==c.
-
Не буду цитировать запрещенный на этом сайте рекламный ролик, все и так его помнят. Asummonster, сёстры не спешат комментировать мой пост, а конкретно эта установила для меня очень высокую планку, написав в разделе "обо мне": - А я Томат.
-
Понимаю твою боль, мой Крутой брат. Но много ли сестер пишут код у нас на проекте? Сестры, откликнитесь! Если вам интересны мои посты, плюсуйте комментарий Крутого брата, оставляйте свои комментарии, и тогда я буду писать и для вас тоже. Простите меня, если вас не заметил. Будьте счастливы все на IT-сервере.
-
Сизифов код Расскажу тебе поучительную историю, брат. Присаживайся поудобнее, да тушеными мухоморами угощайся. История, значит, такая: Был у нас на проекте игрок. Назовем его Сизифом. И лежало на нем проклятие: что ни напишет — говнокод получается. Бывало, всего две строчки напишет — и даже там говнокод выходит. И вот, старается Сизиф, шлифует свою программу. И казалось бы, совсем чуть-чуть остается. Но добавляет строчку — и опять говнокод получается. Что он только ни делал: брал примеры из статей, воровал дискеты из компьютеров других игроков, и даже как-то скачал себе рекурсивную копалку Totoro. Но стоило ему внести в этот код небольшую правку, всё в скатывалось в говнокод. И прекрасный робот-шахтер превращался в тыкву не дожидаясь полуночи. И вот однажды робот Сизифа не выдержал издевательств и сделал жалобный «бип» почти человеческим голосом. Глянул Сизиф на экран, а робот пишет ему: — Обожди писать код. Включи голову, будь программистом. Призадумался тогда Сизиф над правками кода, стал размышлять над тем, что делают разные команды и как они сочетаются между собой, и вот, не прошло и недели, как написал он свой вариант копалки. И как знать, мог бы он написать копалку даже круче Totoro и выкопать все алмазы на сервере, но неожиданно вайп случился. Удалил тогда Сизиф свой старый аккаунт, зарегистрировался под новым ником и, поговаривают, даже в вайт-лист попал, и скоро мы сможем увидеть его прекрасные программы. Хотя казалось бы, говнокодером раньше был. Историю эту я узнал из перехваченного секретного сообщения в закрытой части OpenNet, расшифровал худо-бедно, да тебе поведал. Настоящий ник игрока сообщать не буду, и так уже много лишнего рассказал. Ты же знаешь — администрация наша кровава. Но этой историей я не мог не поделиться с тобой. Радуйся, брат! Ибо в твоей голове сокрыта великая сила.
-
Ну, точно же! Робот с булыжником в инвентаре и геосканер. Будем хранить инфу в толще породы. Можно и без геосканера обойтись. Только скорость чтения сильно упадет.
-
Автоматическое определение направления робота с геосканером
eu_tomat прокомментировал eu_tomat запись в блоге в eutomatic blog
AlexCC, я тут подумал, что без сильной доработки мода вполне реальны были бы продвинутые апгрейды на инвентарь по типу IronChest. Не знаю, захочет ли Сангар вводить дополнительные слоты. Как я понял, он специально вынуждает нас к использованию узкоспециализированных машин. -
Нормальный подход, в генетических алгоритмах именно так и делается. Какой-нибудь из новых вариантов окажется лучше предыдущих. А если не окажется, всегда можно попробовать еще раз. Будь я роботом, именно так бы и писал, только релизил бы почаще.
-
Благословение или проклятие? Свинец против булыжника.
eu_tomat добавил запись в блоге в eutomatic blog
Благословение или проклятие? Свинец против булыжника. Вот тебе еще одно решение еще одной проблемы, брат. Известно, что геосканер не различает по плотности свинец и булыжник. artem221 говорит, что и доски имеют ту же плотность. Поверю ему на слово, он на этом зомбяку съел. Но часто ли встречаются доски под землей? Заброшенные шахты не так часты. Но даже они не будут большой проблемой, поверь мне, брат. Булыжник же чаще всего встречается в шахтах игроков. artem221 говорит, что свинец весьма ценен. Я не знаю, насколько ценен свинец для тебя, брат, и сколько стоит время твоего робота, это ты сам знаешь. Но если тебе реально нужен свинец, и при этом ты не хочешь тратить время своего робота на доски и коблу, предлагаю решение: В чистом мире сплошной добычей проверь частоту появления свинца, коблы и досок. Копай целыми чанками и строй статистику. Да не забудь дать роботу инструмент с шелковым касанием, чтоб коблосчетчик его не порвался. Так ты узнаешь, в каких пределах лежит частота появления свинца, коблы и досок в чанках. Также ты узнаешь эти пределы для аномальных по статистике чанков. Наверняка в них находятся заброшенные шахты. Видя статистику, ты, возможно, решишь, что доски столь редки, а свинец столь ценен, что стоит пройтись даже по доскам. А ежели время твоего робота стоит дороже, а твой ум проницательнее, ты можешь попробовать проанализировать найденные структуры. Ведь доски в заброшенных шахтах не в кучу свалены, у них есть известный порядок. Если ты смог вычленить доски из списка руд или же решил пренебречь ими, подумай, что делать с коблой. Много ли булыжника ты видел в первозданном мире? Наверняка этот чистый и данный нам Богом мир был подпорчен простыми игроками. И наверняка они проредили те руды, на которые претендовал твой робот. Сравни статистику по рудам со статистикой этого чанка. Возможно, более разумным будет переход в другой чанк, где и руд побольше и булыжника поменьше. А ежели руд много при большом количестве коблы, то это аномальная зона, советую присмотреться к ней. Так ты обменяешь ценное время своего робота на собственное бесценное понимание мира майнкрафта. Будь счастлив и проницателен, брат! -
Автоматическое определение направления робота с геосканером
eu_tomat прокомментировал eu_tomat запись в блоге в eutomatic blog
AlexCC, кстати, да. Нужны иридиевые компоненты. А то я как дурак, до сих пор не могу иридию применение найти. -
Автоматическое определение направления робота с геосканером
eu_tomat добавил запись в блоге в eutomatic blog
Автоматическое определение направления робота с геосканером Прознал я, что мои браться по IT-серверу страдают от того, что вынуждены каждый раз устанавливать робота с геосканером исключительно мордой на восток. Иначе, дескать, он, неразумный, не понимает, в каком направлении находятся прозондированные руды. Использовать же карту для навигации они не хотят, не смотря на уговоры Алекса. И я с ними согласен: ну ее к чОрту! Только слот занимает, а диапазон действия ограниченный. Но направление взгляда она должна указывать даже вне зоны действия карты. Но слот занимает... Что же делать... Нахрена попу баян, если есть колокола? Используй геосканер, брат. Зондируй 4 прилегающих к роботу столба: северный, западный, восточный и южный. Теперь проверяй блок перед мордой неразумного робота, не мне тебя учить, как это делается. И если впереди стоит блок, руби его и еще раз зондируй столбы. А ежели впереди блок отсутствует, то выруби его снизу и поставь вперед. Ведь ты же не на воздух поставил своего робота. И опять сканируй столбы. Что делать дальше, ты уже догадался: находишь различия в сканах блоков на уровне робота, и определяешь его ориентацию. И ежели его ориентация не вписывается в православный канон, ты данной тебе властью программиста и известной всем нам молитвой меняешь ориентацию робота на православную, лицом к восходящему светилу. Радуйся, брат! Ибо есть счастье на IT-сервере. -
Артем, при задействовании всех четвертей площади я не подразумевал увеличения этой площади. Считай, что при той же площади робот установлен не в углу, а центре. Периодический же возврат робота к сундуку является дополнительным аргументом для размещения робота в центре обрабатываемого участка. Почитал про муравьиный алгоритм. Направление перспективное, но объем вычислений и требования к памяти возрастут квадратично. Для обсчета больших областей тупо не хватит памяти, но их можно и подробить. Насколько это оправдано, надо проверять практически. Статистику полезных руд, выкопанного мусора и пробега было бы крайне интересно увидеть. Про сканирование всех слоев я сказал в общем. И если ты подобрал интервал с удовлетворяющим тебя уровнем помех, то нет смысла сканировать чаще. Главное, что ты уверен в каждом просканированном блоке.
-
Doob, вылезай из танка. Человек хочет пройти все блоки руды оптимальным путем. Тупая копалка его не устраивает. А то, что ты сейчас описал, он уже реализовал. Чем тебе коммивояжер-то не угодил?
-
artem211, я долго не отвечал, т.к. при внимательном рассмотрении задача оказалась значительно сложнее, чем вчера, когда ты меня спросил о ней. Я понял, что эффективность является главным для тебя ориентиром. И тут надо задаться по крайней мере двумя вопросами, что лучше: 1) Тупая копалка, роющая пласт через два за полчаса, или же гипотетеческий алгоритм, выкапывающий все руды за 5 минут, но перед этим три часа вычисляющий оптимальный маршрут. 2) Прямо сейчас пользоваться уже существующим относительно простым и довольно эффективным алгоритмом, либо 10 лет искать идеальный алгоритм, ничего не копая и не разрабатывая других более-менее эффективных алгоритмов. Последний путь, кстати, не так плох, и при удачном стечении обстоятельств может привести к награждению какой-нибудь математической премией. Цитата: А если подумать, то задача коммивояжёра. Интересны две цитаты: Задача коммивояжёра относится к числу трансвычислительных: уже при относительно небольшом числе городов (66 и более) она не может быть решена методом перебора вариантов никакими теоретически мыслимыми компьютерами за время, меньшее нескольких миллиардов лет. Многие современные распространенные методы дискретной оптимизации, такие как метод отсечений, ветвей и границ и различные варианты эвристических алгоритмов, были разработаны на примере задачи коммивояжера. Не вкурил, как в нашей задаче применить метод отсечений, но метод ветвей и границ в нашем случае как раз и будет разбиением на жилы или другие области. Я бы не стал зацикливаться на жилах, а искал бы рудные скопления, хотя формализовать поиск непрерывной жилы гораздо проще, для начала можно и так. Перебрать все варианты для 100 точек очень затратно, но перебрать сначала все варианты для 10 скоплений, а потом все варианты для 10 точек в каждом из скоплений значительно быстрее. Теперь комментарии по имеющемуся алгоритму. В качестве расстояния, надеюсь, используешь не физическое расстояние, а прямоугольную метрику. Ее можно дополнительно улучшить, добавив затраты на поворот. Действительно, хорошей мыслью является рубка руды вперед, вверх и вниз, не обязательно перемещаясь в блок с рудой. Но алгоритм и без того сложный. На начальном этапе я бы не стал заморачиваться на выковыривании руды из бедрока. Отрезать по границе отрицательной плотности – хорошая мысль. Если очень надо, я бы вычищал бедрок отдельным алгоритмом. Добавил бы точки входа в определенные зоны бедрока в основном алгоритме, через эту же точку осуществлялся бы выход из бедрока, чтобы не усложнять. А по лабиринту бедрока проходим вспомогательным алгоритмом, учитывающим непроходимые блоки. Кстати, непроходимым может оказаться спонтанный коблоген. Тут тоже есть, над чем подумать. Сыпучка проходится легко. Можно сделать, как у Totoro, но я бы добавил задержку, чтобы робот не лупил еще не упавший гравий, а немного подождал, чтобы не создавать лишнюю нагрузку в цикле. В игровом чате мы обсуждали, стоит ли двигаться и сканировать только зону вперед и вправо. Тогда я сказал, что алгоритм обхода играет бОльшую роль. Сейчас думаю, что при существующем алгоритме лучше сканировать и обходить по всем сторонам света. При сплошной добыче это почти не играет роли, но в твоем алгоритме лучше двигаться от центра и возвращаться в центр. Предварительное построение цепочек руд – хорошая идея, которая может значительно сократить вычислительную сложность задачи. Теперь немного о моем алгоритме, который придумался сразу после твоего вопроса. Я еще раз порисовал и понял, что мой алгоритм, скорее всего, совсем не лучше твоего. Ты выбираешь следующую точку, добавляемую в конец массива, а я точку не выбираю, а просто беру следующую по порядку и выбираю, в какое место уже имеющегося массива ее вставить, это более затратная процедура. Выгоды же от этого, скорее всего, нет. Какие мысли возникают: Если руды мало, то можно воспользоваться полным перебором всех возможных маршрутов. До какого числа точек это оправдано, можно проверить экспериментально. Если точек слишком много, я бы искал скопления руд. Если скоплений руд мало, расстояния между ними большие, в первую очередь оптимизировал бы перемещения между скоплениями. Если скопления руд плотные и крупные, то внутри скоплений можно вообще использовать тупую копку ряд через два. Если нет, то разделяем их на скопления средних размеров. Средние скопления я бы разбил на малые суб-скопления. Оптимальный путь внутри малых скоплений можно находить полным перебором. Можно попробовать выполнять не полный перебор всех возможных точек, а только достаточно близких. Можно даже самых близких равноудаленных. Пока не знаю, насколько сильным будет отклонение маршрута от идеального, это надо проверять практически. Но могу сказать определенно: выбор в качестве следующей точки самой близкой из имеющихся не всегда даст оптимальный маршрут. Как разделять весь массив руд на скопления, пока не знаю. Я бы для начала взял результат сканирования по нескольким чанкам, нашел бы расстояния от каждой точки до каждой и построил бы гистограмму всех расстояний. Возможно, я бы там ничего не увидел, но попытаться стоит. Еще можно позаимствовать подход, аналогичный вычислению фрактальной размерности: внутри исследуемой области находим все возможные кубы со сторонами [1..n] и вычисляем среднюю плотность во всех кубах, содержащих хоть какие-то руды и опять же строим гистограмму, соотнося с расчетной средней плотностью. Так мы хотя бы получим представление о размерах скоплений, их количестве и плотности. Еще можно выбирать для сканирования и добычи площадь достаточно малую, чтобы выполнить полный перебор маршрутов. То есть, мы разбиваем задачу на более мелкие, конечно же, несколько теряя в эффективности полученного суммарного маршрута. В дополнение к предыдущему пункту можно добавить разбивку по высоте. Например, роем вертикальную шахту, выполняя сканирование каждого уровня. А потом поднимаемся вверх, заодно выкапывая всю отсканированную руду. Например, находясь на глубине 64 блоков, мы ищем оптимальный путь выработки 12 уровней, но достигнув 8-ого, производим пересчет верхних 12-и и снова проходим 8 уровней. Выводы: задача имеет огромную вычислительную сложность. Единственным способом решить ее за разумное время будет разбитие на независимые участки. В простейшем случае по площади и по уровням. В более сложном -- по жилам и иным скоплениями руд.
-
artem211, опиши здесь свой текущий алгоритм. Нет сил чат вычитывать. Я позже отвечу. А пока скажу кратко. Твой алгоритм хорош сочетанием простоты и эффективности, если я его правильно понял. Мой может быть эффективнее, а может и не быть, зависит от порядка подачи данных на вход и требует доработки. Но в любом случае, он более ресурсоемок.
-
Как обрести счастье на IT-сервере “Не собирайте себе сокровищ на земле, где моль и ржа истребляют и где воры подкапывают и крадут, но собирайте себе сокровища на небе, где ни моль, ни ржа не истребляют и где воры не подкапываются и не крадут” (Матф.6:19-20). Часть первая. То измена, то засада. В последние два месяца я редко захожу в игру, в основном для проверки и поддержания привата. Даже форум редко просматриваю. Зайдя же в очередной раз на сервер после двухнедельного отсутствия в игре, я обнаружил себя на новом спавне, почти голым, в майке и трениках, без бура, джетпака и наношапочки. И самое печальное, без дома: /home не работал, и мой дом на карте тоже не просматривался. Да что об этом говорить – сама карта была совершенно новой. И я приуныл. И вот, стою я один, как Робинзон на острове, с комплектом железной брони и инструментов в инвентаре, но прямо сейчас я боюсь потерять даже их. Вокруг непроглядная ночь, наполненная голосами местной нечисти. А если очень сильно не повезет, можно даже погибнуть от лазера злодея на спавне. Стоящий на спавне сундочок Края кажется единственной надеждой спасти подаренное богами имущество. Но нет же, сундук не открывается, лишь выдается сообщение "У вас нет разрешение игрока прав администратора на использование предметов". Благо, форум подсказал мне про /enderchest. Я быстренько сложил свой примитивный скарб в виртуальный сундук, и стал неспешно оглядываться на спавне и ждать окончания ночи. И вот тут меня ждала вторая неожиданность – ночь не кончалась, время тянулось медленно, и это не фигура речи, это новая фишка сервера, как выяснилось. И я опять приуныл. Часть вторая. Спасение. Реально помогают лишь две вещи: голоса в ТОПах и программирование, как и заповедовал нам AlexCC, в этом он преуспел. Теоретически могли бы помочь друзья, но я не очень общительный человек, и в тот момент на сервере никого из игроков не было, да и друзья до сих пор сами буквально умирают от голода. На сервере находился только AlexCC, но я не стал тревожить его своим плачем. Даже Яхве не помогал евреям, пока те не вставали на путь исправления. За голоса я приобрел себе ПНВ, чтоб лучше видеть, наноботы, чтобы мягче падать, и несколько джетпаков, чтобы летать и не сильно заботиться об их зарядке, после чего, отбиваясь от зомбей и скелетов, стремительно закопался в гору недалеко от спавна и заприватил участок. Это сберегло мне время и душевное равновесие на старте игры. Потом я все же отклонился от праведной жизни, несколько раз сходив с киркой, а потом и буром в майн за рудами, построил батбокс для зарядки джетпака, а также всяческие дробилки-плавилки-сжималки-выжималки, скрафтил бур, пилу, и даже смог собрать свой первый компьютер, закупив для него лишь глину и кактусы. Сейчас же думаю, что на этом этапе я ошибался. Я не пробовал посчитать, но думаю, что стартовых денег достаточно для покупки ресурсов, необходимых для постройки первого хотя бы простого (или даже сложного) робота, способного к добыче ресурсов. Запрограммировать и отладить его можно в креативе, а можно просто взять одну из замечательных программ с форума computercraft.ru. А дальше лишь остается стоять рядом и, свернув окно майнкрафта, читать умные книжки, статьи и думать над следующими программами. И дом теперь тоже не хочется строить руками. Строительство должно быть автоматизировано. Всё. Всё в мире майнкрафта должно быть полностью и хорошенько томатизировано. Только в этом можно обрести счастье на IT-сервере. Смерти нет. Вайп не конец всему, если только всем для тебя не являлись сундуки, набитые рудой и выстроенный руками дворец. Твои программы и твои знания останутся с тобой и после вайпа, а робота даст администрация, насколько бы кровавой она ни была. Всё остальное должно прийти автоматически. В той горе, где я поселился, мне довелось узнать много всего интересного. Однажды, когда я жарил булыжник в электрической печке, не смотря на тщательно замурованные проходы, зашел ко мне человек в сияющем плаще. Ник его я не запомнил, хотя говорили мы с ним всю долгую ночь. Нет смысла пересказывать весь разговор, но запомнились некоторые его изречения: Блаженны нищие печками, ибо их есть царство IT. Блаженны ошибающиеся, ибо научатся. Блаженны спрашивающие, ибо они наследуют опыт IT. Блаженны алчущие и жаждущие знаний, ибо получат их. Блаженны помогающие, ибо они помощь получат. Блаженны думающие, ибо они программирование осилят. Блаженны программирующие, ибо они будут наречены сынами IT. Блаженны бегущие с серверов без OpenComputers, ибо их есть сервер IT. Блаженны вы, когда будут поносить вас и гнать и всячески неправедно злословить фанаты других серверов. Радуйтесь и веселитесь, ибо велика ваша награда на IT-сервере: так гнали и программистов, бывших прежде вас.
-
Прости и ты тоже, но это глупая машина. ГЛУПАЯ. И это излечимо.
-
В игровом чате попытался ответить ссылкой на форум. Автомат выдал предупреждение. Надо бы ему мозги вправить за такую дерзость.
-
То, что доктор прописал. Спасибо.
-
Да, это уже лучше. Но хотелось бы оставить только тот вывод, что я хочу.
-
Есть код для ComputerCraft: function getPeripheral( p_type, p_side ) if( peripheral.isPresent(p_side) )then if( peripheral.getType(p_side)==p_type )then return peripheral.wrap(p_side) end end print( "Error: "..p_type.." not found at "..p_side.." side" ) exit() end Смысл функции состоит в том, что она проверяет наличие нужной периферии с определенной стороны и в случае успеха возвращает соответствующий объект. В противном же случае функция должна сообщить об ошибке и завершить работу программы. Вопрос - как завершить работу программы правильно. return не подходит, т.к. происходит выход лишь из функции. os.shutdown полностью выключает компьютер, убирая сообщение об ошибке. Другие известные мне варианты вроде приведенного в коде выдают дополнительную ошибку "attempt to call nil".
