DESIGN CONCEPT2026

Navigation:

On this page:

  • Interval clock #
  • Glyph Browser #
  • Effective Clock #
Summary

VARIATIONS ON THE CISTERCIAN NUMERALS

Cistercian numerals are treated here as a design space rather than a fixed historical notation. The page compares medieval, compact, and combinatorial variants, then uses a compact-combinatorial compromise to build a binary clock whose four quadrants encode the day's 86,400 seconds as readable time components.

Similar projects and secondary literature:

Begin with a vertical stem. The plane around it divides into four quadrants: top-right, top-left, bottom-right, bottom-left. In each quadrant five primitive strokes are available: two horizontals, one diagonal, one anti-diagonal, and one outer rail. A Cistercian numeral is a selection of these strokes: one decimal digit per quadrant, four digits per stem, every integer from $0$ to $9{,}999$ expressible as a single glyph.

The historical system—call it medieval—assigns each digit $d \in \{0,\dots,9\}$ a fixed stroke pattern. The assignments are conventional: $1$ is a horizontal at the top of the stem, $2$ a horizontal further down, $3$ a diagonal connecting their endpoints. The ten shapes follow no compositional rule; they must be learned by rote. Still, the encoding is effective. Write a numeral as a 4-tuple $(a_0, a_1, a_2, a_3)$, one digit per quadrant, and the code is the Cartesian product

$$\begin{align} C \;\cong\; D^{4}, \quad |C| = |D|^{4} = 10^{4}. \end{align}$$

Cycling each digit to the next quadrant is the action of $C_4 = \langle \sigma \rangle$ on coordinates:

$$\begin{align} \sigma(a_0, a_1, a_2, a_3) = (a_3, a_0, a_1, a_2). \end{align}$$

Everything above is notation, a way to write integers. What follows is a separate question: can these glyphs also measure time?

Ten thousand glyphs is already enough for a clock. Map one day onto the full code space, cycling through every glyph exactly once before resetting at midnight:


/ 9999

At midnight the glyph is a bare stem ($0$), and it accumulates strokes through $9{,}999$ before resetting. The progress bar visualizes each interval as it elapses. Let $S = 86{,}400$ and $N = 10{,}000$. The duration of one interval follows from the Euclidean division

$$\begin{align} S &= q \cdot N + r, \quad q = \lfloor S / N \rfloor, \quad r = S \bmod N, \end{align}$$

which yields

$$\begin{align} 86{,}400 &= 8 \cdot 10{,}000 + 6{,}400, \quad q = 8, \quad r = 6{,}400. \end{align}$$

Each interval lasts $q + r/N = 8.64$ seconds. The progress bar encodes this directly: one short segment of $0.64\,\text{s}$ (with proportional width $r/N$ of a full segment), followed by $q = 8$ full segments of $1\,\text{s}$ each.

The clock works, but the numeral system beneath it is opaque: you cannot read the time without memorizing all ten stroke patterns. This prompts two structural modifications, each pulling in a different direction.

The compact variant discards the outer rail, leaving four primitives per quadrant. Since $2^4 = 16 > 10$, the ten digits still fit as subsets of these four strokes, and glyphs become visually lighter. But the mapping from digit to subset remains conventional; it is no more compositional than the medieval original:

$$\begin{align} |C_{\mathrm{compact}}| = 10^4. \end{align}$$

The combinatorial variant moves in the opposite direction. It retains all five primitives and treats each as an independent binary feature. A quadrant's state is a $5$-bit mask, the glyph is the union of active strokes. No lookup table is needed; the binary representation is the visual. This restores full compositionality but expands the code space dramatically:

$$\begin{align} |C_{\mathrm{comb}}| = 32^4 = 2^{20} = 1{,}048{,}576. \end{align}$$

The compact variant is economical, the combinatorial variant is principled.

Demo

The browser renders glyphs in lazy chunks.

Loading...

It compares compact, medieval, and combinatorial glyphs for indices $0$ through $9999$, then continues with combinatorial glyphs up to $2^{20}-1 = 1048575$.

Jump to

The goal is a modern, human-readable clock: hours, minutes, and seconds visible at a glance, with every stroke remaining a single toggleable bit. Instead of dividing the day into $10^4$ abstract intervals, we factor its seconds into a mixed-radix product

$$\begin{align} 24 \times 30 \times 30 \times 4 = 86{,}400 \end{align}$$

and assign each factor to a quadrant: hours ($0$–$23$), low minutes ($0$–$29$), low seconds ($0$–$29$), and a two-bit flag $f = 2s_1 + m_1$ combining the upper halves of minutes and seconds.

Within each quadrant the value is written as a binary mask over the five primitive strokes: the combinatorial variant's compositional grammar, restricted to only the states the factor requires. The result reads as a conventional clock (each quadrant carries a human-legible time component) while every stroke remains an independently toggleable bit. No digit alphabet needs to be memorized; the glyph is fully determined by the time.

Two stroke semantics were considered. A plain binary count:

mask = 0 | bits = 00000

And a growing cycle:

seconds = 0 | cycle.bits = 00000 | flag.bits = 0 | sec.bits = 000000

The binary count is clearer: each stroke carries a fixed weight, and reading a quadrant is simple addition. The growing cycle looks more deliberate but requires internalizing a sequence rather than five positional values. With this choice the four quadrants are:

$$\begin{array}{c|c} \mathrm{h/24\;hours} & \mathrm{m/30\;or\;(30+m)/60\;minutes} \\ \hline \mathrm{s/30\;or\;(30+s)/60\;seconds} & \mathrm{(f_1/2+f_2/2)/4\;flag} \\ \end{array}$$

The clock can also be sketched in Unicode:

Unicode (U+2500 to U+257F) ┌─────┐ ┌─────┐ │ ╲ ╱ │ │ ╲ ╱ │ │ ╳ │ │ ╳ │ │ ╱ ╲ │ │ ╱ ╲ │ ├─────┼─────┼─────┤ │ ╲ ╱ │ │ ╲ ╱ │ │ ╳ │ │ ╳ │ │ ╱ ╲ │ │ ╱ ╲ │ └─────┘ └─────┘ 4 o'clock: ──────╴ ─────────────────── plus 8 o'clock: ╱ ╱ ╱ ─────────────────── is 12 o'clock: ─────╴ ╱ ╱ ╱ ───────────────────

Because each quadrant maps to a familiar time unit, the glyph is readable after minimal training; hours and minutes separate visually the same way they separate conceptually, and the full state (hour, minute, second, half-minute flag) compresses into a single 19-bit stem:


Each full quadrant uses five stroke positions with fixed binary weights $1, 2, 4, 8, 16$; the displayed value is their sum. The flag quadrant works at smaller scale: its two strokes act as independent half-indicators, one for seconds, one for minutes. If you only care about hour and minute, one flag stroke tells you whether minutes are in the lower or upper half.

A standalone version is available. Clicking anywhere on that page toggles between two layouts. .html

Legend
1Navigation
2Description and References
3Compact vs Combinatorial Narrative
4Lazy Generator App
5Final Clock