基于10、2、36甚至-10,我们面临许多挑战,但是其他所有理性基础又如何呢?
任务
给定以10为底的整数和有理底数,请以该底数返回整数(作为数组,字符串等)。
处理
很难想象一个合理的基础,因此让我们使用爆炸点将其可视化:
考虑这个动画,以基数3表示17:
每个点代表一个单位,框代表数字:最右边的框是一个位置,中间的框是3 ^ 1位置,最左边的框是3 ^ 2位置。
我们可以从一个地方的17个点开始。但是,这是基数3,因此该位置必须小于3。因此,我们“爆炸” 3个点,并在左侧的框上创建一个点。我们重复此过程,直到最终得到一个没有爆炸点的稳定位置(即同一框中的3个点)。
因此,以10为底的17是以3为底的122。
分数基数类似于将一些点分解为一个以上的点。基数3/2将爆炸3个点以创建2。
以3/2为基数表示17:
因此,以10为底的17是以3/2为底的21012。
负基的工作原理与此类似,但是我们必须跟踪符号(使用所谓的反点,等于-1;用空心圆表示)。
以-3表示17:
注意,还有额外的爆炸使所有框的符号相同(忽略零)。
因此,以10为底的17是以-3为底的212。
否定的有理基础在以上两种情况的组合中也类似地起作用。
规则
- 没有标准漏洞。
- 输出中每个“数字”的符号必须相同(或为零)。
- 所有数字的绝对值必须小于基数分子的绝对值。
- 您可以假定基数的绝对值大于1。
- 您可以假设一个理性基数是其最小化形式。
- 您可以在输入中分别计算基数的分子和分母。
- 如果一个数字具有多种表示形式,则可以输出其中任何一种。(例如,12在基体10可以是
{-2, -8}
和{1, 9, 2}
在碱-10)
测试用例:
格式: {in, base} -> result
{7, 4/3} -> {3, 3}
{-42, -2} -> {1, 0, 1, 0, 1, 0}
{-112, -7/3} -> {-6, -5, 0, -1, 0}
{1234, 9/2} -> {2, 3, 6, 4, 1}
{60043, -37/3} -> {-33, -14, -22, -8}
由于某些输入可能具有多种表示形式,因此我建议在TIO上使用此Mathematica代码段测试输出。
这是代码高尔夫,因此每种语言中字节数最少的提交将获胜!
有关爆炸点的更多信息,请访问全球数学项目网站!他们有很多很棒的数学东西!