Записки начинающего функциональщика: восемь ферзей возвращаются
Здравствуйте дорогие!
Во-первых, разрешите всех поздравить с наступившим Новым 2006 Годом! Счастья, удачи, успехов всем в новом году!
Во-вторых, разрешите напомнить, что настоящий Мастер использует все подворачивающиеся возможности для достижения полного и окончательного просветления :) . Вот и ваш покорный слуга, находясь в состоянии лёгкой постновогодней абстинентции родил следующее:
Это опять задача о расстановке ферзей, на сей раз занимаемся только подсчётом количества возможных расстановок:
|
|
Ключ к пониманию:
Для проверки очередной позиции мы используем лямбда-функцию от двух аргументов: вертикаль и горизонталь. Для самой первой позиции эта функция всегда будет возвращать True для всех последующих эта функция превращается в композицию проверки текущей расстановки и всех предыдущих:
|
|
Т.е. информацию о текущем состоянии доски мы храним в виде одной длинной лямбда-фукции.