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.
Leave a Reply