Подобный ответу Oli, я использую Объект аргумента и Объект, который определяет значения по умолчанию. С небольшим количеством сахара...
/**
* Updates an object's properties with other objects' properties. All
* additional non-falsy arguments will have their properties copied to the
* destination object, in the order given.
*/
function extend(dest) {
for (var i = 1, l = arguments.length; i < l; i++) {
var src = arguments[i]
if (!src) {
continue
}
for (var property in src) {
if (src.hasOwnProperty(property)) {
dest[property] = src[property]
}
}
}
return dest
}
/**
* Inherit another function's prototype without invoking the function.
*/
function inherits(child, parent) {
var F = function() {}
F.prototype = parent.prototype
child.prototype = new F()
child.prototype.constructor = child
return child
}
... это может быть сделано немного более хорошим.
function Field(kwargs) {
kwargs = extend({
required: true, widget: null, label: null, initial: null,
helpText: null, errorMessages: null
}, kwargs)
this.required = kwargs.required
this.label = kwargs.label
this.initial = kwargs.initial
// ...and so on...
}
function CharField(kwargs) {
kwargs = extend({
maxLength: null, minLength: null
}, kwargs)
this.maxLength = kwargs.maxLength
this.minLength = kwargs.minLength
Field.call(this, kwargs)
}
inherits(CharField, Field)
, Что хорошо об этом методе?
undefined
, когда, скажите, что существует 5 аргументов, и Вы только хотите настроить последний, поскольку Вы имели бы отношение к некоторым из других предложенных методов. CharField
вызовы Field
конструктор). При выполнении шифрования RSA мы не находим простые числа, мы выбираем случайные числа и затем применяем к ним тесты, которые дают нам все более высокую вероятность того, что число является простым, без доказательства этого.
Я предлагаю то же самое. Постарайтесь найти условия, которые дают высокую вероятность того, что головоломка имеет желаемые свойства, и проверьте их. Или вы можете использовать генетические алгоритмы / нейронные сети и обучить их распознавать «хорошие» головоломки, что равносильно тому же.
Я бы попытался доказать, что он является NP-полным или в P, чтобы почувствовать сложные конфигурации.
Я бы также абстрагировался от шестиугольников и использовал представление в виде графика.
Я много играл в прямоугольную головоломку о наводнении ( http: // labpixies.com/gadget_page.php?id=10). Рад видеть версию Hex! Я думаю, что найти сложную игру так же просто: избегать появления больших блоков одного цвета в головоломке. По крайней мере, в прямоугольных случаях, которые я видел, почти все головоломки, которые можно решить за небольшое количество шагов, имеют большие цветные блоки.
PS Я думаю, что ваша «нижняя граница» неверна. При работе вперёд, если использовать хорошую стратегию, вы можете закончить за меньшее количество шагов. «Нижняя граница» на самом деле является верхней границей оптимального решения.