Поддержка областей в крупном приложении абсолютно жизненно важна, по-моему. Кажется довольно странным мне, что Microsoft предназначает при выпуске ASP.NET MVC 1.0 без созданного в поддержке областей.
, К счастью, в чем MVC испытывает недостаток в возможности, которую он восполняет в расширяемости. Например, в Архитектуре S#arp, как Asaf кратко упомянул, я взял руководство от Phil Haack ( http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx ) и Steve Sanderson ( http://blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/ ), но изменил объединенный результат поддерживать области непосредственно под папкой представления. (Мне не нравилось это была отдельная папка "Areas" для содержания областей представления.), Другими словами, если Вы создаете область "Animals" с соответствующим контроллером Животные. AardvarksController, Ваша папка Views отразила бы Представления/Животных/Муравьедов.
, Если бы Вы не интересуетесь использованием всей Архитектуры S#arp, я поощрил бы Вас, по крайней мере, проверять, как области были реализованы в этой платформе для использования в Вашем собственном приложении. Соответствующие нормы включают:
Кстати, Архитектура S#arp включает генератор лесов CRUD, который принимает во внимание вложенные пространства имен автоматически. Как упомянутый Asaf, можно узнать больше об этом в http://code.google.com/p/sharp-architecture/
Billy McCafferty
Это система линейных уравнений над F 2 , полем, содержащим два элемента 0 и 1.
Вы можете решить ее так же, как обычные линейные уравнения, но вы должны выполнить арифметику по модулю 2.
Редактировать: Линейная алгебра в этом случае работает точно так же, как и для действительных чисел, за исключением того, что вам нужно заменить операции:
Сложение и вычитание становятся исключающими или, т.е. 0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 0.
Умножение становится И: 0 * 0 = 0, 0 * 1 = 0, 1 * 1 = 1
Деление возможно только на единицу: 0/1 = 0, 1/1 = 1.
Все коэффициенты в ваших уравнениях и возможные значения неизвестных равны 0 или 1.
Таким образом, модуль не накладывается на внешнюю сторону уравнений, как вы написали, он подразумевается в операциях.
Если ваша система уравнения не разрешимы, вы получите уравнение 0 = 1, которое, очевидно, не разрешимо.
Поскольку это не ограниченная по времени проблема (ну, если предположить, что это можно сделать менее чем за день), я, вероятно, выбрал бы поиск в ширину с ограниченной глубиной, взяв каждый возможное движение на уровне, а затем каждое движение, следующее за каждым ходом.
Это будет медленным, однако почти гарантированно найти ответ, если он есть!
Это выглядит почти как система линейных уравнений (за исключением мода 2), поэтому вы можете адаптировать один из обычных методов для их решения - например, сокращение строки системы в матрице форма (википедия) .
Вместо того, чтобы начинать со случайного состояния, почему бы не сгенерировать начальную позицию, щелкая случайными переключателями, т.е. работать в обратном направлении от решенного состояния к начальному состоянию. Таким образом вы будете создавать только решаемые головоломки.