311 lines
5.0 KiB
Plaintext
311 lines
5.0 KiB
Plaintext
Imaginary base numbers are a non-standard positional numeral system which uses an imaginary number as its radix. The most common is quater-imaginary with radix 2i.
|
||
|
||
''The quater-imaginary numeral system was first proposed by [https://en.wikipedia.org/wiki/Donald_Knuth Donald Knuth] in 1955 as a submission for a high school science talent search. [http://www.fact-index.com/q/qu/quater_imaginary_base.html [Ref.]]''
|
||
|
||
Other imaginary bases are possible too but are not as widely discussed and aren't specifically named.
|
||
|
||
'''Task:''' Write a set of procedures (functions, subroutines, however they are referred to in your language) to convert base 10 numbers to an imaginary base and back.
|
||
|
||
At a minimum, support quater-imaginary (base 2i).
|
||
|
||
For extra kudos, support positive or negative bases 2i through 6i (or higher).
|
||
|
||
As a stretch goal, support converting non-integer numbers ( E.G. 227.65625+10.859375i ) to an imaginary base.
|
||
|
||
See [https://en.wikipedia.org/wiki/Quater-imaginary_base Wikipedia: Quater-imaginary_base] for more details.
|
||
|
||
For reference, here are some some decimal and complex numbers converted to quater-imaginary.
|
||
<table class="multicol" role="presentation" style="border-collapse: collapse; padding: 0; border: 0; background:transparent; width:100%;">
|
||
<tr>
|
||
<td style="text-align: left; vertical-align: top;">
|
||
<table class="wikitable" style="text-align:right">
|
||
<tr>
|
||
<th>Base 10</th>
|
||
<th>Base 2<i>i</i></th>
|
||
</tr>
|
||
<tr>
|
||
<td>1</td>
|
||
<td><i> </i>1</td>
|
||
</tr>
|
||
<tr>
|
||
<td>2</td>
|
||
<td><i> </i>2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>3</td>
|
||
<td><i> </i>3</td>
|
||
</tr>
|
||
<tr>
|
||
<td>4</td>
|
||
<td><i> </i>10300</td>
|
||
</tr>
|
||
<tr>
|
||
<td>5</td>
|
||
<td><i> </i>10301</td>
|
||
</tr>
|
||
<tr>
|
||
<td>6</td>
|
||
<td><i> </i>10302</td>
|
||
</tr>
|
||
<tr>
|
||
<td>7</td>
|
||
<td><i> </i>10303</td>
|
||
</tr>
|
||
<tr>
|
||
<td>8</td>
|
||
<td><i> </i>10200</td>
|
||
</tr>
|
||
<tr>
|
||
<td>9</td>
|
||
<td><i> </i>10201</td>
|
||
</tr>
|
||
<tr>
|
||
<td>10</td>
|
||
<td><i> </i>10202</td>
|
||
</tr>
|
||
<tr>
|
||
<td>11</td>
|
||
<td><i> </i>10203</td>
|
||
</tr>
|
||
<tr>
|
||
<td>12</td>
|
||
<td><i> </i>10100</td>
|
||
</tr>
|
||
<tr>
|
||
<td>13</td>
|
||
<td><i> </i>10101</td>
|
||
</tr>
|
||
<tr>
|
||
<td>14</td>
|
||
<td><i> </i>10102</td>
|
||
</tr>
|
||
<tr>
|
||
<td>15</td>
|
||
<td><i> </i>10103</td>
|
||
</tr>
|
||
<tr>
|
||
<td>16</td>
|
||
<td><i> </i>10000</td>
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
<td style="text-align: left; vertical-align: top;">
|
||
<table class="wikitable" style="text-align:right">
|
||
<tr>
|
||
<th>Base 10</th>
|
||
<th>Base 2<i>i</i></th>
|
||
</tr>
|
||
<tr>
|
||
<td>−1</td>
|
||
<td><i> </i>103</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−2</td>
|
||
<td><i> </i>102</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−3</td>
|
||
<td><i> </i>101</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−4</td>
|
||
<td><i> </i>100</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−5</td>
|
||
<td><i> </i>203</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−6</td>
|
||
<td><i> </i>202</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−7</td>
|
||
<td><i> </i>201</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−8</td>
|
||
<td><i> </i>200</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−9</td>
|
||
<td><i> </i>303</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−10</td>
|
||
<td><i> </i>302</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−11</td>
|
||
<td><i> </i>301</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−12</td>
|
||
<td><i> </i>300</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−13</td>
|
||
<td><i> </i>1030003</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−14</td>
|
||
<td><i> </i>1030002</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−15</td>
|
||
<td><i> </i>1030001</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−16</td>
|
||
<td><i> </i>1030000</td>
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
<td style="text-align: left; vertical-align: top;">
|
||
<table class="wikitable" style="text-align:right">
|
||
<tr>
|
||
<th>Base 10</th>
|
||
<th>Base 2<i>i</i></th>
|
||
</tr>
|
||
<tr>
|
||
<td>1<i>i</i></td>
|
||
<td>10.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>2<i>i</i></td>
|
||
<td>10.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>3<i>i</i></td>
|
||
<td>20.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>4<i>i</i></td>
|
||
<td>20.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>5<i>i</i></td>
|
||
<td>30.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>6<i>i</i></td>
|
||
<td>30.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>7<i>i</i></td>
|
||
<td>103000.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>8<i>i</i></td>
|
||
<td>103000.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>9<i>i</i></td>
|
||
<td>103010.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>10<i>i</i></td>
|
||
<td>103010.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>11<i>i</i></td>
|
||
<td>103020.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>12<i>i</i></td>
|
||
<td>103020.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>13<i>i</i></td>
|
||
<td>103030.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>14<i>i</i></td>
|
||
<td>103030.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>15<i>i</i></td>
|
||
<td>102000.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>16<i>i</i></td>
|
||
<td>102000.0</td>
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
<td style="text-align: left; vertical-align: top;">
|
||
<table class="wikitable" style="text-align:right">
|
||
<tr>
|
||
<th>Base 10</th>
|
||
<th>Base 2<i>i</i></th>
|
||
</tr>
|
||
<tr>
|
||
<td>−1<i>i</i></td>
|
||
<td>0.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−2<i>i</i></td>
|
||
<td>1030.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−3<i>i</i></td>
|
||
<td>1030.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−4<i>i</i></td>
|
||
<td>1020.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−5<i>i</i></td>
|
||
<td>1020.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−6<i>i</i></td>
|
||
<td>1010.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−7<i>i</i></td>
|
||
<td>1010.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−8<i>i</i></td>
|
||
<td>1000.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−9<i>i</i></td>
|
||
<td>1000.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−10<i>i</i></td>
|
||
<td>2030.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−11<i>i</i></td>
|
||
<td>2030.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−12<i>i</i></td>
|
||
<td>2020.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−13<i>i</i></td>
|
||
<td>2020.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−14<i>i</i></td>
|
||
<td>2010.0</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−15<i>i</i></td>
|
||
<td>2010.2</td>
|
||
</tr>
|
||
<tr>
|
||
<td>−16<i>i</i></td>
|
||
<td>2000.0</td>
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|