24 lines
1.1 KiB
Text
24 lines
1.1 KiB
Text
// We add a zero to be able to express e.g. "not top floor"
|
|
def floors: [0..5 -> (floor:$)];
|
|
def names: [['Ground', 'Baker', 'Cooper', 'Fletcher', 'Miller', 'Smith']... -> (name:$)];
|
|
|
|
def dwellings: [$floors, $names] -> \(
|
|
def solver: $ -> EinsteinSolver;
|
|
|
|
{name: 'Ground', floor: 0} -> !solver::isFact
|
|
({name: 'Ground'} solver::nextTo&{byField: :(floor:), bMinusA: [1..4]} {name: 'Baker'}) -> !VOID
|
|
({name: 'Ground'} solver::nextTo&{byField: :(floor:), bMinusA: [2..5]} {name: 'Cooper'}) -> !VOID
|
|
({name: 'Ground'} solver::nextTo&{byField: :(floor:), bMinusA: [2..4]} {name: 'Fletcher'}) -> !VOID
|
|
({name: 'Cooper'} solver::nextTo&{byField: :(floor:), bMinusA: [1..4]} {name: 'Miller'}) -> !VOID
|
|
({name: 'Fletcher'} solver::nextTo&{byField: :(floor:), bMinusA: [-4..-2, 2..4]} {name: 'Smith'}) -> !VOID
|
|
({name: 'Fletcher'} solver::nextTo&{byField: :(floor:), bMinusA: [-4..-2, 2..4]} {name: 'Cooper'}) -> !VOID
|
|
|
|
[$solver::solutions&{required: 6} ... -> ($ notMatching {| {name: 'Ground'} |})]!
|
|
\);
|
|
|
|
$dwellings -> \[i]('Solution $i;:
|
|
$... -> '$;
|
|
';
|
|
'! \)... -> !OUT::write
|
|
'No more solutions
|
|
' -> !OUT::write
|