DEV Community

Convertilo
Convertilo

Posted on AI-assisted

Implementing the Destiny Matrix in TypeScript: reducing a birth date to Major Arcana

The "Destiny Matrix" is a numerology-style system that went viral on social media: you enter a birth date and get a chart of numbers from 1 to 22, each one mapped to a Major Arcana card. To be clear up front, it is a tradition and entertainment, not science. But the calculation itself is a nice small algorithm problem, and most online explanations are vague about it. Here is the exact logic I use in a free calculator, in TypeScript.

Step 1: reduce any number to 1..22

Everything is built on one helper. Keep summing the digits until the value is 22 or less. The only special case is zero, which becomes 22 (the last arcana, the Fool).

export function reduceArcana(n: number): number {
  let v = Math.abs(Math.trunc(n))
  while (v > 22) {
    v = String(v).split('').reduce((s, d) => s + Number(d), 0)
  }
  return v === 0 ? 22 : v
}

export function sumDigits(n: number): number {
  return String(Math.abs(Math.trunc(n))).split('').reduce((s, d) => s + Number(d), 0)
}
Enter fullscreen mode Exit fullscreen mode

Note that a value like 19 or 22 is left alone (it is already valid), while 29 becomes 11 and 36 becomes 9.

Step 2: the four main points

Take the day, month and year of birth:

  • left point a = reduceArcana(day)
  • top point b = reduceArcana(month)
  • right point c = reduceArcana(sumDigits(year))
  • bottom point d = reduceArcana(a + b + c)

The year is handled in two steps: first the digit sum (1990 gives 19), then the reduction to 1..22.

Step 3: center and corners

The center is the sum of all four main points, and the diagonal corners are sums of neighbours:

const center = reduceArcana(a + b + c + d)

const corners = {
  topLeft: reduceArcana(a + b),
  topRight: reduceArcana(b + c),
  bottomRight: reduceArcana(c + d),
  bottomLeft: reduceArcana(d + a),
}
Enter fullscreen mode Exit fullscreen mode

A worked example

For 14 March 1990:

Point Calculation Value
left 14 14
top 3 3
right 1+9+9+0 = 19 19
bottom 14+3+19 = 36 -> 9 9
center 14+3+19+9 = 45 -> 9 9
top-left 14+3 = 17 17
top-right 3+19 = 22 22
bottom-right 19+9 = 28 -> 10 10
bottom-left 9+14 = 23 -> 5 5

Edge cases worth a unit test

  • 29.11.2000: day 29 reduces to 11, month 11 stays 11, year 2000 gives digit sum 2. Bottom is 6 and center is 3.
  • 01.01.2000: all small numbers, bottom 4, center 8.
  • A sum that lands exactly on 22 must stay 22, not become 4. This is the usual bug when people reduce with % 9.
  • Never reduce with modulo 9. It turns 18 into 0 and breaks the 10-22 range that the system needs.

Try it

If you just want to see the chart drawn for a date, the destiny matrix calculator uses exactly the functions above and runs fully in the browser, so the birth date never leaves your device.

Top comments (0)