К программированию эта задача не имеет никакого отношения. Программирование занимается написанием алгоритмов, а там тупо вбиваются данные. Чтобы там можно было составить алгоритм, как минимум нужен предикат и условный переход.
Вот как раз логики (булевой) там нету. Сокращения программ тоже, т.к. то что там набирается - не программа. Там проблема в том, как меньше ходов сделать - т.е. как данные (а не код) покомпактней записать. Вот например jmptable vs jxx/jxx/... - это задача сокращения программ.
GoldFinch Команды роботу можно назвать данными. Интерпретатор в зависимости от того, что за данные находятся в ячейке, заставляет робота перемещаться или поворачиваться. Поэтому для понятности лучше называть их командами. Последовательность таких интерпретируемых команд приводит робота в то положение, которое подразумевается под всей совокупностью этих команд. И если эта последовательность не просто приводит робота в какое-то положение, но достигает цели зажечь все синие клеточки на поле, то эта последовательность и есть алгоритм решения для робота. Если бы данные вбивались "тупо", то любая случайная последовательность команд роботу приводила бы к нужному результату. Здесь это не так. Здесь надо составить программу - алгоритм движений робота. Вообще, очень важно знать определения слов, особенно основополагающих, таких как алгоритм. Алгори́тм — это точный набор инструкций, описывающих порядок действий некоторого исполнителя для достижения результата, решения некоторой задачи за конечное время. (http://ru.wikipedia.org/wiki/Алгоритм) В данном случае речь идет об ограниченной программной модели управления роботом, которая выполняет ограниченную задачу перемещения робота и зажигания клеточек. Для неё не трубуется чего-то более. Поэтому это программная модель для начинающих программистов. Здесь можно понять, что такое последовательность команд, что такое вызов процедуры, что такое последовательность, оптимальная по количеству команд. Например, пищеварительная система, в грубом приближении, выполняет свою функцию -последовательно и линейно перерабатывает пищу с выделением из нее полезных веществ, без условных переходов. Есть вход, есть набор операций обработки и есть выход. Вполне работающий алгоритм. Когда на ассемблере из последовательности команд выделяется подпроцедура или за счет удаления лишних инструкций достигается тотже результат - это оптимизация объема кода. В случае с роботом, есть место точно такой оптимизации.
skomarov +1 С роботом не совсем так. Здесь надо как раз сокращать объем данных, а не делать оптимальней код. Оптимизировать проще, чем уменьшать Насчет алгоритма я полностью согласен.
slavanap Из представленных команд можно выделить непосредственно команды роботу - это шаг вперед, поворот направо, поворот налево, прыжок, зажечь клеточку. При этом результат выполнения некоторых из этих команд зависит от местности (контекстно-зависимый). Остаются еще две команды f1 и f2. Они предназначены для передачи управления на специально определенные разделы для подпрограмм. После выполнения подпрограммы происходит возврат из нее и выполнение продолжается с ячейки следующей за ячейкой вызова подпрограммы. Понятия данных в этой программной модели - нет. Даже сами создатели игры ведут подсчет именно команд и пишут: "Total Commands". Что касается оптимизации, то в данном случае рассматривается ее единственный аспект - это уменьшение количества используемых команд. Правда, это невсегда приводит к более рациональному перемещению робота.
skomarov уменьшение количества занятых клеток. С нерациональностью согласен полностью. Можно вообще рекурсию написать, правда она не остановится Но все же уменьшается РАЗМЕР кода или размер памяти, отводимой под код. При этом команд робот выполнит намного больше, чем клеточек занято.
а нету больше ничего подобного? Три раза прошел, добился 168, меньше не могу. Жалко, что мало уровней, хотелось бы еще поиграться.
Stariy Это игра пример того, что во время оптимизации программы, программист идет на уступки. Во-первых, потери на перемещении робота. При уменьшении количества команд в коде, когда последовательности команд выносятся в процедуру, бывает что робот начинает совершать нерациональные движения, лишние подпрыгивания или зажигания лампочки на серых клеточках. Если бы робот был настоящим, то программисту надо было бы учитывать эти дополнительные условия, такие как технические затраты на передвижение самого робота, на зажигание клеточек. В даном случае это выражается в словах "красивое решение", когда сам код соответствует рациональному перемещению робота. Во-вторых, время разработки. Если уже есть готовое и приемлемое решение, то можно и остановится. Скорее всего есть и другие задачи требующие своего решения. Конечно, есть. Микроконтроллеры, ассемблер x86, другими словами, наша жизнь... и не только связанная с компьютерами.
Этого и так хватает Хотелось вот такого легкого, ненавязчивого... Хотя опасно это, я на полдня парализовал всю комнату этой игрушкой.