В отличие от известных реализаций "Эволюции" на 1С, здесь считается, что поле игры не ограничено. Живые клетки представлены записями в таблице "Популяция", хранящими их координаты - целые числа. Используется искусственная таблица "Дельта", содержащая три числа: -1, 0 и 1 как шаги по вертикали или горизонтали. Выборкой из трех независимых таблиц: двух таблиц "Дельта" и таблицы "Популяция" получаем для каждой живой клетки девять записей. Восемь из них являются координатами соседних клеток и берутся с весом 1, а девятая - самой живой клеткой, которая берется с весом 9. После группировки по координатам отбираются только клетки, суммарный вес которых равен 3, 11 или 12. Используется правило игры: клетка образуется на пустом месте, если у нее три соседа (0 + 3), либо остается на своем месте, если у нее два (9 + 2) или три соседа(9 + 3).
Весь запрос умещается на восьми строчках:
Прилагаемый отчет является примером использования запроса, поэтому реализован только самый необходимый функционал:
Для вывода поля игры используется окно, размеры и сдвиг которого настраиваются. В этом окне состояние клетки можно менять двойным кликом мышки. При этом клетка, выходящая за пределы активного окна, переходит как бы в другой слой этого же окна, двигается в нем, но отображается узором. Доступны кнопки сохранения и восстановления "популяции", очистки "популяции". Для эволюции есть режим ручного шага, автоматического шага с интервалом 1 сек, максимальный режим с прорисовкой промежуточных состояний и без. Выход из максимального режима - только через Ctrl+Break.
Эксперименты показали, что расчет динамики даже довольно больших популяций не вызывает существенного "торможения". Скорость "игры" больше ограничивается не запросом, а временем перерисовки табличного поля. Несмотря на то, что отчет "Эволюция" по сути - "безделушка", он весьма поучителен. Выводы заключаются в том, что:
1) искусственные таблицы упрощают решение задач на языке запросов, расширяют его возможности;
2) упаковывая сложные действия в один запрос, можно повысить скорость вычислений за счет того, что в 1С быстрее делается то, что описывается одной инструкцией;
3) гибкость языка запросов достаточно высока, что позволяет решать на нем задачи, далеко выходящие за привычные рамки.