67 lines
2.3 KiB
JSON
67 lines
2.3 KiB
JSON
{
|
|
"formula": "towers-of-hanoi",
|
|
"description": "Solve Towers of Hanoi for {disks} disks. Generates 2^{disks} - 1 steps, each a trivial move operation. Demonstrates mechanical structure generation for arbitrarily long workflows.",
|
|
"version": 1,
|
|
"vars": {
|
|
"disks": {
|
|
"description": "Number of disks to solve",
|
|
"required": true
|
|
},
|
|
"source_peg": {
|
|
"description": "Starting peg",
|
|
"default": "A"
|
|
},
|
|
"target_peg": {
|
|
"description": "Target peg",
|
|
"default": "C"
|
|
},
|
|
"auxiliary_peg": {
|
|
"description": "Helper peg",
|
|
"default": "B"
|
|
}
|
|
},
|
|
"generate": {
|
|
"for-each": {
|
|
"var": "move_num",
|
|
"range": "1..2^{disks}"
|
|
},
|
|
"step": {
|
|
"id": "move-{move_num}",
|
|
"description": "Move {computed_disk} from {computed_source} to {computed_target}. This is move {move_num} of {total_moves}. Simply execute the move - no decision needed.",
|
|
"needs": ["move-{move_num - 1}"],
|
|
"compute": {
|
|
"disk": "lowest_set_bit({move_num})",
|
|
"source": "peg_for_disk({disk}, {move_num}, 'source')",
|
|
"target": "peg_for_disk({disk}, {move_num}, 'target')"
|
|
}
|
|
}
|
|
},
|
|
"steps": [
|
|
{
|
|
"id": "setup",
|
|
"description": "Verify initial state: {disks} disks stacked on peg {source_peg}. All disks in order (largest on bottom)."
|
|
},
|
|
{
|
|
"id": "solve",
|
|
"description": "Execute all {total_moves} moves to transfer tower from {source_peg} to {target_peg}.",
|
|
"needs": ["setup"]
|
|
},
|
|
{
|
|
"id": "verify",
|
|
"description": "Verify final state: all {disks} disks now on peg {target_peg}. Tower intact, all moves were legal.",
|
|
"needs": ["solve"]
|
|
}
|
|
],
|
|
"example_3_disk": {
|
|
"steps": [
|
|
{"id": "move-1", "description": "Move disk 1 from A to C"},
|
|
{"id": "move-2", "description": "Move disk 2 from A to B", "needs": ["move-1"]},
|
|
{"id": "move-3", "description": "Move disk 1 from C to B", "needs": ["move-2"]},
|
|
{"id": "move-4", "description": "Move disk 3 from A to C", "needs": ["move-3"]},
|
|
{"id": "move-5", "description": "Move disk 1 from B to A", "needs": ["move-4"]},
|
|
{"id": "move-6", "description": "Move disk 2 from B to C", "needs": ["move-5"]},
|
|
{"id": "move-7", "description": "Move disk 1 from A to C", "needs": ["move-6"]}
|
|
]
|
|
}
|
|
}
|