9000 (9000) wrote,
9000
9000

Categories:

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

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

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

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

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

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

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

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


Понятно и за что деньги брать: с рекрутеров за контакты игроков.
Tags: idea, lang, mental
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 33 comments