[07] Measurements
[07] · INVESTIGATION

Measurements

Key-free statistics, computed live in your browser, each with the control that makes it mean something.

Live readout · computed in your browser

The cells on this page marked live are computed from the transcription as the page loads. The percentiles against English, the Monte Carlo p-values and the solver scores come from my Python lab and are quoted with the script that produced them.

Symbol frequencies · live

Twenty of the 24 symbols are used; 2nw alone is 11 of 87. Four never appear. For 87 letters of real English, 20 distinct letters sits at the 38th percentile — ordinary.

The rotation test — directions · live

why

A 45° turn moves a glyph to the next direction but keeps its ring. So if the key advances regularly — every glyph, every second glyph, whatever the step — each plaintext letter is smeared across all eight directions, and the eight counts are pushed towards 87/8 ≈ 10.9 whatever the key or the fill.

result

Dorabella's counts are 10 8 9 16 15 3 4 22: χ² = 26.6 on 7 degrees of freedom. In a Monte Carlo of 40,000 simulated rotating-snowflake ciphertexts (English plaintext, random fill) only 12 were this lumpy: p = 0.0003. Rotation also predicts 0.81 unused cells; Dorabella has 4.

A regular rotating key is ruled out. The test needs no key, no solver and no corpus, so nothing later can overturn it. Irregular, text-driven schedules escape the argument and stay open.

Arc counts · live

How often each ring is used. A rotation can never move a glyph between rings.

Same-ring neighbours by angle · live

Ten 180° pairs where shuffling the same glyphs gives 5.2 on average (p = 0.03, lab/analysis.py).

Is it shaped like language?

Each statistic measured on Dorabella and on 400 samples of real English of the same length, reduced to the same alphabet size by a substitution (lab/run_structure.py). The percentile is where Dorabella falls among them.

key-free measureDorabellaEnglish percentileverdict
Index of coincidence0.059112thinside
Entropy (bits / glyph)4.01870thinside
Distinct symbols used2038thinside
Doubled glyphs474thinside
Repeated bigrams (occurrences beyond the first)2055thinside
Letter-frequency profile, rank-matched χ²5.0130thfits

For the frequency profile: English 87-letter samples have median 6.14, 90% range 3.55–12.47 (lab/run_final.py, 500 samples). On every key-free measure Dorabella sits inside the range of real English. The common claim that its statistics are anomalous does not survive calibration.

A repeating key? — periodic IC and Kasiski

The standard test for a repeating-key (Vigenère-type) cipher: split the stream into p interleaved cosets and measure the index of coincidence inside them. A genuine key of length p raises it at p and at every multiple. Measured on the flat stream, so it does not care whether the note is three rows or one string (lab/structure.py, 400 shuffles per period).

periodcoset ICshuffledpct periodcoset ICshuffledpct
10.05910.0591—120.05060.059024.8
20.05670.059326.2130.05570.059340.5
30.05420.059314.5140.04080.05849.5
40.05820.059645.0150.04890.058622.8
50.05200.059118.2160.06250.058558.5
60.05490.059331.5170.08240.058990.8
70.04210.05881.5180.02780.05981.5
80.06360.060165.8190.03860.059513.5
90.04200.05945.2200.07170.060172.0
100.06430.059167.2210.04130.057920.0
110.08120.059993.2220.06350.061748.5

No period shows elevated coset IC (none reaches the 97.5th percentile of its shuffles). That is evidence against a repeating-key polyalphabetic cipher of any length up to 22. Kasiski agrees: repeated substrings give 25 bigram spacings and only 2 trigram spacings, the longest repeat is three glyphs (2nw 2s 2n, spacing 24), and the spacings' common factors (2, 4, 3, 5, 8, 11…) point at no single key length.

Vowels — Sukhotin's algorithm · live

In natural language the vowels fall out of adjacency structure alone: vowels and consonants alternate. Sukhotin's algorithm recovers that set without any key.

A port of lab/analysis.py, including its tie-break. Descriptive only — I never calibrated it against English at this length, so it is a direction to look in, not a result.

Can any substitution make it read?

An annealing solver (lab/solver.py, blended 3- and 4-gram English model) attacks Dorabella under each reading order, and the same solver at the same effort attacks 40 genuine English ciphertexts of 87 letters. Matched effort was the hard-won part — the history is on [08].

lab/run_matched.py · 100 restarts × 12,000 iterations on both sides
English baseline (40 true-English ciphertexts, 814 s):
  min -4.151   5th -3.819   median -3.621   max -3.409
  mean -3.645  sd 0.143
  letters recovered: median 87/87, 40/40 samples over 70/87

Dorabella, same effort:
  as written             -4.774     0.0th pct   z = -7.87
  reversed (whole)       -4.723     0.0th pct   z = -7.52
  each line reversed     -4.754     0.0th pct   z = -7.73
  boustrophedon          -4.884     0.0th pct   z = -8.64
  lines 3,2,1            -4.819     0.0th pct   z = -8.19
  columns (interleave)   -5.023     0.0th pct   z = -9.61
  derotate 4 [every]     -4.899     0.0th pct   z = -8.74

best candidate plaintext (reversed):
  AIRATORYAROCUTEMORFUNMOUTOMODINNINCOUTEDESCRTMEEMAPWAITSESEDRIGINUYYTEEVENCEDGWASTHAMYJ

A plain substitution of English is excluded. Every transform sits 7.5 to 9.6 standard deviations below real English solved the same way. This is not a solver failure: on the same controls it recovered a median of 87 of 87 letters. Once the separation is this large the percentile saturates at 0 and stops being informative — the z-score is the number to quote.

The saved report's closing verdict line (“bottom 5%… disfavours…”) was printed by an older verdict branch that did not yet look at z; the script now prints “excluded” for z < −5. The numbers above are unchanged. The best “plaintext” is what a solver squeezes out of 87 glyphs — English-looking fragments, no message.

The five diagnostics used to compare cipher models

D1 frequency χ²5.01rank-matched vs English
D2 orientation χ²26.6evenness of 8 directions
D3 mirrored pairs10same ring, 180°
D4 distinct20of 24
D5 best solve−4.768substitution score

Each candidate mechanism is simulated on real English and judged on where Dorabella falls in its own output — the full comparison is on [10].