Files
gastown/.beads/formulas/towers-of-hanoi.formula.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"]}
]
}
}