Light-bot

Тема в разделе "WASM.HEAP", создана пользователем skomarov, 25 сен 2008.

  1. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    К программированию эта задача не имеет никакого отношения. Программирование занимается написанием алгоритмов, а там тупо вбиваются данные. Чтобы там можно было составить алгоритм, как минимум нужен предикат и условный переход.
     
  3. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    GoldFinch
    там логика в основном
    + способность сокращать программы
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Вот как раз логики (булевой) там нету. Сокращения программ тоже, т.к. то что там набирается - не программа. Там проблема в том, как меньше ходов сделать - т.е. как данные (а не код) покомпактней записать.
    Вот например jmptable vs jxx/jxx/... - это задача сокращения программ.
     
  5. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    GoldFinch

    Команды роботу можно назвать данными. Интерпретатор в зависимости от того, что за данные находятся в ячейке, заставляет робота перемещаться или поворачиваться. Поэтому для понятности лучше называть их командами. Последовательность таких интерпретируемых команд приводит робота в то положение, которое подразумевается под всей совокупностью этих команд. И если эта последовательность не просто приводит робота в какое-то положение, но достигает цели зажечь все синие клеточки на поле, то эта последовательность и есть алгоритм решения для робота. Если бы данные вбивались "тупо", то любая случайная последовательность команд роботу приводила бы к нужному результату. Здесь это не так. Здесь надо составить программу - алгоритм движений робота. Вообще, очень важно знать определения слов, особенно основополагающих, таких как алгоритм.

    Алгори́тм — это точный набор инструкций, описывающих порядок действий некоторого исполнителя для достижения результата, решения некоторой задачи за конечное время. (http://ru.wikipedia.org/wiki/Алгоритм)

    В данном случае речь идет об ограниченной программной модели управления роботом, которая выполняет ограниченную задачу перемещения робота и зажигания клеточек. Для неё не трубуется чего-то более. Поэтому это программная модель для начинающих программистов. Здесь можно понять, что такое последовательность команд, что такое вызов процедуры, что такое последовательность, оптимальная по количеству команд.

    Например, пищеварительная система, в грубом приближении, выполняет свою функцию -последовательно и линейно перерабатывает пищу с выделением из нее полезных веществ, без условных переходов. Есть вход, есть набор операций обработки и есть выход. Вполне работающий алгоритм.

    Когда на ассемблере из последовательности команд выделяется подпроцедура или за счет удаления лишних инструкций достигается тотже результат - это оптимизация объема кода. В случае с роботом, есть место точно такой оптимизации.
     
  6. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    skomarov
    +1

    С роботом не совсем так. Здесь надо как раз сокращать объем данных, а не делать оптимальней код. Оптимизировать проще, чем уменьшать ;)
    Насчет алгоритма я полностью согласен.
     
  7. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    slavanap

    Из представленных команд можно выделить непосредственно команды роботу - это шаг вперед, поворот направо, поворот налево, прыжок, зажечь клеточку. При этом результат выполнения некоторых из этих команд зависит от местности (контекстно-зависимый).

    Остаются еще две команды f1 и f2. Они предназначены для передачи управления на специально определенные разделы для подпрограмм. После выполнения подпрограммы происходит возврат из нее и выполнение продолжается с ячейки следующей за ячейкой вызова подпрограммы.

    Понятия данных в этой программной модели - нет. Даже сами создатели игры ведут подсчет именно команд и пишут: "Total Commands".

    Что касается оптимизации, то в данном случае рассматривается ее единственный аспект - это уменьшение количества используемых команд. Правда, это невсегда приводит к более рациональному перемещению робота.
     
  8. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    skomarov
    уменьшение количества занятых клеток. С нерациональностью согласен полностью. Можно вообще рекурсию написать, правда она не остановится :)
    Но все же уменьшается РАЗМЕР кода или размер памяти, отводимой под код. При этом команд робот выполнит намного больше, чем клеточек занято.
     
  9. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    а нету больше ничего подобного? Три раза прошел, добился 168, меньше не могу. Жалко, что мало уровней, хотелось бы еще поиграться.
     
  10. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    166, с четвертого раза
     
  11. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Нимогу 12-ый пройти =) 147 на 11-том
     
  12. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    Stariy

    Это игра пример того, что во время оптимизации программы, программист идет на уступки.

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

    Во-вторых, время разработки. Если уже есть готовое и приемлемое решение, то можно и остановится. Скорее всего есть и другие задачи требующие своего решения.

    Конечно, есть. Микроконтроллеры, ассемблер x86, другими словами, наша жизнь... и не только связанная с компьютерами. :)
     
  13. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    skomarov
    но жизнь не программа
     
  14. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Этого и так хватает:) Хотелось вот такого легкого, ненавязчивого... Хотя опасно это, я на полдня парализовал всю комнату этой игрушкой.
     
  15. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Stariy
    Ты топик вообще читаешь? Есть сотни уровней для herbert'a. Тебе их хватит на долго.
     
  16. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    уже нашел. Только без инета, гад, не работает....