Month: May 2021

  • 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.