RosettaCodeData/Task/Imaginary-base-numbers/00-TASK.txt

311 lines
5.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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>&nbsp;</i>1</td>
</tr>
<tr>
<td>2</td>
<td><i>&nbsp;</i>2</td>
</tr>
<tr>
<td>3</td>
<td><i>&nbsp;</i>3</td>
</tr>
<tr>
<td>4</td>
<td><i>&nbsp;</i>10300</td>
</tr>
<tr>
<td>5</td>
<td><i>&nbsp;</i>10301</td>
</tr>
<tr>
<td>6</td>
<td><i>&nbsp;</i>10302</td>
</tr>
<tr>
<td>7</td>
<td><i>&nbsp;</i>10303</td>
</tr>
<tr>
<td>8</td>
<td><i>&nbsp;</i>10200</td>
</tr>
<tr>
<td>9</td>
<td><i>&nbsp;</i>10201</td>
</tr>
<tr>
<td>10</td>
<td><i>&nbsp;</i>10202</td>
</tr>
<tr>
<td>11</td>
<td><i>&nbsp;</i>10203</td>
</tr>
<tr>
<td>12</td>
<td><i>&nbsp;</i>10100</td>
</tr>
<tr>
<td>13</td>
<td><i>&nbsp;</i>10101</td>
</tr>
<tr>
<td>14</td>
<td><i>&nbsp;</i>10102</td>
</tr>
<tr>
<td>15</td>
<td><i>&nbsp;</i>10103</td>
</tr>
<tr>
<td>16</td>
<td><i>&nbsp;</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>&nbsp;</i>103</td>
</tr>
<tr>
<td>2</td>
<td><i>&nbsp;</i>102</td>
</tr>
<tr>
<td>3</td>
<td><i>&nbsp;</i>101</td>
</tr>
<tr>
<td>4</td>
<td><i>&nbsp;</i>100</td>
</tr>
<tr>
<td>5</td>
<td><i>&nbsp;</i>203</td>
</tr>
<tr>
<td>6</td>
<td><i>&nbsp;</i>202</td>
</tr>
<tr>
<td>7</td>
<td><i>&nbsp;</i>201</td>
</tr>
<tr>
<td>8</td>
<td><i>&nbsp;</i>200</td>
</tr>
<tr>
<td>9</td>
<td><i>&nbsp;</i>303</td>
</tr>
<tr>
<td>10</td>
<td><i>&nbsp;</i>302</td>
</tr>
<tr>
<td>11</td>
<td><i>&nbsp;</i>301</td>
</tr>
<tr>
<td>12</td>
<td><i>&nbsp;</i>300</td>
</tr>
<tr>
<td>13</td>
<td><i>&nbsp;</i>1030003</td>
</tr>
<tr>
<td>14</td>
<td><i>&nbsp;</i>1030002</td>
</tr>
<tr>
<td>15</td>
<td><i>&nbsp;</i>1030001</td>
</tr>
<tr>
<td>16</td>
<td><i>&nbsp;</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>