вавилонский лабиринт

Aug 29, 2010 05:01

Проект игры для программистов: по карте-лабиринту двигается робот, нужно написать программу, помогающую ему попасть в отмеченную точку карты. Традиционно имеется выбор датчиков и эффекторов, ограничения на объём программы, данных и времени.

Но язык программирования на каждом уровне другой. То подобие бейсика, где надо нумеровать строки, то микро-лисп, где есть только списки, то язык без изменяемых структур данных, то с опорой на взаимодействие асинхронных процессов, то, наоборот, на continuations, то на текстовых подстановках, то на самомодификации программы, то на ленивых вычислениях, то микроскопический prolog, то мини-sql, то нано-smalltalk, где надо сначала структуры управления самому определить, разные ассемблеры, etc. Поскольку конкретный лабиринт можно упростить, язык даже не обязан быть полным по Тьюрингу. Важно, чтобы его было просто реализовать, хотя бы и наивно, поэтому "настоящий C++" исключён, а "настоящий Forth" - нет.

Не только идея языка, но и набор его доступных фич меняется от уровня к уровню, то же случается и способом связи с датчиками и эффекторами. Про каждую конструкцию языка известно, сколько она стоит - в тактах условного процессора и, возможно, в единицах "топлива", его питающего. У "процессора" может оказаться много "ядер", возможно, и без глобальной памяти ("кластер").

Можно усложнять задачи, добавив инерцию движения, чтобы надо было успевать рассчитать следующее управляющее воздействие, ограничив "количество топлива", размер процедур (или иных структурных единиц) и предельное число тактов в них, добавив в лабиринт двери и ключи, "артефакты" вроде дополнительных порций "топлива", etc.

Можно упрощать задачи, ограничивая характер лабиринтов (гарантировать односвязность, например), улучшая датчики (видеть до ближайших стен, видеть сквозь стены в данном радиусе, заранее видеть цель) и эффекторы (например, разрешить скользить по инерции, не тратя "топлива").

Разумеется, должен быть и сайт с текстами программ, соревнованиями и рейтингами, как разных языков в одном лабиринте, так разных программ на одном языке. Можно одновременно выпускать в лабиринт одиночных роботов-соперников или их команды. Выкладывать ролики прохождений и вести "прямой репортаж". Следует позаботиться о красоте анимации :)

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

Понятно и за что деньги брать: с рекрутеров за контакты игроков.

idea, lang, mental

Previous post Next post
Up