-
Notifications
You must be signed in to change notification settings - Fork 1
Measured Cases
65 value changes, run through the real element at 48px and recorded off the DOM once each settles, so these are end states and never a frame in flight. Kept is the glyphs that never re-rolled, the same elements afterwards with no animation on them. Travel is how far the furthest kept glyph slid. Width is the box of the host, the element the value is rendered in, before and after, in pixels.
Re-run the sweep with bun research/run-cases.ts against a dev server; it rewrites research/cases.json, which generates this page, so hand-edited rows do not survive it.
A counter that gains a digit keeps nothing, because every column shifts: 9 → 10 re-rolls both. Change one digit in place and everything else survives: 1,204 → 1,205 keeps 1,20 and rolls one glyph.
Anything with a unit attached keeps the unit for free. unread, files, Battery 8%, of 10. The number is the only thing that moves and the sentence around it holds still. A Kept cell is the survivors run together: Battery 8% is not a typo.
The long-travel rows show the travel allowance at work. supercalifragilisticlight → light keeps light and slides it 422px, SwiftUI's behaviour, copied on purpose. 11 → 1,001 keeps both digits and pays 74px for the separator that pushes them apart, the one case the floating-run allowance exists for.
A few results are judgement calls rather than clear wins. nineteen → twenty keeps the shared en and slides it 86px, and Offline → Online keeps Oline around the ff that leaves. Both sit inside the travel budget and read fine at speed, but look at them before touching the matcher's constants.
The Shape group is the only place the strings are deliberately nonsense. Those are the alignments the matcher has to get right, and real words would hide which rule fired.
| from | to | kept | travel | width |
|---|---|---|---|---|
9 |
10 |
none | none | 31 → 62 |
99 |
100 |
none | none | 62 → 92 |
999 |
1,000 |
none | none | 92 → 136 |
1,204 |
1,205 |
1,20 |
none | 136 → 136 |
1,204 |
88,900 |
none | none | 136 → 167 |
12,345 |
1,234 |
134 |
none | 167 → 136 |
1 |
1,000,000 |
1 |
none | 31 → 241 |
100 |
99 |
none | none | 92 → 62 |
7 |
8 |
none | none | 31 → 31 |
19 |
20 |
none | none | 62 → 62 |
| from | to | kept | travel | width |
|---|---|---|---|---|
$2.50 |
$12.75 |
$2. |
31px | 136 → 167 |
$9.99 |
$10.00 |
$ |
none | 136 → 167 |
€1,204 |
€1,205 |
€1,20 |
none | 168 → 168 |
-$4.00 |
$4.00 |
$4.00 |
31px | 167 → 136 |
$1,000 |
$999 |
$ |
none | 167 → 123 |
| from | to | kept | travel | width |
|---|---|---|---|---|
99% |
100% |
% |
31px | 109 → 140 |
0.9 |
1.0 |
none | none | 74 → 74 |
-1 |
0 |
none | none | 62 → 31 |
3% |
30% |
3% |
31px | 79 → 109 |
100% |
99% |
% |
31px | 140 → 109 |
| from | to | kept | travel | width |
|---|---|---|---|---|
12:59 |
13:00 |
1 |
none | 136 → 136 |
9:41 AM |
9:42 AM |
9:4 AM |
none | 196 → 196 |
1 second |
2 seconds |
second |
none | 212 → 238 |
59 seconds |
1 minute 0 seconds |
seconds |
182px | 269 → 451 |
2 minutes 12 seconds |
2 minutes 13 seconds |
2 minutes 1 seconds |
none | 508 → 508 |
Monday |
Tuesday |
day |
13px | 186 → 199 |
March |
April |
none | none | 146 → 107 |
11:59 PM |
12:00 AM |
1 M |
4px | 223 → 227 |
in 5 minutes |
in 4 minutes |
in minutes |
none | 280 → 280 |
Today |
Tomorrow |
To |
none | 145 → 238 |
31 December |
1 January |
1 |
31px | 311 → 229 |
| from | to | kept | travel | width |
|---|---|---|---|---|
1 unread |
2 unread |
unread |
none | 205 → 205 |
Track 1 of 12 |
Track 2 of 12 |
Track of 12 |
none | 309 → 309 |
3 files |
4 files |
files |
none | 140 → 140 |
loading |
loaded |
load |
none | 168 → 155 |
Draft |
Published |
none | none | 115 → 226 |
12 km |
12 miles |
12 |
none | 144 → 195 |
Battery 84% |
Battery 83% |
Battery 8% |
none | 288 → 288 |
2.4 MB |
24.1 MB |
2 MB |
31px | 162 → 193 |
v1.9.0 |
v1.10.0 |
v1..0 |
31px | 145 → 176 |
4 of 10 |
5 of 10 |
of 10 |
none | 165 → 165 |
Offline |
Online |
Oline |
8px | 154 → 147 |
18 °C |
19 °C |
1 °C |
none | 131 → 131 |
| from | to | kept | travel | width |
|---|---|---|---|---|
seven |
nine |
none | none | 138 → 98 |
light |
daylight |
light |
84px | 99 → 184 |
daylight |
light |
light |
84px | 184 → 99 |
Creative |
Code |
Ce |
71px | 193 → 122 |
supercalifragilisticlight |
light the Apple travel case |
light |
422px | 521 → 99 |
the light you seek is within you |
you are the daylight |
|
none | 704 → 454 |
one |
two |
none | none | 86 → 85 |
nineteen |
twenty |
en |
86px | 199 → 157 |
| from | to | kept | travel | width |
|---|---|---|---|---|
👋 |
🌍 |
none | none | 48 → 48 |
Hello 👋 |
Hola 👋 |
H 👋 |
13px | 177 → 164 |
一 |
二 |
none | none | 48 → 48 |
٣ |
٤ |
none | none | 26 → 26 |
Grüße |
Grüßen |
Grüße |
none | 142 → 170 |
零 |
一 |
none | none | 48 → 48 |
Ελλάδα |
Ελλάδας |
Ελλάδα |
17px | 165 → 212 |
🌑 |
🌒 |
none | none | 48 → 48 |
| from | to | kept | travel | width |
|---|---|---|---|---|
abcdef |
abcXY prefix only |
abc |
none | 160 → 152 |
abcdef |
XYdef suffix only |
def |
17px | 160 → 143 |
abcXXXdef |
abcYYYYYdef both ends |
abcdef |
66px | 262 → 328 |
xxlightxx |
yylightyy floating run |
light |
2px | 206 → 210 |
zzzzdaylightzzzz |
qqqqdaylightqqqq floating run, long |
daylight |
11px | 398 → 420 |
11 |
1,001 floating run pays for a separator |
11 |
74px | 62 → 136 |