Binary Tree

From mojo_puzzler
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Return to: Chialisp
                         1
                        / \
                       /   \
                      /     \
                     /       \
                    /         \
                   /           \
                  2             3
                 / \           / \
                /   \         /   \
               4      6      5     7
              / \    / \    / \   / \
             8   12 10  14 9  13 11  15
             ^    ^  ^   ^ ^   ^  ^   ^
   16-24 20-28 18-26 22-30 17-25 21-29 19-27 23-31  
        32-48            62 33            47-63
       64-96            126 65             95-127
        128            254 129             255
       256             510 257              511

Binary Tree example and explanation(as per Jakub Hadamcik @hadamcik 2021-07-10)

Btw there is (fairly) simple way how to calculate which # you want just by looking at solution (instead of writing very deep tree).

If you have for example (1 2 (((5 6) 4) 3)) and you want to know which # gets you atom for position of number 6 in that solution you just need to decode it into set of left/right (first/rest.. whatever works for you, it's same)

So you start with `1` as first and (2 (((5 6) 4) 3)) as rest and ask "is number I want on the left or right".. in this case it's right so you write down `R`

And you continue `2` and rest (((5 6) 4) 3) => `R`

So whole process is:

`1` and rest (2 (((5 6) 4) 3)) => `R`

`2` and rest ((((5 6) 4) 3)) => `R`

(((5 6) 4) 3) and rest () => `L`

((5 6) 4) and rest (3)=> `L`

(5 6) and rest (4) => `L`

`5` and rest (6) => `R`

`6` and rest `nil` => `L`

so result is `RRLLLRL` this you can convert to binary where `R` => 1 and `L` = 0 so `1100010`

For each position you then need to calculate `2^position*(binary + 1)` and sum those together (sounds harder than it is 😃)


Example for `1100010`:

`1`: `2^0 * (1 + 1)` = `2`

`1`: `2^1 * (1 + 1)` = `4`

`0`: `2^2 * (0 + 1)` = `4`

`0`: `2^3 * (0 + 1)` = `8`

`0`: `2^4 * (0 + 1)` = `16`

`1`: `2^5 * (1 + 1)` = `64`

`0`: `2^6 * (0 + 1)` = `64`

and when you sum results: `2+4+4+8+16+64+64` = `162` and add 1 to it (always; because 1 is for root) so final is `163` and brun '163' '(1 2 (((5 6) 4) 3))' gets you `6`

——————————————

Simpler format is in 2 rows. Top row is 2^position and bottom row is binary where if it's `L` you just take number from top row and if it's `R` you multiply it by 2. So:

1   2   4   8   16   32   64 ...
1   1   0   0   0    1    0
2 + 4 + 4 + 8 + 16 + 64 + 64 = 162