When I was a kid, my dad and I had a (friendly) argument. I said that digital displays were better and I wanted them everywhere, for example, as the speedometer of a car. My dad said that dials were better and he made his point:

Dials are faster to read and remember and if the needle is oscillating, you can still read it and now what the average is.

— My Dad

He was right. If your speed was rapidly oscillating between 98km/h and 102km/h on a dial, it was trivial to read, on a digital display, it would be a blur that looks like 199km/h. You could solve it by dampening oscillations, but that creates other problems (lags) and it’s a boring solution.

My dad was right, so I decided to solve the problem. I spent years thinking about and came up with a solution when I was 13 or so. A numbering system where only one digit changes at a time. Let me demonstrate. 0 through 9 is the same: 1, 2, 3, 4, 5, 6, 7, 8, 9. But the next number can’t be 10, because that’s changing two digits at the same time, so it’s 19… now what? Now you go down until you hit 10 and then you can go to 20, because between 10 and 20 there’s only one digit difference. Here’s from 1 to 30, highlighting the ones that are different:

Normal PSDC
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 19
11 18
12 17
13 16
14 15
15 14
16 13
17 12
18 11
19 10
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 39
31 38
32 37
33 36
34 35
35 34
36 33
37 32
38 31
39 30

The way it works is that when a digit is odd in the original normal decimal number, the next digit is PSDC is inverted. This is the Python code to convert numbers to PSDC representation:

def convert_to_psdc(number):
  digits = [int(n) for n in list(str(number))]
  new_digits = []
  for i, digit in enumerate(digits):
    if i == 0 or digits[i - 1] % 2 == 0:
      new_digits.append(digit)
    else:
      new_digits.append(9 - digit)
  return int("".join([str(d) for d in new_digits]))

Here are a few interesting PSDC numbers:

Normal PSDC
0 0
1 1
9 9
10 19
11 18
18 11
19 10
20 20
21 21
99 90
100 190
101 191
189 119
190 109
191 108
999 900
1000 1900
1001 1901
1900 1090
1901 1091
9999 9000
10000 19000
10001 19001
99999 90000
100000 190000
100001 190001
999999 900000
1000000 1900000
1000001 1900001
9999999 9000000
10000000 19000000
10000001 19000001

Problem solved! Not really, this is useless… but for some reason 13 year old me started to be obsessed with this and I still think about it frequently.

If you want to see all the PSDC numbers up to 10k, I published a table on this site.


One response to “A odd numbering system I invented when I was a kid”

  1. Mahesh Avatar
    Mahesh

    Gray Code! In binary, that is.

Leave a Reply

You may also like:

If you want to work with me or hire me? Contact me

You can follow me or connect with me:

Or get new content delivered directly to your inbox.

Join 5,043 other subscribers

I wrote a book:

Stack of copies of How to Hire and Manage Remote Teams

How to Hire and Manage Remote Teams, where I distill all the techniques I've been using to build and manage distributed teams for the past 10 years.

I write about:

announcement blogging book book review book reviews books building Sano Business C# Clojure ClojureScript Common Lisp database Debian Esperanto Git ham radio history idea Java Kubuntu Lisp management Non-Fiction OpenID programming Python Radio Society of Great Britain Rails rant re-frame release Ruby Ruby on Rails Sano science science fiction security self-help Star Trek technology Ubuntu web Windows WordPress

I've been writing for a while:

Mastodon

%d bloggers like this: