Densely packed decimal (DPD) to decimal
JavaScript (ES6), 112 bytes
All credit for this shorter version goes to @nwellnhof.
Takes input as an integer. Returns an array of three decimal digits.
n=&gt;[(x=n&gt;&gt;4,y=x&gt;&gt;3,q=n/2&amp;55,p=q%8)&gt;5&amp;&amp;q-39?8|y&amp;1:y,(p&amp;5^5?x&amp;6:q-23?8:y&amp;6)|x&amp;1,(p&lt;5?p*2:p&lt;6?x&amp;6:p%q&lt;7?y&amp;6:8)|n&amp;1]

Try it online!

JavaScript (ES6), 118 117 bytes
Takes input as an integer. Returns an array of three decimal digits.
n=&gt;[(x=n&gt;&gt;4&amp;7,y=n&gt;&gt;7,p=n/2&amp;7)&gt;5&amp;&amp;p&lt;7|x/2^2?8|y&amp;1:y,(p&lt;7?p-5?x:8:x/2^1?8:y&amp;6)|x&amp;1,(p&lt;5?p*2:p&lt;6?x&amp;6:p&lt;7|x&lt;2?y&amp;6:8)|n&amp;1]

Try it online!
How?
Instead of trying to apply the 'official' algorithm, this code is based on some kind of reverse-engineering of the patterns that can be found in the expected results.
Given the input integer \$n\$, we compute:
$$\begin{align}&amp;x=\left\lfloor\frac{n}{16}\right\rfloor \bmod 8\\
&amp;y=\left\lfloor\frac{n}{128}\right\rfloor\\
&amp;p=\left\lfloor\frac{n}{2}\right\rfloor \bmod 8\end{align}
$$
Example: first digit (hundreds)
x     | 0                | 1                | 2                | 3               
n &amp; 1 | 0101010101010101 | 0101010101010101 | 0101010101010101 | 0101010101010101
p     | 0011223344556677 | 0011223344556677 | 0011223344556677 | 0011223344556677
------+------------------+------------------+------------------+-----------------
y = 0 | 0000000000008888 | 0000000000008888 | 0000000000008888 | 0000000000008888
y = 1 | 1111111111119999 | 1111111111119999 | 1111111111119999 | 1111111111119999
y = 2 | 2222222222228888 | 2222222222228888 | 2222222222228888 | 2222222222228888
y = 3 | 3333333333339999 | 3333333333339999 | 3333333333339999 | 3333333333339999
y = 4 | 4444444444448888 | 4444444444448888 | 4444444444448888 | 4444444444448888
y = 5 | 5555555555559999 | 5555555555559999 | 5555555555559999 | 5555555555559999
y = 6 | 6666666666668888 | 6666666666668888 | 6666666666668888 | 6666666666668888
y = 7 | 7777777777779999 | 7777777777779999 | 7777777777779999 | 7777777777779999

x     | 4                | 5                | 6                | 7               
n &amp; 1 | 0101010101010101 | 0101010101010101 | 0101010101010101 | 0101010101010101
p     | 0011223344556677 | 0011223344556677 | 0011223344556677 | 0011223344556677
------+------------------+------------------+------------------+-----------------
y = 0 | 0000000000008800 | 0000000000008800 | 0000000000008888 | 0000000000008888
y = 1 | 1111111111119911 | 1111111111119911 | 1111111111119999 | 1111111111119999
y = 2 | 2222222222228822 | 2222222222228822 | 2222222222228888 | 2222222222228888
y = 3 | 3333333333339933 | 3333333333339933 | 3333333333339999 | 3333333333339999
y = 4 | 4444444444448844 | 4444444444448844 | 4444444444448888 | 4444444444448888
y = 5 | 5555555555559955 | 5555555555559955 | 5555555555559999 | 5555555555559999
y = 6 | 6666666666668866 | 6666666666668866 | 6666666666668888 | 6666666666668888
y = 7 | 7777777777779977 | 7777777777779977 | 7777777777779999 | 7777777777779999

Algorithm:

If \$p&lt;6\$, we have \$d=y\$
If \$p=6\$, we have \$d=8+(y\bmod2)\$
If \$p=7\text{ AND }(x&lt;4\text{ OR }x&gt;5)\$, we have \$d=8+(y\bmod2)\$
If \$p=7\text{ AND }(x=4\text{ OR }x=5)\$, we have \$d=y\$

As JS code:
p &gt; 5 &amp;&amp; p &lt; 7 | x / 2 ^ 2 ? 8 | y &amp; 1 : y