Step 3 of 4
Building the Bombe Menu
Each valid crib alignment gives a set of letter-pair relationships. Turn those pairs into a graph — that graph is the wiring plan (the "menu") that configures the Bombe.
What the Crib Gave You
Each match from the Crib page is a valid alignment: the crib positioned such that no letter equals itself in the ciphertext. That alignment gives a set of letter-pair relationships — one pair per crib character:
Example: crib WETTER over BWIRTW…
| Position | Plaintext letter | Ciphertext letter | Pair (edge) |
|---|---|---|---|
| 1 | W | B | W ↔ B |
| 2 | E | W | E ↔ W |
| 3 | T | I | T ↔ I |
| 4 | T | R | T ↔ R |
| 5 | E | T | E ↔ T |
| 6 | R | W | R ↔ W |
Each row is one connection: "at rotor position n, a signal entering the Enigma scramblers as letter A must emerge as letter B." The Bombe tests whether any global rotor position is consistent with all connections simultaneously.
From Pairs to Graph — The Menu
Each pair becomes a labelled edge in a graph. The letters are nodes; the crib position is the edge label:
Each edge is labelled with its crib position. Together, edges 2–5–4–6 form the cycle W–E–T–R–W — the loop the Bombe exploits.
This graph is called the menu. On the Menu page, the graph is rendered dynamically from your crib data, and the optimizer highlights the strongest loop in green.
Why Loops Matter
A loop (cycle in the graph) means a chain of letter-pair relationships closes back on itself. The Bombe exploits this:
Inject hypothesis
Assume a test letter maps to voltage A. Inject current at that node.
Propagate
Current travels along every edge, through each rotor scrambler at its position.
Check consistency
If the loop returns a different letter → contradiction → this rotor position is wrong.
More loops = fewer false stops. A menu with no loops passes most positions (the Bombe sees no contradiction without a loop to close). A menu with 2–3 loops rejects most wrong positions. The optimizer automatically selects the best 12 connections including the strongest loop.
Menu Tool Walkthrough
Data is pre-filled from the Crib page
If you clicked a match card on the Crib page, the ciphertext segment and crib text are already loaded into the Menu page inputs.
Click "Generate Bombe Menu"
The graph appears — nodes are letters, edges show positions. Green nodes and edges highlight the best loop found by the optimizer.
The optimizer selects up to 12 connections that contain the strongest loop. These connections are transferred to the Bombe page automatically.
Review and continue
Check that the loop is visible in the graph (highlighted in green). The test letter (most connected node) is pre-selected. Click "Configure Bombe" or navigate to the Bombe page.
Limitations
- ✗ Cribs shorter than ~10 characters rarely produce loops — the menu will have no cycles and the Bombe will generate many false stops.
- ✗ A crib with all unique letters (no repeated letters) cannot produce a loop — every letter appears as a node only once.
- ✗ If the offset crosses a rotor turnover boundary, one or more menu edges may model the wrong scrambler position.