You mapped the numbers between 0 and 1 that have a finite number of decimals, like 0.123123425736289<p>But there are many more real numbers between 0 and 1 that have an infinite number of decimals, like 0.1231234736876578632786278365782635879281987087420...<p>As jgreen says in a sibling comment, which number do you assign to 1/3 = 0.333333333333333333333333333333333333333333... ?<p>The result you got is well known but interesting, because it's unintuitive. Moreover with some tricks you can try to extend your method to all fractions, like 1/3, 5/7, 27/127, ...<p>The problem is that there are irrational numbers like pi, sqrt(2), ... and many other numbers that we have assigned no friendly name. Those "unfriendly" numbers are the actual problem.
Each time I hear the argument, that real numbers between zero to one are a "larger" (nuanced) infinity than natural numbers, I want explore and see if it is possible to make a one to one mapping between these sets. This post is my attempt. It was a fun thought experiment.
Not sure what's on the vid. Didn't watch it. But if I understand you correctly, the following is impossible as shown in Cantor's simple diagonalization argument:<p>> Follow each branch as deeply as possible counting all sub branches until there are no sub branches left.
You've mapped from the decimal numbers (the subset of rational numbers where the denominator is a power of 10) between 0 and 1 to the natural numbers, not from the real numbers between 0 and 1 to the natural numbers.
In order for each level to exclude numbers that have already been counted, each level would only be 9 numbers:<p>So if level = lambda n: 1-int(math.log10(1./n))<p>We only ever generate [‘.’ + ‘0’ * (level(n) – 1) + str(i + 1) for i in range(9)]