输出古德斯坦序列


18

(这可能很经典,但这是我在这里的第一篇文章,所以我还没有准备好花哨的东西)

所述古德斯坦序列被用于将输入数定义如下:

选择一个起始数字n,令b = 2并重复:

  • Ñ在heriditary基地b表示法
  • 取代所有的(b)s至(b 1)S IN Ñ和1。减去
  • 输出n的新十进制评估
  • 增量b

遗传基础符号是数字的分解,其中基础是出现的较大数字。例子:

  • 83 在HB3中: 3^(3+1)+2
  • 226 在HB2中: 2^(2^(2+1))+2^(2+1)+2

Goodstein序列始终以0结尾,但是它们往往会很快变得很大,因此不要求输出完整序列。


任务:

给定任何合理格式的输入数字,您的工作是至少输出该数字的Goodstein序列,直到达到10 ^ 25或0

例子:

Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990

细节:

  • 输入数字可以是数组,字符串,整数,只要以十进制为基础
  • 输出遵循相同的规则
  • 输出中各项的分隔可以是空格,换行或任何合理的分隔
  • 一旦序列大于10 ^ 25,您的程序可能会正常退出,抛出错误/异常或继续(无限制)
  • 这是,因此最短的答案(以字节为单位)获胜
  • 当然,标准漏洞是被禁止的
  • 此处的 Python非高尔夫工作示例

2
您可以逐步添加一个测试用例吗?
Rod

5
欢迎来到PPCG!不错的第一个挑战!
FantaC


2
@ØrjanJohansen是的,错误是,int(q/base.b), q%base.b需要是q//base.b, q%base.b(或简称divmod(q, base.b)),以避免浮点错误。
安德斯·卡塞格

2
“至少到10 ^ 25或0为止”是否意味着该程序在达到0后继续运行(大概是-1,-2,-3,...)?
Anders Kaseorg '17

Answers:


3

Pyth28 26字节

.V2JbL&bs.e*^hJykb_jbJ=ty

尾随换行符很重要。

在线尝试!(此链接包括Q当前版本的Pyth不需要的其他链接。)

怎么运行的

.V2JbL&bs.e*^hJykb_jbJ=ty
.V2                          for b in [2, 3, 4, ...]:
   Jb                          assign J = b
     L                         def y(b):
      &b                         b and
                   jbJ             convert b to base J
                  _                reverse
         .e                        enumerated map for values b and indices k:
             hJ                      J + 1
            ^  yk                    to the power y(k)
           *     b                   times b
(newline)                      print Q (autoinitialized to the input)
                        y      y(Q)
                       t       subtract 1
                      =        assign back to Q

重要的y是在每次循环迭代中都要重新定义,以防止在对全局变量进行更改时进行记录J


3

Haskell,77个字节

(&2)是一个匿名函数,使用Integer并返回Integers 的(可能很长)列表,用作as (&2) 13

(&2)
n&b|n<0=[]|let _?0=0;e?n=(e+1)?div n b+mod n b*(b+1)^0?e=n:(0?n-1)&(b+1)

在线尝试!(在截止10^25)。

怎么运行的

  • (&2)从base开始序列2
  • n&b从数字n和base 开始计算子序列b
    • 如果出现空白列表n<0,它将暂停,这通常会在随后的步骤中发生n==0
    • 否则,它n位于表达式递归返回的列表的前面(0?n-1)&(b+1)
  • ?是本地函数运算符。0?n给出转换n为遗传基础的结果b,然后随处增加基础。
    • 转换随着e跟踪当前指数的变量重复进行。e?n转换数字n*b^e
    • 递归随着0when 停止n==0
    • 否则,它除以nbase b
      • (e+1)?div n b 处理商和下一个较高指数的递归。
      • mod n b*(b+1)^0?e处理余数(即与当前指数对应的数字e),基数的增量,并使用进行遗传转换0?e
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.